From mboxrd@z Thu Jan 1 00:00:00 1970 From: wcheng@sourceware.org Date: 8 Jun 2007 16:12:39 -0000 Subject: [Cluster-devel] cluster/gfs-kernel/src/gfs ops_export.c ops_in ... Message-ID: <20070608161239.2461.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: 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