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