Skip to content

Commit

Permalink
Exit the teardown section later in rename on FreeBSD
Browse files Browse the repository at this point in the history
We have to hold the teardown lock while dereferencing zfsvfs->z_os and,
I believe, when committing to the ZIL.

Note that jumping to the "out" label, "error" is always non-zero.

Reviewed-by: Brian Behlendorf <[email protected]>
Reviewed-by: Ryan Moeller <[email protected]>
Signed-off-by: Mark Johnston <[email protected]>
Closes #12704
  • Loading branch information
markjdb authored and behlendorf committed Oct 29, 2021
1 parent 68a7a9e commit 4d1a3ba
Showing 1 changed file with 4 additions and 3 deletions.
7 changes: 4 additions & 3 deletions module/os/freebsd/zfs/zfs_vnops_os.c
Original file line number Diff line number Diff line change
Expand Up @@ -3431,7 +3431,6 @@ zfs_rename_(vnode_t *sdvp, vnode_t **svpp, struct componentname *scnp,
dmu_tx_commit(tx);

unlockout: /* all 4 vnodes are locked, ZFS_ENTER called */
ZFS_EXIT(zfsvfs);
if (want_seqc_end) {
vn_seqc_write_end(*svpp);
vn_seqc_write_end(sdvp);
Expand All @@ -3444,10 +3443,12 @@ zfs_rename_(vnode_t *sdvp, vnode_t **svpp, struct componentname *scnp,
VOP_UNLOCK1(*svpp);
VOP_UNLOCK1(sdvp);

out: /* original two vnodes are locked */
MPASS(!want_seqc_end);
if (error == 0 && zfsvfs->z_os->os_sync == ZFS_SYNC_ALWAYS)
zil_commit(zilog, 0);
ZFS_EXIT(zfsvfs);

out: /* original two vnodes are locked */
MPASS(!want_seqc_end);

if (*tvpp != NULL)
VOP_UNLOCK1(*tvpp);
Expand Down

0 comments on commit 4d1a3ba

Please sign in to comment.