svn commit: r255104 - stable/9/sys/ufs/ufs
Kirk McKusick
mckusick at FreeBSD.org
Sat Aug 31 17:38:49 UTC 2013
Author: mckusick
Date: Sat Aug 31 17:38:49 2013
New Revision: 255104
URL: http://svnweb.freebsd.org/changeset/base/255104
Log:
MFC of 253998:
This bug fix is in a code path in rename taken when there is a
collision between a rename and an open system call for the same
target file. Here, rename releases its vnode references, waits for
the open to finish, and then restarts by reacquiring its needed
vnode locks. In this case, rename was unlocking but failing to
release its reference to one of its held vnodes. The effect was
that even after all the actual references to the vnode had gone,
the vnode still showed active references. For files that had been
removed, their space was not reclaimed until the filesystem was
forcibly unmounted.
This bug manifested itself in the Postgres server which would
leak/lose hundreds of files per day amounting to many gigabytes of
disk space. This bug required shutting down Postgres, forcibly
unmounting its filesystem, remounting its filesystem and restarting
Postgres every few days to recover the lost space.
Reported by: Dan Thomas and Palle Girgensohn
Bug-fix by: kib
Tested by: Dan Thomas and Palle Girgensohn
Modified:
stable/9/sys/ufs/ufs/ufs_vnops.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/ufs/ufs/ufs_vnops.c
==============================================================================
--- stable/9/sys/ufs/ufs/ufs_vnops.c Sat Aug 31 17:33:25 2013 (r255103)
+++ stable/9/sys/ufs/ufs/ufs_vnops.c Sat Aug 31 17:38:49 2013 (r255104)
@@ -1271,7 +1271,7 @@ relock:
error = VFS_VGET(mp, ino, LK_EXCLUSIVE, &nvp);
if (error != 0)
goto releout;
- VOP_UNLOCK(nvp, 0);
+ vput(nvp);
atomic_add_int(&rename_restarts, 1);
goto relock;
}
More information about the svn-src-stable-9
mailing list