svn commit: r306172 - stable/11/sys/ufs/ufs
Konstantin Belousov
kib at FreeBSD.org
Thu Sep 22 09:14:05 UTC 2016
Author: kib
Date: Thu Sep 22 09:14:04 2016
New Revision: 306172
URL: https://svnweb.freebsd.org/changeset/base/306172
Log:
MFC r305601:
On rename, do not perform truncation of dirhash if the vnode truncation failed.
Modified:
stable/11/sys/ufs/ufs/ufs_vnops.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- stable/11/sys/ufs/ufs/ufs_vnops.c Thu Sep 22 09:10:30 2016 (r306171)
+++ stable/11/sys/ufs/ufs/ufs_vnops.c Thu Sep 22 09:14:04 2016 (r306172)
@@ -1529,11 +1529,21 @@ unlockout:
* are no longer needed.
*/
if (error == 0 && endoff != 0) {
+ error = UFS_TRUNCATE(tdvp, endoff, IO_NORMAL | IO_SYNC,
+ tcnp->cn_cred);
+ if (error != 0)
+ vn_printf(tdvp, "ufs_rename: failed to truncate "
+ "err %d", error);
#ifdef UFS_DIRHASH
- if (tdp->i_dirhash != NULL)
+ else if (tdp->i_dirhash != NULL)
ufsdirhash_dirtrunc(tdp, endoff);
#endif
- UFS_TRUNCATE(tdvp, endoff, IO_NORMAL | IO_SYNC, tcnp->cn_cred);
+ /*
+ * 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)
error = VOP_FSYNC(tdvp, MNT_WAIT, td);
More information about the svn-src-stable-11
mailing list