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; }