diff options
author | mav <mav@FreeBSD.org> | 2016-11-08 20:57:46 +0000 |
---|---|---|
committer | mav <mav@FreeBSD.org> | 2016-11-08 20:57:46 +0000 |
commit | bce706eb1e2ba54bf26f3f31674637411f652829 (patch) | |
tree | a6316ab54400749662f905842cc0506f1205a5b3 | |
parent | 9b98bd2c9f08d91a310e1e9261fcbf1771948d6a (diff) | |
download | FreeBSD-src-bce706eb1e2ba54bf26f3f31674637411f652829.zip FreeBSD-src-bce706eb1e2ba54bf26f3f31674637411f652829.tar.gz |
MFC r307857: Fix panic after ZVOL renamed to name invalid for DEVFS.
-rw-r--r-- | sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c | 22 |
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); |