]> git.proxmox.com Git - mirror_zfs.git/blobdiff - module/zfs/zfs_vfsops.c
Illumos 6171 - dsl_prop_unregister() slows down dataset eviction.
[mirror_zfs.git] / module / zfs / zfs_vfsops.c
index bc4fa85fae973d79a78d6889d47faffd4a2cb4e0..fc63ea569ac80c4a41b36b47e31aea9c8fbf6d4f 100644 (file)
@@ -341,38 +341,7 @@ zfs_register_callbacks(zfs_sb_t *zsb)
        return (0);
 
 unregister:
-       /*
-        * We may attempt to unregister some callbacks that are not
-        * registered, but this is OK; it will simply return ENOMSG,
-        * which we will ignore.
-        */
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_ATIME),
-           atime_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_RELATIME),
-           relatime_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_XATTR),
-           xattr_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_RECORDSIZE),
-           blksz_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_READONLY),
-           readonly_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_DEVICES),
-           devices_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_SETUID),
-           setuid_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_EXEC),
-           exec_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_SNAPDIR),
-           snapdir_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_ACLTYPE),
-           acltype_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_ACLINHERIT),
-           acl_inherit_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_VSCAN),
-           vscan_changed_cb, zsb);
-       (void) dsl_prop_unregister(ds, zfs_prop_to_name(ZFS_PROP_NBMAND),
-           nbmand_changed_cb, zsb);
-
+       dsl_prop_unregister_all(ds, zsb);
        return (error);
 }
 EXPORT_SYMBOL(zfs_register_callbacks);
@@ -959,52 +928,9 @@ void
 zfs_unregister_callbacks(zfs_sb_t *zsb)
 {
        objset_t *os = zsb->z_os;
-       struct dsl_dataset *ds;
-
-       /*
-        * Unregister properties.
-        */
-       if (!dmu_objset_is_snapshot(os)) {
-               ds = dmu_objset_ds(os);
-               VERIFY(dsl_prop_unregister(ds, "atime", atime_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "relatime", relatime_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "xattr", xattr_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "recordsize", blksz_changed_cb,
-                   zsb) == 0);
 
-               VERIFY(dsl_prop_unregister(ds, "readonly", readonly_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "devices", devices_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "setuid", setuid_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "exec", exec_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "snapdir", snapdir_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "acltype", acltype_changed_cb,
-                   zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "aclinherit",
-                   acl_inherit_changed_cb, zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "vscan",
-                   vscan_changed_cb, zsb) == 0);
-
-               VERIFY(dsl_prop_unregister(ds, "nbmand",
-                   nbmand_changed_cb, zsb) == 0);
-       }
+       if (!dmu_objset_is_snapshot(os))
+               dsl_prop_unregister_all(dmu_objset_ds(os), zsb);
 }
 EXPORT_SYMBOL(zfs_unregister_callbacks);