mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-25 18:59:33 +03:00
Revert "Do not persist user/group/project quota zap objects when unneeded"
This reverts commit 797f55ef12
which
was causing a VERIFY failure when running the project quota tests.
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #15438
This commit is contained in:
parent
b5e6091885
commit
e9725abd83
@ -347,32 +347,18 @@ zfs_set_userquota(zfsvfs_t *zfsvfs, zfs_userquota_prop_t type,
|
|||||||
if (*objp == 0) {
|
if (*objp == 0) {
|
||||||
*objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA,
|
*objp = zap_create(zfsvfs->z_os, DMU_OT_USERGROUP_QUOTA,
|
||||||
DMU_OT_NONE, 0, tx);
|
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));
|
zfs_userquota_prop_prefixes[type], 8, 1, objp, tx));
|
||||||
}
|
}
|
||||||
|
mutex_exit(&zfsvfs->z_lock);
|
||||||
|
|
||||||
if (quota == 0) {
|
if (quota == 0) {
|
||||||
err = zap_remove(zfsvfs->z_os, *objp, buf, tx);
|
err = zap_remove(zfsvfs->z_os, *objp, buf, tx);
|
||||||
if (err == ENOENT)
|
if (err == ENOENT)
|
||||||
err = 0;
|
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 {
|
} else {
|
||||||
err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, "a, tx);
|
err = zap_update(zfsvfs->z_os, *objp, buf, 8, 1, "a, tx);
|
||||||
}
|
}
|
||||||
mutex_exit(&zfsvfs->z_lock);
|
|
||||||
ASSERT(err == 0);
|
ASSERT(err == 0);
|
||||||
if (fuid_dirtied)
|
if (fuid_dirtied)
|
||||||
zfs_fuid_sync(zfsvfs, tx);
|
zfs_fuid_sync(zfsvfs, tx);
|
||||||
|
Loading…
Reference in New Issue
Block a user