Subject: CVS commit: src/sys/ufs/lfs
To: None <source-changes@NetBSD.org>
From: Konrad Schroder <perseant@netbsd.org>
List: source-changes
Date: 09/01/2006 19:41:28
Module Name:	src
Committed By:	perseant
Date:		Fri Sep  1 19:41:28 UTC 2006

Modified Files:
	src/sys/ufs/lfs: lfs.h lfs_alloc.c lfs_extern.h lfs_rfw.c lfs_segment.c
	    lfs_subr.c lfs_syscalls.c lfs_vfsops.c lfs_vnops.c

Log Message:
Changes to help the roll-forward agent, to wit:

* Mark being-deleted files in the Ifile so we can finish deleting them
  at fs mount time.
* Flag the Ifile with "cleaner must clean" when writers are waiting for
  the cleaner, rather than relying solely on the cleaner's estimation of
  whether it should clean or not.
* Note partial segments written by a user agent (in particular,
  fsck_lfs) so that repeated rolls forward don't interfere with one
  another.
* Add a new fcntl, LFCNPASS, that allows the log to wrap exactly once,
  for better testing of the validity of checkpoints.
* Keep track of the on-disk nlink count when cleaning, so that we don't
  partially complete directory operations while cleaning.
* Ensure that every single Ifile inode write represents a consistent
  view of the filesystem.  In particular, the accounting for the segment
  we are writing the inode into must be correct, and the accounting for
  the segment that inode used to reside in must be correct.  Rather than
  just rewriting the inode if we wrote it wrong, rewrite the necessary
  ifile blocks before writing the inode so we never write it wrong.
* Don't unmark any VDIROP vnodes if we haven't written them to disk,
  avoiding yet another problem with the "wait for the cleaner" error
  return from lfs_putpages().

Also, move the last callback to an aiodone call, so we no longer do any
memory management from interrupt context.


To generate a diff of this commit:
cvs rdiff -r1.113 -r1.114 src/sys/ufs/lfs/lfs.h
cvs rdiff -r1.96 -r1.97 src/sys/ufs/lfs/lfs_alloc.c
cvs rdiff -r1.86 -r1.87 src/sys/ufs/lfs/lfs_extern.h
cvs rdiff -r1.2 -r1.3 src/sys/ufs/lfs/lfs_rfw.c
cvs rdiff -r1.188 -r1.189 src/sys/ufs/lfs/lfs_segment.c
cvs rdiff -r1.60 -r1.61 src/sys/ufs/lfs/lfs_subr.c
cvs rdiff -r1.115 -r1.116 src/sys/ufs/lfs/lfs_syscalls.c
cvs rdiff -r1.218 -r1.219 src/sys/ufs/lfs/lfs_vfsops.c
cvs rdiff -r1.187 -r1.188 src/sys/ufs/lfs/lfs_vnops.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.