block: add bioset_init_from_src() helper
authorJens Axboe <axboe@kernel.dk>
Thu, 7 Jun 2018 20:42:05 +0000 (14:42 -0600)
committerJens Axboe <axboe@kernel.dk>
Fri, 8 Jun 2018 13:03:35 +0000 (07:03 -0600)
Add a helper that allows a caller to initialize a new bio_set,
using the settings from an existing bio_set.

Reported-by: Venkat R.B <vrbagal1@linux.vnet.ibm.com>
Tested-by: Venkat R.B <vrbagal1@linux.vnet.ibm.com>
Tested-by: Li Wang <liwang@redhat.com>
Reviewed-by: Mike Snitzer <snitzer@redhat.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
block/bio.c
include/linux/bio.h

index 595663e0281a7134fccfe0f03f3ab2c2797daa8e..bf516d873ce9e5f37bae57849e18b9ca14672ec9 100644 (file)
@@ -1967,6 +1967,24 @@ bad:
 }
 EXPORT_SYMBOL(bioset_init);
 
+/*
+ * Initialize and setup a new bio_set, based on the settings from
+ * another bio_set.
+ */
+int bioset_init_from_src(struct bio_set *bs, struct bio_set *src)
+{
+       int flags;
+
+       flags = 0;
+       if (src->bvec_pool.min_nr)
+               flags |= BIOSET_NEED_BVECS;
+       if (src->rescue_workqueue)
+               flags |= BIOSET_NEED_RESCUER;
+
+       return bioset_init(bs, src->bio_pool.min_nr, src->front_pad, flags);
+}
+EXPORT_SYMBOL(bioset_init_from_src);
+
 #ifdef CONFIG_BLK_CGROUP
 
 /**
index 810a8bee8f859f48154aeefd3c3d1ca9efba2848..84abd1706dcb86cbd56014f3a297615cb3bffdbb 100644 (file)
@@ -417,6 +417,7 @@ enum {
 extern int bioset_init(struct bio_set *, unsigned int, unsigned int, int flags);
 extern void bioset_exit(struct bio_set *);
 extern int biovec_init_pool(mempool_t *pool, int pool_entries);
+extern int bioset_init_from_src(struct bio_set *bs, struct bio_set *src);
 
 extern struct bio *bio_alloc_bioset(gfp_t, unsigned int, struct bio_set *);
 extern void bio_put(struct bio *);