aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/md/dm.c
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2013-09-12 18:06:11 -0400
committerMike Snitzer <snitzer@redhat.com>2013-09-23 10:42:23 -0400
commit6cfa58573f9b4a543005baa002e137820504c7af (patch)
treecb4f5247d973a6133aae4191a30c50ad01d33a7b /drivers/md/dm.c
parentb60ab990ccdf34b0159bf5ff52f4acee7c940d78 (diff)
dm: lower bio-based mempool reservation
Bio-based device mapper processing doesn't need larger mempools (like request-based DM does), so lower the number of reserved entries for bio-based operation. 16 was already used for bio-based DM's bioset but mistakenly wasn't used for it's _io_cache. Formalize difference between bio-based and request-based defaults by introducing RESERVED_BIO_BASED_IOS and RESERVED_REQUEST_BASED_IOS. (based on older code from Mikulas Patocka) Signed-off-by: Mike Snitzer <snitzer@redhat.com> Signed-off-by: Frank Mayhar <fmayhar@google.com> Acked-by: Mikulas Patocka <mpatocka@redhat.com>
Diffstat (limited to 'drivers/md/dm.c')
-rw-r--r--drivers/md/dm.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/md/dm.c b/drivers/md/dm.c
index 7b0ccdc5d65c..f2e5a50ee84e 100644
--- a/drivers/md/dm.c
+++ b/drivers/md/dm.c
@@ -211,7 +211,8 @@ struct dm_md_mempools {
211 struct bio_set *bs; 211 struct bio_set *bs;
212}; 212};
213 213
214#define MIN_IOS 256 214#define RESERVED_BIO_BASED_IOS 16
215#define RESERVED_REQUEST_BASED_IOS 256
215static struct kmem_cache *_io_cache; 216static struct kmem_cache *_io_cache;
216static struct kmem_cache *_rq_tio_cache; 217static struct kmem_cache *_rq_tio_cache;
217 218
@@ -2873,18 +2874,18 @@ struct dm_md_mempools *dm_alloc_md_mempools(unsigned type, unsigned integrity, u
2873 2874
2874 if (type == DM_TYPE_BIO_BASED) { 2875 if (type == DM_TYPE_BIO_BASED) {
2875 cachep = _io_cache; 2876 cachep = _io_cache;
2876 pool_size = 16; 2877 pool_size = RESERVED_BIO_BASED_IOS;
2877 front_pad = roundup(per_bio_data_size, __alignof__(struct dm_target_io)) + offsetof(struct dm_target_io, clone); 2878 front_pad = roundup(per_bio_data_size, __alignof__(struct dm_target_io)) + offsetof(struct dm_target_io, clone);
2878 } else if (type == DM_TYPE_REQUEST_BASED) { 2879 } else if (type == DM_TYPE_REQUEST_BASED) {
2879 cachep = _rq_tio_cache; 2880 cachep = _rq_tio_cache;
2880 pool_size = MIN_IOS; 2881 pool_size = RESERVED_REQUEST_BASED_IOS;
2881 front_pad = offsetof(struct dm_rq_clone_bio_info, clone); 2882 front_pad = offsetof(struct dm_rq_clone_bio_info, clone);
2882 /* per_bio_data_size is not used. See __bind_mempools(). */ 2883 /* per_bio_data_size is not used. See __bind_mempools(). */
2883 WARN_ON(per_bio_data_size != 0); 2884 WARN_ON(per_bio_data_size != 0);
2884 } else 2885 } else
2885 goto out; 2886 goto out;
2886 2887
2887 pools->io_pool = mempool_create_slab_pool(MIN_IOS, cachep); 2888 pools->io_pool = mempool_create_slab_pool(pool_size, cachep);
2888 if (!pools->io_pool) 2889 if (!pools->io_pool)
2889 goto out; 2890 goto out;
2890 2891