[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® 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