Module Name:    src
Committed By:   perseant
Date:           Sun Jan 15 04:42:04 UTC 2012

Modified Files:
        src/sys/ufs/lfs: lfs_syscalls.c

Log Message:
Corrections to part of rev 1.140. lfs_bmapv, not lfs_markv, marks vnodes
LFSI_BMAP and recycles them.  This greatly reduces the writing leakage
occurring when the filesystem has no space available for non-cleaning
writes.


To generate a diff of this commit:
cvs rdiff -u -r1.140 -r1.141 src/sys/ufs/lfs/lfs_syscalls.c

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

Modified files:

Index: src/sys/ufs/lfs/lfs_syscalls.c
diff -u src/sys/ufs/lfs/lfs_syscalls.c:1.140 src/sys/ufs/lfs/lfs_syscalls.c:1.141
--- src/sys/ufs/lfs/lfs_syscalls.c:1.140	Mon Jan  2 22:10:45 2012
+++ src/sys/ufs/lfs/lfs_syscalls.c	Sun Jan 15 04:42:04 2012
@@ -1,4 +1,4 @@
-/*	$NetBSD: lfs_syscalls.c,v 1.140 2012/01/02 22:10:45 perseant Exp $	*/
+/*	$NetBSD: lfs_syscalls.c,v 1.141 2012/01/15 04:42:04 perseant Exp $	*/
 
 /*-
  * Copyright (c) 1999, 2000, 2001, 2002, 2003, 2007, 2007, 2008
@@ -61,7 +61,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.140 2012/01/02 22:10:45 perseant Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lfs_syscalls.c,v 1.141 2012/01/15 04:42:04 perseant Exp $");
 
 #ifndef LFS
 # define LFS		/* for prototypes in syscallargs.h */
@@ -291,17 +291,6 @@ lfs_markv(struct proc *p, fsid_t *fsidp,
 			 */
 			if (v_daddr != LFS_UNUSED_DADDR) {
 				lfs_vunref(vp);
-				/*
-				 * If the vnode has LFSI_BMAP, it was
-				 * not found in the cache.  Dump it so
-				 * we can reuse the vnode.
-				 * XXX If we knew what segment we were
-				 * XXX supposed to be looking for, we
-				 * XXX would be able to be more selective
-				 * XXX here.
-				 */
-				if (ip->i_lfs_iflags & LFSI_BMAP)
-					vrecycle(vp, NULL, NULL);
 				numrefed--;
 			}
 
@@ -719,6 +708,8 @@ lfs_bmapv(struct proc *p, fsid_t *fsidp,
 			 */
 			if (v_daddr != LFS_UNUSED_DADDR) {
 				lfs_vunref(vp);
+				if (VTOI(vp)->i_lfs_iflags & LFSI_BMAP)
+					vrecycle(vp, NULL, NULL);
 				numrefed--;
 			}
 
@@ -1139,6 +1130,11 @@ lfs_fastvget(struct mount *mp, ino_t ino
 	ufs_ihashins(ip);
 	mutex_exit(&ufs_hashlock);
 
+#ifdef notyet
+	/* Not found in the cache => this vnode was loaded only for cleaning. */
+	ip->i_lfs_iflags |= LFSI_BMAP;
+#endif
+
 	/*
 	 * XXX
 	 * This may not need to be here, logically it should go down with

Reply via email to