--- a/usr/src/uts/common/fs/zfs/vdev_disk.c Mon Dec 01 11:27:58 2008 -0800
+++ b/usr/src/uts/common/fs/zfs/vdev_disk.c Mon Dec 01 12:43:36 2008 -0800
@@ -47,6 +47,7 @@
static int
vdev_disk_open(vdev_t *vd, uint64_t *psize, uint64_t *ashift)
{
+ spa_t *spa = vd->vdev_spa;
vdev_disk_t *dvd;
struct dk_minfo dkm;
int error;
@@ -95,7 +96,7 @@
error = EINVAL; /* presume failure */
- if (vd->vdev_path != NULL && !spa_is_root(vd->vdev_spa)) {
+ if (vd->vdev_path != NULL && !spa_is_root(spa)) {
ddi_devid_t devid;
if (vd->vdev_wholedisk == -1ULL) {
@@ -105,18 +106,18 @@
(void) snprintf(buf, len, "%ss0", vd->vdev_path);
- if (ldi_open_by_name(buf, spa_mode, kcred,
+ if (ldi_open_by_name(buf, spa_mode(spa), kcred,
&lh, zfs_li) == 0) {
spa_strfree(vd->vdev_path);
vd->vdev_path = buf;
vd->vdev_wholedisk = 1ULL;
- (void) ldi_close(lh, spa_mode, kcred);
+ (void) ldi_close(lh, spa_mode(spa), kcred);
} else {
kmem_free(buf, len);
}
}
- error = ldi_open_by_name(vd->vdev_path, spa_mode, kcred,
+ error = ldi_open_by_name(vd->vdev_path, spa_mode(spa), kcred,
&dvd->vd_lh, zfs_li);
/*
@@ -126,7 +127,8 @@
ldi_get_devid(dvd->vd_lh, &devid) == 0) {
if (ddi_devid_compare(devid, dvd->vd_devid) != 0) {
error = EINVAL;
- (void) ldi_close(dvd->vd_lh, spa_mode, kcred);
+ (void) ldi_close(dvd->vd_lh, spa_mode(spa),
+ kcred);
dvd->vd_lh = NULL;
}
ddi_devid_free(devid);
@@ -146,7 +148,7 @@
*/
if (error != 0 && vd->vdev_devid != NULL)
error = ldi_open_by_devid(dvd->vd_devid, dvd->vd_minor,
- spa_mode, kcred, &dvd->vd_lh, zfs_li);
+ spa_mode(spa), kcred, &dvd->vd_lh, zfs_li);
/*
* If all else fails, then try opening by physical path (if available)
@@ -157,7 +159,7 @@
if (error) {
if (vd->vdev_physpath != NULL &&
(dev = ddi_pathname_to_dev_t(vd->vdev_physpath)) != ENODEV)
- error = ldi_open_by_dev(&dev, OTYP_BLK, spa_mode,
+ error = ldi_open_by_dev(&dev, OTYP_BLK, spa_mode(spa),
kcred, &dvd->vd_lh, zfs_li);
/*
@@ -165,10 +167,9 @@
* as above. This hasn't been used in a very long time and we
* don't need to propagate its oddities to this edge condition.
*/
- if (error && vd->vdev_path != NULL &&
- !spa_is_root(vd->vdev_spa))
- error = ldi_open_by_name(vd->vdev_path, spa_mode, kcred,
- &dvd->vd_lh, zfs_li);
+ if (error && vd->vdev_path != NULL && !spa_is_root(spa))
+ error = ldi_open_by_name(vd->vdev_path, spa_mode(spa),
+ kcred, &dvd->vd_lh, zfs_li);
}
if (error) {
@@ -253,7 +254,7 @@
ddi_devid_free(dvd->vd_devid);
if (dvd->vd_lh != NULL)
- (void) ldi_close(dvd->vd_lh, spa_mode, kcred);
+ (void) ldi_close(dvd->vd_lh, spa_mode(vd->vdev_spa), kcred);
kmem_free(dvd, sizeof (vdev_disk_t));
vd->vdev_tsd = NULL;
@@ -469,7 +470,7 @@
if (devid != NULL && ddi_devid_str_decode(devid, &tmpdevid,
&minor_name) == 0) {
error = ldi_open_by_devid(tmpdevid, minor_name,
- spa_mode, kcred, &vd_lh, zfs_li);
+ FREAD, kcred, &vd_lh, zfs_li);
ddi_devid_free(tmpdevid);
ddi_devid_str_free(minor_name);
}