diff options
author | Steven Whitehouse <swhiteho@redhat.com> | 2012-03-08 13:10:23 +0100 |
---|---|---|
committer | Steven Whitehouse <swhiteho@redhat.com> | 2012-03-08 13:10:23 +0100 |
commit | 75ca61c101601a7071d93571920be9697b3fda9b (patch) | |
tree | aaf42da2b6086a58d84efd4ef39a312f03cfbefb /fs/gfs2/util.c | |
parent | GFS2: Flush pending glock work when evicting an inode (diff) | |
download | linux-75ca61c101601a7071d93571920be9697b3fda9b.tar.xz linux-75ca61c101601a7071d93571920be9697b3fda9b.zip |
GFS2: Remove a __GFP_NOFAIL allocation
In order to ensure that we've got enough buffer heads for flushing
the journal, the orignal code used __GFP_NOFAIL when performing
this allocation. Here we dispense with that in favour of using a
mempool. This should improve efficiency in low memory conditions
since flushing the journal is a good way to get memory back, we
don't want to be spinning, waiting on memory allocations. The
buffers which are allocated via this mempool are fairly short lived,
so that we'll recycle them pretty quickly.
Although there are other memory allocations which occur during the
journal flush process, this is the one which can potentially require
the most memory, so the most important one to fix.
The amount of memory reserved is a fixed amount, and we should not need
to scale it when there are a greater number of filesystems in use.
Signed-off-by: Steven Whitehouse <swhiteho@redhat.com>
Diffstat (limited to 'fs/gfs2/util.c')
-rw-r--r-- | fs/gfs2/util.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/fs/gfs2/util.c b/fs/gfs2/util.c index 53511291fe36..9e7765e8e7b0 100644 --- a/fs/gfs2/util.c +++ b/fs/gfs2/util.c @@ -25,6 +25,7 @@ struct kmem_cache *gfs2_inode_cachep __read_mostly; struct kmem_cache *gfs2_bufdata_cachep __read_mostly; struct kmem_cache *gfs2_rgrpd_cachep __read_mostly; struct kmem_cache *gfs2_quotad_cachep __read_mostly; +mempool_t *gfs2_bh_pool __read_mostly; void gfs2_assert_i(struct gfs2_sbd *sdp) { |