cvs commit: src/sys/ufs/ffs ffs_softdep.c
Don Lewis
truckman at FreeBSD.org
Thu Sep 29 18:33:54 PDT 2005
On 29 Sep, Don Lewis wrote:
> truckman 2005-09-29 21:50:26 UTC
>
> FreeBSD src repository
>
> Modified files:
> sys/ufs/ffs ffs_softdep.c
> Log:
> 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.
>
> If a background fsck is run before the update of the parent directory's
> actual link count has been performed, or at least scheduled by
> putting the dirrem on the leaf directory's inodedep id_bufwait list,
> fsck will corrupt the file system by decrementing the parent
> directory's effective link count, which was previously correct
> because it already took the removal of the leaf directory into
> account, and setting the actual link count to the same value as the
> effective link count after the dangling, removed, leaf directory
> has been removed. This happens because fsck acts based on the
> actual link count, which will be too high when fsck creates the
> file system snapshot that it references.
>
> 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.
>
> Submitted by: tegge
> MFC after: 3 days
>
> Revision Changes Path
> 1.185 +2 -0 src/sys/ufs/ffs/ffs_softdep.c
This may fix the "panic: handle_written_inodeblock: live inodedep"
problem.
More information about the cvs-src
mailing list