]> git.proxmox.com Git - mirror_zfs.git/commitdiff
Revert "Do not persist user/group/project quota zap objects when unneeded"
authorBrian Behlendorf <behlendorf1@llnl.gov>
Mon, 23 Oct 2023 16:55:36 +0000 (09:55 -0700)
committerGitHub <noreply@github.com>
Mon, 23 Oct 2023 16:55:36 +0000 (09:55 -0700)
This reverts commit 797f55ef12d752d2a7fb04fae5d24e019adf2a1d which
was causing a VERIFY failure when running the project quota tests.

Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #15438

module/zfs/zfs_quota.c

index 56f9d22ed0e573d6ecf00e66141d8267ba4d4ce5..9b351eefc04e5336b7f4e1647f01a2099d87c155 100644 (file)
@@ -347,32 +347,18 @@ zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
        if (*objp == 0) {
                *objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA,
                    DMU_OT_NONE, 0, tx);
-               VERIFY0(zap_add(zfsvfs->z_os, MASTER_NODE_OBJ,
+               VERIFY(0 == zap_add(zfsvfs->z_os, MASTER_NODE_OBJ,
                    zfs_userquota_prop_prefixes[type], 8, 1, objp, tx));
        }
+       mutex_exit(&zfsvfs->z_lock);
 
        if (quota == 0) {
                err = zap_remove(zfsvfs->z_os, *objp, buf, tx);
                if (err == ENOENT)
                        err = 0;
-               /*
-                * If the quota contains no more entries after the entry
-                * was removed, destroy the quota zap and remove the
-                * reference from zfsvfs. This will save us unnecessary
-                * zap_lookups for the quota during writes.
-                */
-               uint64_t zap_nentries;
-               VERIFY0(zap_count(zfsvfs->z_os, *objp, &zap_nentries));
-               if (zap_nentries == 0) {
-                       VERIFY0(zap_remove(zfsvfs->z_os, MASTER_NODE_OBJ,
-                           zfs_userquota_prop_prefixes[type], tx));
-                       VERIFY0(zap_destroy(zfsvfs->z_os, *objp, tx));
-                       *objp = 0;
-               }
        } else {
                err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, &quota, tx);
        }
-       mutex_exit(&zfsvfs->z_lock);
        ASSERT(err == 0);
        if (fuid_dirtied)
                zfs_fuid_sync(zfsvfs, tx);