Module Name:    src
Committed By:   hannken
Date:           Tue Aug 20 08:12:14 UTC 2019

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

Log Message:
Rearrange the evaluation of "dvd_maxphys" so it works for wedges too.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 \
    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.11 src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.12
--- src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c:1.11	Wed Jun 12 04:20:18 2019
+++ src/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c	Tue Aug 20 08:12:14 2019
@@ -220,23 +220,33 @@ vdev_disk_open(vdev_t *vd, uint64_t *psi
 	}
 
 	/* XXXNETBSD Once tls-maxphys gets merged this block becomes:
-		pdk = disk_find_blk(vp->v_rdev);
+		if (VOP_IOCTL(vp, DIOCGWEDGEINFO, &dkw, FREAD, NOCRED) == 0)
+			pdk = disk_find(dkw.dkw_parent);
+		else
+			pdk = disk_find_blk(vp->v_rdev);
 		dvd->vd_maxphys = (pdk ? disk_maxphys(pdk) : MACHINE_MAXPHYS);
 	*/
 	{
 		struct buf buf = { .b_bcount = MAXPHYS };
-		const char *dev_name;
 
-		dev_name = devsw_blk2name(major(vp->v_rdev));
-		if (dev_name) {
-			char disk_name[16];
-
-			snprintf(disk_name, sizeof(disk_name), "%s%d",
-			    dev_name, DISKUNIT(vp->v_rdev));
-			pdk = disk_find(disk_name);
-			if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
-				(*pdk->dk_driver->d_minphys)(&buf);
+		if (VOP_IOCTL(vp, DIOCGWEDGEINFO, &dkw, FREAD, NOCRED) == 0) {
+			pdk = disk_find(dkw.dkw_parent);
+		} else {
+			const char *dev_name;
+
+			dev_name = devsw_blk2name(major(vp->v_rdev));
+			if (dev_name) {
+				char disk_name[16];
+
+				snprintf(disk_name, sizeof(disk_name), "%s%d",
+				    dev_name, DISKUNIT(vp->v_rdev));
+				pdk = disk_find(disk_name);
+			} else {
+				pdk = NULL;
+			}
 		}
+		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