diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2013-09-27 12:49:33 +0100 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2013-09-27 12:49:33 +0100 |
commit | af5c269799feaef110e59ce55b497cdd08712b0c (patch) | |
tree | c5aad271b31ba67c5eef857b927ed2dc45186176 /fs/gfs2/bmap.c | |
parent | 5ca1db41ecdeb0358b968265fadb755213558a85 (diff) | |
download | blackbird-obmc-linux-af5c269799feaef110e59ce55b497cdd08712b0c.tar.gz blackbird-obmc-linux-af5c269799feaef110e59ce55b497cdd08712b0c.zip |
GFS2: Clean up reservation removal
The reservation for an inode should be cleared when it is truncated so
that we can start again at a different offset for future allocations.
We could try and do better than that, by resetting the search based on
where the truncation started from, but this is only a first step.
In addition, there are three callers of gfs2_rs_delete() but only one
of those should really be testing the value of i_writecount. While
we get away with that in the other cases currently, I think it would
be better if we made that test specific to the one case which
requires it.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/bmap.c')
-rw-r--r-- | fs/gfs2/bmap.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/fs/gfs2/bmap.c b/fs/gfs2/bmap.c index 62a65fc448dc..21ad0f11cad4 100644 --- a/fs/gfs2/bmap.c +++ b/fs/gfs2/bmap.c @@ -1279,6 +1279,7 @@ do_grow_qunlock: int gfs2_setattr_size(struct inode *inode, u64 newsize) { + struct gfs2_inode *ip = GFS2_I(inode); int ret; u64 oldsize; @@ -1294,7 +1295,7 @@ int gfs2_setattr_size(struct inode *inode, u64 newsize) inode_dio_wait(inode); - ret = gfs2_rs_alloc(GFS2_I(inode)); + ret = gfs2_rs_alloc(ip); if (ret) goto out; @@ -1304,6 +1305,7 @@ int gfs2_setattr_size(struct inode *inode, u64 newsize) goto out; } + gfs2_rs_deltree(ip->i_res); ret = do_shrink(inode, oldsize, newsize); out: put_write_access(inode); |