Commit 8fbf26ad authored by Kiyoshi Ueda's avatar Kiyoshi Ueda Committed by Alasdair G Kergon

dm request: add caches

This patch prepares some kmem_caches for request-based dm.
Signed-off-by: default avatarKiyoshi Ueda <k-ueda@ct.jp.nec.com>
Signed-off-by: default avatarJun'ichi Nomura <j-nomura@ce.jp.nec.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent 23d39f63
...@@ -32,6 +32,7 @@ static unsigned int _major = 0; ...@@ -32,6 +32,7 @@ static unsigned int _major = 0;
static DEFINE_SPINLOCK(_minor_lock); static DEFINE_SPINLOCK(_minor_lock);
/* /*
* For bio-based dm.
* One of these is allocated per bio. * One of these is allocated per bio.
*/ */
struct dm_io { struct dm_io {
...@@ -43,6 +44,7 @@ struct dm_io { ...@@ -43,6 +44,7 @@ struct dm_io {
}; };
/* /*
* For bio-based dm.
* One of these is allocated per target within a bio. Hopefully * One of these is allocated per target within a bio. Hopefully
* this will be simplified out one day. * this will be simplified out one day.
*/ */
...@@ -54,6 +56,27 @@ struct dm_target_io { ...@@ -54,6 +56,27 @@ struct dm_target_io {
DEFINE_TRACE(block_bio_complete); DEFINE_TRACE(block_bio_complete);
/*
* For request-based dm.
* One of these is allocated per request.
*/
struct dm_rq_target_io {
struct mapped_device *md;
struct dm_target *ti;
struct request *orig, clone;
int error;
union map_info info;
};
/*
* For request-based dm.
* One of these is allocated per bio.
*/
struct dm_rq_clone_bio_info {
struct bio *orig;
struct request *rq;
};
union map_info *dm_get_mapinfo(struct bio *bio) union map_info *dm_get_mapinfo(struct bio *bio)
{ {
if (bio && bio->bi_private) if (bio && bio->bi_private)
...@@ -149,6 +172,8 @@ struct mapped_device { ...@@ -149,6 +172,8 @@ struct mapped_device {
#define MIN_IOS 256 #define MIN_IOS 256
static struct kmem_cache *_io_cache; static struct kmem_cache *_io_cache;
static struct kmem_cache *_tio_cache; static struct kmem_cache *_tio_cache;
static struct kmem_cache *_rq_tio_cache;
static struct kmem_cache *_rq_bio_info_cache;
static int __init local_init(void) static int __init local_init(void)
{ {
...@@ -164,9 +189,17 @@ static int __init local_init(void) ...@@ -164,9 +189,17 @@ static int __init local_init(void)
if (!_tio_cache) if (!_tio_cache)
goto out_free_io_cache; goto out_free_io_cache;
_rq_tio_cache = KMEM_CACHE(dm_rq_target_io, 0);
if (!_rq_tio_cache)
goto out_free_tio_cache;
_rq_bio_info_cache = KMEM_CACHE(dm_rq_clone_bio_info, 0);
if (!_rq_bio_info_cache)
goto out_free_rq_tio_cache;
r = dm_uevent_init(); r = dm_uevent_init();
if (r) if (r)
goto out_free_tio_cache; goto out_free_rq_bio_info_cache;
_major = major; _major = major;
r = register_blkdev(_major, _name); r = register_blkdev(_major, _name);
...@@ -180,6 +213,10 @@ static int __init local_init(void) ...@@ -180,6 +213,10 @@ static int __init local_init(void)
out_uevent_exit: out_uevent_exit:
dm_uevent_exit(); dm_uevent_exit();
out_free_rq_bio_info_cache:
kmem_cache_destroy(_rq_bio_info_cache);
out_free_rq_tio_cache:
kmem_cache_destroy(_rq_tio_cache);
out_free_tio_cache: out_free_tio_cache:
kmem_cache_destroy(_tio_cache); kmem_cache_destroy(_tio_cache);
out_free_io_cache: out_free_io_cache:
...@@ -190,6 +227,8 @@ static int __init local_init(void) ...@@ -190,6 +227,8 @@ static int __init local_init(void)
static void local_exit(void) static void local_exit(void)
{ {
kmem_cache_destroy(_rq_bio_info_cache);
kmem_cache_destroy(_rq_tio_cache);
kmem_cache_destroy(_tio_cache); kmem_cache_destroy(_tio_cache);
kmem_cache_destroy(_io_cache); kmem_cache_destroy(_io_cache);
unregister_blkdev(_major, _name); unregister_blkdev(_major, _name);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment