git: 038fe6e089f0 - main - ufs_rename: use VOP_VPUT_PAIR and rely on directory sync/truncation there
Konstantin Belousov
kib at FreeBSD.org
Fri Feb 12 01:07:25 UTC 2021
The branch main has been updated by kib:
URL: https://cgit.FreeBSD.org/src/commit/?id=038fe6e089f03ca864c1dd5ac0c76404a13bbe79
commit 038fe6e089f03ca864c1dd5ac0c76404a13bbe79
Author: Konstantin Belousov <kib at FreeBSD.org>
AuthorDate: 2021-01-28 13:34:56 +0000
Commit: Konstantin Belousov <kib at FreeBSD.org>
CommitDate: 2021-02-12 01:02:21 +0000
ufs_rename: use VOP_VPUT_PAIR and rely on directory sync/truncation there
Suggested by: mckusick
Reviewed by: chs, mckusick
Tested by: pho
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
---
sys/ufs/ufs/ufs_vnops.c | 34 ++++++----------------------------
1 file changed, 6 insertions(+), 28 deletions(-)
diff --git a/sys/ufs/ufs/ufs_vnops.c b/sys/ufs/ufs/ufs_vnops.c
index 70b5a44ca21d..c101e699bad6 100644
--- a/sys/ufs/ufs/ufs_vnops.c
+++ b/sys/ufs/ufs/ufs_vnops.c
@@ -1676,38 +1676,16 @@ unlockout:
vput(fdvp);
vput(fvp);
- if (tvp)
- vput(tvp);
+
/*
- * If compaction or fsync was requested do it now that other locks
- * are no longer needed.
+ * If compaction or fsync was requested do it in
+ * ffs_vput_pair() now that other locks are no longer needed.
*/
if (error == 0 && endoff != 0) {
- do {
- error = UFS_TRUNCATE(tdvp, endoff, IO_NORMAL |
- (DOINGASYNC(tdvp) ? 0 : IO_SYNC), tcnp->cn_cred);
- } while (error == ERELOOKUP);
- if (error != 0 && !ffs_fsfail_cleanup(VFSTOUFS(mp), error))
- vn_printf(tdvp,
- "ufs_rename: failed to truncate, error %d\n",
- error);
-#ifdef UFS_DIRHASH
- if (error != 0)
- ufsdirhash_free(tdp);
-#endif
- /*
- * Even if the directory compaction failed, rename was
- * succesful. Do not propagate a UFS_TRUNCATE() error
- * to the caller.
- */
- error = 0;
- }
- if (error == 0 && tdp->i_flag & IN_NEEDSYNC) {
- do {
- error = VOP_FSYNC(tdvp, MNT_WAIT, td);
- } while (error == ERELOOKUP);
+ UFS_INODE_SET_FLAG(tdp, IN_ENDOFF);
+ SET_I_ENDOFF(tdp, endoff);
}
- vput(tdvp);
+ VOP_VPUT_PAIR(tdvp, &tvp, true);
return (error);
bad:
More information about the dev-commits-src-all
mailing list