From 55e4c24629d1a6acedd6d495e04ed21cdfa2de07 Mon Sep 17 00:00:00 2001 From: Steven Whitehouse Date: Tue, 8 Jan 2008 08:14:30 +0000 Subject: [PATCH] --- yaml --- r: 76058 b: refs/heads/master c: 9656b2c14c6ee0806c90a6be41dec71117fc8f50 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/fs/gfs2/ops_address.c | 13 +++++-------- trunk/fs/gfs2/ops_inode.c | 12 +++++++++++- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/[refs] b/[refs] index 9204963bb562..05f5f2b490ad 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0811a127cb83ad2e0355e5e3e30164d7ef0f2d65 +refs/heads/master: 9656b2c14c6ee0806c90a6be41dec71117fc8f50 diff --git a/trunk/fs/gfs2/ops_address.c b/trunk/fs/gfs2/ops_address.c index e16ad8104495..37406a379e7a 100644 --- a/trunk/fs/gfs2/ops_address.c +++ b/trunk/fs/gfs2/ops_address.c @@ -848,14 +848,11 @@ static int gfs2_write_end(struct file *file, struct address_space *mapping, ret = generic_write_end(file, mapping, pos, len, copied, page, fsdata); - if (likely(ret >= 0)) { - copied = ret; - if ((pos + copied) > inode->i_size) { - di = (struct gfs2_dinode *)dibh->b_data; - ip->i_di.di_size = inode->i_size; - di->di_size = cpu_to_be64(inode->i_size); - mark_inode_dirty(inode); - } + if (likely(ret >= 0) && (inode->i_size > ip->i_di.di_size)) { + di = (struct gfs2_dinode *)dibh->b_data; + ip->i_di.di_size = inode->i_size; + di->di_size = cpu_to_be64(inode->i_size); + mark_inode_dirty(inode); } if (inode == sdp->sd_rindex) diff --git a/trunk/fs/gfs2/ops_inode.c b/trunk/fs/gfs2/ops_inode.c index 291f0c7eaa3b..8386ab323e33 100644 --- a/trunk/fs/gfs2/ops_inode.c +++ b/trunk/fs/gfs2/ops_inode.c @@ -113,8 +113,18 @@ static struct dentry *gfs2_lookup(struct inode *dir, struct dentry *dentry, if (inode && IS_ERR(inode)) return ERR_PTR(PTR_ERR(inode)); - if (inode) + if (inode) { + struct gfs2_glock *gl = GFS2_I(inode)->i_gl; + struct gfs2_holder gh; + int error; + error = gfs2_glock_nq_init(gl, LM_ST_SHARED, LM_FLAG_ANY, &gh); + if (error) { + iput(inode); + return ERR_PTR(error); + } + gfs2_glock_dq_uninit(&gh); return d_splice_alias(inode, dentry); + } d_add(dentry, inode); return NULL;