Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/external/cddl/osnet/dist/uts/common/fs/zfs Use utility funct...
details: https://anonhg.NetBSD.org/src/rev/ed58610489a8
branches: trunk
changeset: 969740:ed58610489a8
user: mlelstv <mlelstv%NetBSD.org@localhost>
date: Sat Feb 29 17:15:43 2020 +0000
description:
Use utility functions to handle disk geometry.
diffstat:
external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c | 62 ++++-------------
1 files changed, 17 insertions(+), 45 deletions(-)
diffs (106 lines):
diff -r c7a2f6cdf97e -r ed58610489a8 external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c
--- a/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sat Feb 29 17:14:40 2020 +0000
+++ b/external/cddl/osnet/dist/uts/common/fs/zfs/vdev_disk.c Sat Feb 29 17:15:43 2020 +0000
@@ -35,7 +35,6 @@
#include <sys/sunldi.h>
#include <sys/fm/fs/zfs.h>
#include <sys/disk.h>
-#include <sys/disklabel.h>
#include <sys/dkio.h>
#include <sys/workqueue.h>
@@ -147,10 +146,11 @@
spa_t *spa = vd->vdev_spa;
vdev_disk_t *dvd;
vnode_t *vp;
- struct dkwedge_info dkw;
+ int error, cmd;
+ uint64_t numsecs;
+ unsigned secsize;
struct disk *pdk;
- int error, cmd;
- struct partinfo pinfo;
+ struct dkwedge_info dkw;
/*
* We must have a pathname, and it must be absolute.
@@ -219,33 +219,15 @@
return (SET_ERROR(EINVAL));
}
+ pdk = NULL;
+ if (getdiskinfo(vp, &dkw) == 0)
+ pdk = disk_find(dkw.dkw_parent);
+
/* XXXNETBSD Once tls-maxphys gets merged this block becomes:
- 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 };
-
- 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;
- }
- buf.b_dev = vp->v_rdev;
- }
if (pdk && pdk->dk_driver && pdk->dk_driver->d_minphys)
(*pdk->dk_driver->d_minphys)(&buf);
dvd->vd_maxphys = buf.b_bcount;
@@ -268,32 +250,22 @@
dvd->vd_vp = vp;
skip_open:
- /*
- * Determine the actual size of the device.
- * Try wedge info first as it supports larger disks.
- */
- error = VOP_IOCTL(vp, DIOCGWEDGEINFO, &dkw, FREAD, NOCRED);
- if (error == 0) {
- pdk = disk_find(dkw.dkw_parent);
- if (pdk) {
- pinfo.pi_secsize = (1 << pdk->dk_byteshift);
- pinfo.pi_size = dkw.dkw_size;
- pinfo.pi_offset = dkw.dkw_offset;
- } else
- error = ENODEV;
- }
- if (error)
- error = VOP_IOCTL(vp, DIOCGPARTINFO, &pinfo, FREAD, kcred);
+ error = getdisksize(vp, &numsecs, &secsize);
if (error != 0) {
vd->vdev_stat.vs_aux = VDEV_AUX_OPEN_FAILED;
return (SET_ERROR(error));
}
- *psize = pinfo.pi_size * pinfo.pi_secsize;
+
+ *psize = numsecs * secsize;
*max_psize = *psize;
- *ashift = highbit(MAX(pinfo.pi_secsize, SPA_MINBLOCKSIZE)) - 1;
+ *ashift = highbit(MAX(secsize, SPA_MINBLOCKSIZE)) - 1;
*pashift = *ashift;
- vd->vdev_wholedisk = (pinfo.pi_offset == 0); /* XXXNETBSD */
+
+ vd->vdev_wholedisk = 0;
+ if (getdiskinfo(vp, &dkw) != 0 &&
+ dkw.dkw_offset == 0 && dkw.dkw_size == numsecs)
+ vd->vdev_wholedisk = 1,
/*
* Clear the nowritecache bit, so that on a vdev_reopen() we will
Home |
Main Index |
Thread Index |
Old Index