[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