summaryrefslogtreecommitdiffstats
path: root/fs/gfs2
diff options
context:
space:
mode:
authorBob Peterson <rpeterso@redhat.com>2012-11-21 15:56:00 +0100
committerSteven Whitehouse <swhiteho@redhat.com>2012-11-21 15:49:21 +0100
commit1e2d9d44f3ceb7dac7cb14d2476d0a8128c8e169 (patch)
treec389ee4b6555c88e0851c85d18d55dae9dc3eb27 /fs/gfs2
parentGFS2: add error check while allocating new inodes (diff)
downloadlinux-1e2d9d44f3ceb7dac7cb14d2476d0a8128c8e169.tar.xz
linux-1e2d9d44f3ceb7dac7cb14d2476d0a8128c8e169.zip
GFS2: Set gl_object during inode create
This patch fixes a cluster coherency problem that occurs when one node creates a file, does several writes, then a different node tries to write to the same file. When the inode's glock is demoted, the inode wasn't synced to the media properly because the gl_object wasn't set. Later, the flush daemon noticed the uncommitted data and tried to flush it, only to discover the glock was no longer locked properly in exclusive mode. That caused an assert withdraw. Signed-off-by: Bob Peterson <rpeterso@redhat.com> Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2')
-rw-r--r--fs/gfs2/inode.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/inode.c b/fs/gfs2/inode.c
index 2405695febe9..2b6f5698ef18 100644
--- a/fs/gfs2/inode.c
+++ b/fs/gfs2/inode.c
@@ -702,6 +702,7 @@ static int gfs2_create_inode(struct inode *dir, struct dentry *dentry,
if (error)
goto fail_free_inode;
+ ip->i_gl->gl_object = ip;
error = gfs2_glock_nq_init(ip->i_gl, LM_ST_EXCLUSIVE, GL_SKIP, ghs + 1);
if (error)
goto fail_free_inode;