Module Name:    src
Committed By:   mlelstv
Date:           Thu Jun 25 09:39:15 UTC 2020

Modified Files:
        src/external/cddl/osnet/dist/uts/common/fs/zfs: vdev_disk.c

Log Message:
Don't assume everything is a wedge and has a parent device. On non-wedges
this crashes.

Instead, just talk to the referenced device and rely on the dk driver
to pass requests correctly.


To generate a diff of this commit:
cvs rdiff -u -r1.17 -r1.18 \
    src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
diff -u src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.18
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.17	Sun Jun 21 21:29:11 2020
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Thu Jun 25 09:39:15 2020
@@ -222,19 +222,18 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 
 	pdk = NULL;
 	if (getdiskinfo(vp, &dkw) == 0)
-		pdk = disk_find(dkw.dkw_parent);
+		pdk = disk_find(dkw.dkw_devname);
 
 	/* XXXNETBSD Once tls-maxphys gets merged this block becomes:
 		dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS);
 	*/
 	{
 		struct buf buf = {
+			.b_dev = vp->v_rdev,
 			.b_bcount = MAXPHYS,
 		};
-		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys) {
-			buf.b_dev = pdk->dk_rawvp->v_rdev;
+		if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
 			(*pdk->dk_driver->d_minphys)(&buf);
-		}
 		dvd->vd_maxphys = buf.b_bcount;
 	}
 

Reply via email to