vdev's sectorsize should not be greater than 8 Kbytes and also
it should be power of 2. This prevents non-aligned access while probing vdev's labels. PR: kern/147852 Reviewed by: pjd MFC after: 1 week
This commit is contained in:
parent
a3ebd02675
commit
459d0e830d
@ -393,7 +393,8 @@ vdev_geom_open_by_path(vdev_t *vd, int check_guid)
|
||||
if (pp != NULL) {
|
||||
ZFS_LOG(1, "Found provider by name %s.", vd->vdev_path);
|
||||
cp = vdev_geom_attach(pp);
|
||||
if (cp != NULL && check_guid) {
|
||||
if (cp != NULL && check_guid && ISP2(pp->sectorsize) &&
|
||||
pp->sectorsize <= VDEV_PAD_SIZE) {
|
||||
g_topology_unlock();
|
||||
guid = vdev_geom_read_guid(cp);
|
||||
g_topology_lock();
|
||||
@ -457,6 +458,17 @@ vdev_geom_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
|
||||
if (cp == NULL) {
|
||||
ZFS_LOG(1, "Provider %s not found.", vd->vdev_path);
|
||||
error = ENOENT;
|
||||
} else if (cp->provider->sectorsize > VDEV_PAD_SIZE ||
|
||||
!ISP2(cp->provider->sectorsize)) {
|
||||
ZFS_LOG(1, "Provider %s has unsupported sectorsize.",
|
||||
vd->vdev_path);
|
||||
|
||||
g_topology_lock();
|
||||
vdev_geom_detach(cp, 0);
|
||||
g_topology_unlock();
|
||||
|
||||
error = EINVAL;
|
||||
cp = NULL;
|
||||
} else if (cp->acw == 0 && (spa_mode(vd->vdev_spa) & FWRITE) != 0) {
|
||||
int i;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user