]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
GFS2: Only increase rs_sizehint
authorBob Peterson <rpeterso@redhat.com>
Wed, 29 Oct 2014 13:02:29 +0000 (08:02 -0500)
committerSteven Whitehouse <swhiteho@redhat.com>
Mon, 3 Nov 2014 19:25:41 +0000 (19:25 +0000)
If an application does a sequence of (1) big write, (2) little write
we don't necessarily want to reset the size hint based on the smaller
size. The fact that they did any big writes implies they may do more,
and therefore we should try to allocate bigger block reservations, even
if the last few were small writes. Therefore this patch changes function
gfs2_size_hint so that the size hint can only grow; it cannot shrink.
This is especially important where there are multiple writers.

Signed-off-by: Bob Peterson <rpeterso@redhat.com>
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
fs/gfs2/file.c

index 80dd44dca028f97ec343e3c87727be806174094b..5ebe568317946d326493d3247e93337780b39152 100644 (file)
@@ -337,7 +337,8 @@ static void gfs2_size_hint(struct file *filep, loff_t offset, size_t size)
        size_t blks = (size + sdp->sd_sb.sb_bsize - 1) >> sdp->sd_sb.sb_bsize_shift;
        int hint = min_t(size_t, INT_MAX, blks);
 
-       atomic_set(&ip->i_res->rs_sizehint, hint);
+       if (hint > atomic_read(&ip->i_res->rs_sizehint))
+               atomic_set(&ip->i_res->rs_sizehint, hint);
 }
 
 /**