zfs: make seqc asserts conditional on replay

Avoids tripping on asserts when doing pool recovery.
This commit is contained in:
Mateusz Guzik 2021-03-13 10:10:16 +01:00
parent fb3edd4f3f
commit 59146a6921
2 changed files with 6 additions and 8 deletions

View File

@ -1141,10 +1141,11 @@ zfs_acl_chown_setattr(znode_t *zp)
int error;
zfs_acl_t *aclp;
if (zp->z_zfsvfs->z_replay == B_FALSE)
if (zp->z_zfsvfs->z_replay == B_FALSE) {
ASSERT_VOP_ELOCKED(ZTOV(zp), __func__);
ASSERT_VOP_IN_SEQC(ZTOV(zp));
}
ASSERT(MUTEX_HELD(&zp->z_acl_lock));
ASSERT_VOP_IN_SEQC(ZTOV(zp));
if ((error = zfs_acl_node_read(zp, B_TRUE, &aclp, B_FALSE)) == 0)
zp->z_mode = zfs_mode_compute(zp->z_mode, aclp,
@ -1172,7 +1173,9 @@ zfs_aclset_common(znode_t *zp, zfs_acl_t *aclp, cred_t *cr, dmu_tx_t *tx)
int count = 0;
zfs_acl_phys_t acl_phys;
ASSERT_VOP_IN_SEQC(ZTOV(zp));
if (zp->z_zfsvfs->z_replay == B_FALSE) {
ASSERT_VOP_IN_SEQC(ZTOV(zp));
}
mode = zp->z_mode;

View File

@ -859,12 +859,7 @@ zfs_replay_setattr(void *arg1, void *arg2, boolean_t byteswap)
zfsvfs->z_fuid_replay = zfs_replay_fuid_domain(start, &start,
lr->lr_uid, lr->lr_gid);
/*
* Satisfy assertions.
*/
vn_seqc_write_begin(ZTOV(zp));
error = zfs_setattr(zp, vap, 0, kcred);
vn_seqc_write_end(ZTOV(zp));
zfs_fuid_info_free(zfsvfs->z_fuid_replay);
zfsvfs->z_fuid_replay = NULL;