summaryrefslogtreecommitdiffstats
path: root/sys/cddl
diff options
context:
space:
mode:
authormav <mav@FreeBSD.org>2016-11-08 20:57:46 +0000
committermav <mav@FreeBSD.org>2016-11-08 20:57:46 +0000
commitbce706eb1e2ba54bf26f3f31674637411f652829 (patch)
treea6316ab54400749662f905842cc0506f1205a5b3 /sys/cddl
parent9b98bd2c9f08d91a310e1e9261fcbf1771948d6a (diff)
downloadFreeBSD-src-bce706eb1e2ba54bf26f3f31674637411f652829.zip
FreeBSD-src-bce706eb1e2ba54bf26f3f31674637411f652829.tar.gz
MFC r307857: Fix panic after ZVOL renamed to name invalid for DEVFS.
Diffstat (limited to 'sys/cddl')
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
index d0c7a74..832847e 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
@@ -782,8 +782,10 @@ zvol_remove_zv(zvol_state_t *zv)
g_topology_lock();
zvol_geom_destroy(zv);
g_topology_unlock();
- } else if (zv->zv_volmode == ZFS_VOLMODE_DEV)
- destroy_dev(zv->zv_dev);
+ } else if (zv->zv_volmode == ZFS_VOLMODE_DEV) {
+ if (zv->zv_dev != NULL)
+ destroy_dev(zv->zv_dev);
+ }
#endif
avl_destroy(&zv->zv_znode.z_range_avl);
@@ -2973,14 +2975,14 @@ zvol_rename_minor(zvol_state_t *zv, const char *newname)
} else if (zv->zv_volmode == ZFS_VOLMODE_DEV) {
struct make_dev_args args;
- dev = zv->zv_dev;
- ASSERT(dev != NULL);
- zv->zv_dev = NULL;
- destroy_dev(dev);
- if (zv->zv_total_opens > 0) {
- zv->zv_flags &= ~ZVOL_EXCL;
- zv->zv_total_opens = 0;
- zvol_last_close(zv);
+ if ((dev = zv->zv_dev) != NULL) {
+ zv->zv_dev = NULL;
+ destroy_dev(dev);
+ if (zv->zv_total_opens > 0) {
+ zv->zv_flags &= ~ZVOL_EXCL;
+ zv->zv_total_opens = 0;
+ zvol_last_close(zv);
+ }
}
make_dev_args_init(&args);
OpenPOWER on IntegriCloud