FreeBSD commit message:
authorMatthew Dillon <dillon@dragonflybsd.org>
Fri, 14 Oct 2005 21:04:13 +0000 (21:04 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Fri, 14 Oct 2005 21:04:13 +0000 (21:04 +0000)
commita0ff2e99c8198e01a3a66ae3eaef2bd67f7d2cd4
tree9067353b26b6d8c87febe296870d134ab213e47a
parent28e5ef005c2b878467f9c0d6d72e74092eaa5a05
FreeBSD commit message:
 After a rmdir()ed directory has been truncated, force an update of
 the directory's inode after queuing the dirrem that will decrement
 the parent directory's link count.  This will force the update of
 the parent directory's actual link to actually be scheduled.  Without
 this change the parent directory's actual link count would not be
 updated until ufs_inactive() cleared the inode of the newly removed
 directory, which might be deferred indefinitely.  ufs_inactive()
 will not be called as long as any process holds a reference to the
 removed directory, and ufs_inactive() will not clear the inode if
 the link count is non-zero, which could be the result of an earlier
 system crash.

 This change has the fortunate side effect of more quickly cleaning
 up the large number dirrem structures that linger for an extended
 time after the removal of a large directory tree.  It also fixes a
 potential problem with the shutdown of the syncer thread timing out
 if the system is rebooted immediately after removing a large directory
 tree.

Taken-from: FreeBSD/1.185
Submitted-by: tegge
sys/vfs/ufs/ffs_softdep.c