[Cluster-devel] cluster/gfs-kernel/src/gfs ops_file.c

wcheng at sourceware.org wcheng at sourceware.org
Sun Jun 17 02:56:43 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	wcheng at sourceware.org	2007-06-17 02:56:43

Modified files:
	gfs-kernel/src/gfs: ops_file.c 

Log message:
	bugzilla 244134:
	
	Backport gfs datasync patch from RHEL4 to RHEL5 - sampled performance data:
	
	Throughput (lock_nolock)
	--- before ----         --- after ---
	Min 238.14 KB/s         Min 1.00 MB/s
	Max 238.14 KB/s         Max 1.00 MB/s
	Avg 238.14 KB/s         Avg 1.00 MB/s
	Latency Latency (lock_nolock)
	--- before ---------    --- after ---------
	Min 3805 usec 3 msec    Min 821 usec 0 msec
	Max 6043 usec 6 msec    Max 5466 usec 5 msec
	Avg 4182 usec 4 msec    Avg 1050 usec 1 msec

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_file.c.diff?cvsroot=cluster&only_with_tag=RHEL5&r1=1.28.2.1&r2=1.28.2.2

--- cluster/gfs-kernel/src/gfs/ops_file.c	2006/11/17 19:48:59	1.28.2.1
+++ cluster/gfs-kernel/src/gfs/ops_file.c	2007/06/17 02:56:43	1.28.2.2
@@ -24,6 +24,7 @@
 #include <linux/blkdev.h>
 #include <linux/mm.h>
 #include <linux/aio.h>
+#include <linux/writeback.h>
 #include <asm/uaccess.h>
 
 #include "gfs_ioctl.h"
@@ -1514,6 +1515,7 @@
 {
 	struct gfs_inode *ip = get_v2ip(dentry->d_inode);
 	struct gfs_holder i_gh;
+	struct inode *inode = dentry->d_inode;
 	int error;
 
 	atomic_inc(&ip->i_sbd->sd_ops_file);
@@ -1524,8 +1526,15 @@
 
 	if (gfs_is_jdata(ip))
 		gfs_log_flush_glock(ip->i_gl);
-	else
-		i_gh.gh_flags |= GL_SYNC;
+	else {
+		if ((!datasync) || (inode->i_state & I_DIRTY_DATASYNC)) {
+			struct writeback_control wbc = {
+				.sync_mode = WB_SYNC_ALL,
+				.nr_to_write = 0,
+			};
+			error = sync_inode(inode, &wbc);
+		}
+	}
 
 	gfs_glock_dq_uninit(&i_gh);
 




More information about the Cluster-devel mailing list