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

wcheng at sourceware.org wcheng at sourceware.org
Fri Jun 8 16:12:39 UTC 2007


CVSROOT:	/cvs/cluster
Module name:	cluster
Branch: 	RHEL45
Changes by:	wcheng at sourceware.org	2007-06-08 16:12:38

Modified files:
	gfs-kernel/src/gfs: ops_export.c ops_inode.c 

Log message:
	Bugzilla 243146 (clone of bug #242720 for RHEL 4.5 z-stream):
	
	There is a race between GFS lookup code and inode cache reclaim logic that
	would create a window to allow GFS to corrupt its (GFS) inode cache. The
	occurrence is rare and only happens when gfs_inode_destroy() is invoked
	(mostly under memory pressure such that VM starts to free its inode cache
	entries). Depending on who gets the freed memory, the result can't be specified.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_export.c.diff?cvsroot=cluster&only_with_tag=RHEL45&r1=1.3.2.4&r2=1.3.2.4.2.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/gfs-kernel/src/gfs/ops_inode.c.diff?cvsroot=cluster&only_with_tag=RHEL45&r1=1.6.2.6&r2=1.6.2.6.2.1

--- cluster/gfs-kernel/src/gfs/ops_export.c	2007/02/13 05:40:59	1.3.2.4
+++ cluster/gfs-kernel/src/gfs/ops_export.c	2007/06/08 16:12:37	1.3.2.4.2.1
@@ -364,11 +364,11 @@
 		goto fail;
 
  out:
-	gfs_glock_dq_uninit(&i_gh);
-
 	inode = gfs_iget(ip, CREATE);
 	gfs_inode_put(ip);
 
+	gfs_glock_dq_uninit(&i_gh);
+
 	if (!inode)
 		return ERR_PTR(-ENOMEM);
 
--- cluster/gfs-kernel/src/gfs/ops_inode.c	2007/02/14 23:15:44	1.6.2.6
+++ cluster/gfs-kernel/src/gfs/ops_inode.c	2007/06/08 16:12:38	1.6.2.6.2.1
@@ -324,12 +324,12 @@
 	if (i_gh.gh_gl) {
 		ip = gl2ip(i_gh.gh_gl);
 
-		gfs_glock_dq_uninit(&d_gh);
-		gfs_glock_dq_uninit(&i_gh);
-
 		inode = gfs_iget(ip, CREATE);
 		gfs_inode_put(ip);
 
+		gfs_glock_dq_uninit(&d_gh);
+		gfs_glock_dq_uninit(&i_gh);
+
 		if (!inode)
 			return ERR_PTR(-ENOMEM);
 	} else




More information about the Cluster-devel mailing list