From mboxrd@z Thu Jan 1 00:00:00 1970 From: wcheng@sourceware.org Date: 17 Jun 2007 02:56:43 -0000 Subject: [Cluster-devel] cluster/gfs-kernel/src/gfs ops_file.c Message-ID: <20070617025643.29308.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 #include #include +#include #include #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);