diff options
author | Bob Peterson <rpeterso@redhat.com> | 2013-05-28 10:04:44 -0400 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2013-06-03 16:38:58 +0100 |
commit | 2b3dcf35810ff02ad0e785527a25c1b13bf82b19 (patch) | |
tree | 0ab2a2f709290e2eb4d74d385a7d832929e3768c /fs/gfs2/rgrp.c | |
parent | 4a586812055dbd2588b0836ab758f6b9670c3949 (diff) | |
download | talos-op-linux-2b3dcf35810ff02ad0e785527a25c1b13bf82b19.tar.gz talos-op-linux-2b3dcf35810ff02ad0e785527a25c1b13bf82b19.zip |
GFS2: Increase i_writecount during gfs2_setattr_size
This patch calls get_write_access in a few functions. This
merely increases inode->i_writecount for the duration of the function.
That will ensure that any file closes won't delete the inode's
multi-block reservation while the function is running.
Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/rgrp.c')
-rw-r--r-- | fs/gfs2/rgrp.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/gfs2/rgrp.c b/fs/gfs2/rgrp.c index 5232525934ae..9809156e3d04 100644 --- a/fs/gfs2/rgrp.c +++ b/fs/gfs2/rgrp.c @@ -638,8 +638,10 @@ void gfs2_rs_deltree(struct gfs2_blkreserv *rs) */ void gfs2_rs_delete(struct gfs2_inode *ip) { + struct inode *inode = &ip->i_inode; + down_write(&ip->i_rw_mutex); - if (ip->i_res) { + if (ip->i_res && atomic_read(&inode->i_writecount) <= 1) { gfs2_rs_deltree(ip->i_res); BUG_ON(ip->i_res->rs_free); kmem_cache_free(gfs2_rsrv_cachep, ip->i_res); |