[SSI] openssi/kernel/cluster/ssi/cfs write.c,1.43,1.44

Roger Tsang <[email protected]> Tue, 23 Mar 2010 01:39:17 +0000
Newsgroups gmane.linux.cluster.ssic.cvs
Message-ID <[email protected]>
Update of /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/cfs
In directory sfp-cvsdas-3.v30.ch3.sourceforge.com:/tmp/cvs-serv1405/kernel/cluster/ssi/cfs

Modified Files:
      Tag: OPENSSI-FC
	write.c 
Log Message:
CFS (#ifdef CFS_CHARD_SYNC_FIX):
- Optimize away re-flush if there are no unstable pages in range in cfs_writepages().
- Fix did not decrement nr_unstable in cfs_prepare_reflush() when requests marked for commit are converted to dirty requests.


Index: write.c
===================================================================
RCS file: /cvsroot/ssic-linux/openssi/kernel/cluster/ssi/cfs/write.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -d -r1.43 -r1.44
--- write.c	21 Mar 2010 05:26:56 -0000	1.43
+++ write.c	23 Mar 2010 01:39:14 -0000	1.44
@@ -121,7 +121,7 @@
 static int cfs_wait_on_write_congestion(struct address_space *, int);
 static int cfs_wait_on_requests(struct inode *, unsigned long, unsigned int);
 #ifdef CFS_CHARD_SYNC_FIX
-static void cfs_prepare_reflush(struct inode *, unsigned long, unsigned int,
+static int cfs_prepare_reflush(struct inode *, unsigned long, unsigned int,
 				struct writeback_control *);
 #endif
 
@@ -540,10 +540,9 @@
 #ifdef CFS_COMMIT_FILE_RANGE
 #ifdef CFS_CHARD_SYNC_FIX
 	/* If server failed over, flush unstable data to new server. */
-	if (node != itocmi(inode)->mi_server) {
-		cfs_prepare_reflush(inode, index, npages, wbc);
+	if (node != itocmi(inode)->mi_server &&
+	    cfs_prepare_reflush(inode, index, npages, wbc))
 		goto flush_again;
-	}
 #endif
 	err = cfs_commit_inode(inode, index, npages, wb_priority(wbc));
 #else
@@ -2146,7 +2145,7 @@
 /*
  * Move requests marked for commit to dirty queue.
  */
-static void
+static int
 cfs_prepare_reflush(
 	struct inode *inode,
 	unsigned long idx_start,
@@ -2161,9 +2160,11 @@
 	spin_lock(&cp->req_lock);
 	res = cfs_scan_commit(inode, &head, idx_start, npages);
 	spin_unlock(&cp->req_lock);
+	if (!res)
+		return 0;
 
-	if (wbc)
-		wbc->nr_to_write += res;
+	/* Undo nr_unstable in cfs_mark_request_commit() */
+	sub_page_state(nr_unstable,res);
 
 	while (!list_empty(&head)) {
 		req = cfs_list_entry((&head)->next);
@@ -2175,6 +2176,11 @@
 		cfs_unlock_request(req);
 #endif
 	}
+
+	if (wbc)
+		wbc->nr_to_write += res;
+
+	return res;
 }
 #endif /* CFS_CHARD_SYNC_FIX */
 
@@ -2232,7 +2238,7 @@
 			error = cfs_wait_on_requests(inode, idx_start, npages);
 #ifdef CFS_CHARD_SYNC_FIX
 		/* If server failed over, flush unstable data to new server. */
-		if (node != itocmi(inode)->mi_server) {
+		if (error >= 0 && node != itocmi(inode)->mi_server) {
 			node = itocmi(inode)->mi_server;
 			cfs_prepare_reflush(inode, idx_start, npages, NULL);
 		}


------------------------------------------------------------------------------
Download Intel&#174; Parallel Studio Eval
Try the new software tools for yourself. Speed compiling, find bugs
proactively, and fine-tune applications for parallel performance.
See why Intel Parallel Studio got high marks during beta.
http://p.sf.net/sfu/intel-sw-dev