Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F142212581
D4998.id12486.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D4998.id12486.diff
View Options
Index: UPDATING
===================================================================
--- UPDATING
+++ UPDATING
@@ -32,6 +32,13 @@
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
20160119:
+ Building ZFS pools on top of zvols is prohibited by default. That
+ feature never really worked; it's always been prone to deadlocks.
+ Using a zvol as the backing store for a VM guest's virtual disk will
+ still work, even if the guest is using ZFS. Legacy behavior can be
+ restored by setting vfs.zfs.vol.recursive=1.
+
+20160119:
The NONE and HPN patches has been removed from OpenSSH. They are
still available in the security/openssh-portable port.
Index: sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
===================================================================
--- sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
+++ sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zvol.c
@@ -134,6 +134,9 @@
static int volmode = ZFS_VOLMODE_GEOM;
SYSCTL_INT(_vfs_zfs_vol, OID_AUTO, mode, CTLFLAG_RWTUN, &volmode, 0,
"Expose as GEOM providers (1), device files (2) or neither");
+static boolean_t zpool_on_zvol = B_FALSE;
+SYSCTL_INT(_vfs_zfs_vol, OID_AUTO, recursive, CTLFLAG_RWTUN, &zpool_on_zvol, 0,
+ "Allow zpools to use zvols as vdevs (DANGEROUS)");
#endif
typedef struct zvol_extent {
@@ -1114,7 +1117,9 @@
return (err);
}
#else /* !illumos */
- if (tsd_get(zfs_geom_probe_vdev_key) != NULL) {
+ boolean_t locked = B_FALSE;
+
+ if (!zpool_on_zvol && tsd_get(zfs_geom_probe_vdev_key) != NULL) {
/*
* if zfs_geom_probe_vdev_key is set, that means that zfs is
* attempting to probe geom providers while looking for a
@@ -1125,19 +1130,34 @@
*/
return (EOPNOTSUPP);
}
-
- mutex_enter(&zfsdev_state_lock);
+ /*
+ * Protect against recursively entering spa_namespace_lock
+ * when spa_open() is used for a pool on a (local) ZVOL(s).
+ * This is needed since we replaced upstream zfsdev_state_lock
+ * with spa_namespace_lock in the ZVOL code.
+ * We are using the same trick as spa_open().
+ * Note that calls in zvol_first_open which need to resolve
+ * pool name to a spa object will enter spa_open()
+ * recursively, but that function already has all the
+ * necessary protection.
+ */
+ if (!MUTEX_HELD(&zfsdev_state_lock)) {
+ mutex_enter(&zfsdev_state_lock);
+ locked = B_TRUE;
+ }
zv = pp->private;
if (zv == NULL) {
- mutex_exit(&zfsdev_state_lock);
+ if (locked)
+ mutex_exit(&zfsdev_state_lock);
return (SET_ERROR(ENXIO));
}
if (zv->zv_total_opens == 0) {
err = zvol_first_open(zv);
if (err) {
- mutex_exit(&zfsdev_state_lock);
+ if (locked)
+ mutex_exit(&zfsdev_state_lock);
return (err);
}
pp->mediasize = zv->zv_volsize;
@@ -1171,7 +1191,8 @@
mutex_exit(&zfsdev_state_lock);
#else
zv->zv_total_opens += count;
- mutex_exit(&zfsdev_state_lock);
+ if (locked)
+ mutex_exit(&zfsdev_state_lock);
#endif
return (err);
@@ -1181,7 +1202,8 @@
#ifdef illumos
mutex_exit(&zfsdev_state_lock);
#else
- mutex_exit(&zfsdev_state_lock);
+ if (locked)
+ mutex_exit(&zfsdev_state_lock);
#endif
return (err);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 18, 7:56 AM (18 h, 33 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27706636
Default Alt Text
D4998.id12486.diff (3 KB)
Attached To
Mode
D4998: Add a sysctl to allow ZFS pools backed by zvols
Attached
Detach File
Event Timeline
Log In to Comment