[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

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



CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	STABLE
Changes by:	wcheng sourceware org	2006-11-17 20:39:24

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

Log message:
	Bugzilla 216209: 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 while doing RHEL5 testing.
	
	Issue affects aio io size > 4MB.

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

--- cluster/gfs-kernel/src/gfs/ops_file.c	2006/06/29 16:50:41	1.16.6.2.2.5
+++ cluster/gfs-kernel/src/gfs/ops_file.c	2006/11/17 20:39:24	1.16.6.2.2.6
@@ -646,6 +646,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);
@@ -675,6 +681,7 @@
 		gfs_glock_dq_uninit(&t_gh);
 	}
 
+      out_iocb_write:
 	error = 0;
 
       out_gunlock:


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]