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

wcheng at sourceware.org wcheng at sourceware.org
Fri Nov 17 19:49:00 UTC 2006


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL5
Changes by:	wcheng at sourceware.org	2006-11-17 19:49:00

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

Log message:
	Bugzilla 214274: GFS has been splitting large writes into smaller atomic
	transactions. This would generate multiple aio completion calls (one
	for each transaction) that falsely notify application about data
	completion. Problem is reported by QA team as data corruption.

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&r2=1.28.2.1

--- cluster/gfs-kernel/src/gfs/ops_file.c	2006/10/27 16:22:17	1.28
+++ cluster/gfs-kernel/src/gfs/ops_file.c	2006/11/17 19:48:59	1.28.2.1
@@ -700,6 +700,12 @@
 	if (alloc_required) {
 		set_bit(GFF_DID_DIRECT_ALLOC, &fp->f_flags);
 
+		/* for asynchronous IO, the buffer can not be splitted */
+		if (iocb) {
+			count = do_write_direct_alloc(file, buf, size, offset, iocb);
+			goto out_iocb_write;
+		}
+
 		/* split large writes into smaller atomic transactions */
 		while (size) {
 			s = gfs_tune_get(sdp, gt_max_atomic_write);
@@ -737,6 +743,7 @@
 		gfs_glock_dq_uninit(&t_gh);
 	}
 
+out_iocb_write:
 	error = 0;
 
 out_gunlock:




More information about the Cluster-devel mailing list