[PATCH 2/7] xfs: Use delayed write for inodes rather than async

Christoph Hellwig hch at infradead.org
Tue Jan 26 10:10:45 CST 2010


> > Also in this context
> > the requeue label name doesn't fit too well, even if it's the same
> > action as the requeue.
> 
> I'm open to suggestions for a better name ;)

What do you think about this version?

Index: xfs/fs/xfs/linux-2.6/xfs_sync.c
===================================================================
--- xfs.orig/fs/xfs/linux-2.6/xfs_sync.c	2010-01-26 17:01:49.610012226 +0100
+++ xfs/fs/xfs/linux-2.6/xfs_sync.c	2010-01-26 17:06:50.533006103 +0100
@@ -785,7 +785,7 @@ xfs_reclaim_inode(
 	xfs_ilock(ip, XFS_ILOCK_EXCL);
 	if (!xfs_iflock_nowait(ip)) {
 		if (!(sync_mode & SYNC_WAIT))
-			goto requeue_no_flock;
+			goto out;
 		xfs_iflock(ip);
 	}
 
@@ -796,8 +796,10 @@ xfs_reclaim_inode(
 		goto reclaim;
 	}
 	if (xfs_ipincount(ip)) {
-		if (!(sync_mode & SYNC_WAIT))
-			goto requeue;
+		if (!(sync_mode & SYNC_WAIT)) {
+			xfs_ifunlock(ip);
+			goto out;
+		}
 		xfs_iunpin_wait(ip);
 	}
 	if (xfs_iflags_test(ip, XFS_ISTALE))
@@ -807,19 +809,18 @@ xfs_reclaim_inode(
 
 	/* Now we have an inode that needs flushing */
 	error = xfs_iflush(ip, sync_mode);
-	if (!(sync_mode & SYNC_WAIT))
-		goto requeue_no_flock;
-	xfs_iflock(ip);
-
-reclaim:
-	xfs_ifunlock(ip);
-	xfs_iunlock(ip, XFS_ILOCK_EXCL);
-	xfs_ireclaim(ip);
-	return error;
+	if (sync_mode & SYNC_WAIT) {
+		xfs_iflock(ip);
+		goto reclaim;
+	}
 
-requeue:
-	xfs_ifunlock(ip);
-requeue_no_flock:
+	/*
+	 * When we have to flush an inode but don't have SYNC_WAIT set, we
+	 * flush the inode out with using a delwri buffer and wait for
+	 * the next call into the reclaim to find it in a clean state
+	 * instead of doing it now.
+	 */
+out:
 	xfs_iflags_clear(ip, XFS_IRECLAIM);
 	xfs_iunlock(ip, XFS_ILOCK_EXCL);
 	/*
@@ -830,6 +831,12 @@ requeue_no_flock:
 	 * attempt to reclaim the inode again.
 	 */
 	return 0;
+
+reclaim:
+	xfs_ifunlock(ip);
+	xfs_iunlock(ip, XFS_ILOCK_EXCL);
+	xfs_ireclaim(ip);
+	return error;
 }
 
 int




More information about the xfs mailing list