Skip to content

Commit 742c8fd

Browse files
jthornbersnitm
authored andcommitted
dm bio prison v2: new interface for the bio prison
The deferred set is gone and all methods have _v2 appended to the end of their names to allow for continued use of the original bio prison in DM thin-provisioning. Signed-off-by: Joe Thornber <[email protected]> Signed-off-by: Mike Snitzer <[email protected]>
1 parent c1ae3cf commit 742c8fd

File tree

7 files changed

+568
-6
lines changed

7 files changed

+568
-6
lines changed

drivers/md/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dm-snapshot-y += dm-snap.o dm-exception-store.o dm-snap-transient.o \
1111
dm-mirror-y += dm-raid1.o
1212
dm-log-userspace-y \
1313
+= dm-log-userspace-base.o dm-log-userspace-transfer.o
14+
dm-bio-prison-y += dm-bio-prison-v1.o dm-bio-prison-v2.o
1415
dm-thin-pool-y += dm-thin.o dm-thin-metadata.o
1516
dm-cache-y += dm-cache-target.o dm-cache-metadata.o dm-cache-policy.o
1617
dm-cache-smq-y += dm-cache-policy-smq.o

drivers/md/dm-bio-prison.c renamed to drivers/md/dm-bio-prison-v1.c

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
*/
66

77
#include "dm.h"
8-
#include "dm-bio-prison.h"
8+
#include "dm-bio-prison-v1.h"
9+
#include "dm-bio-prison-v2.h"
910

1011
#include <linux/spinlock.h>
1112
#include <linux/mempool.h>
@@ -398,7 +399,7 @@ EXPORT_SYMBOL_GPL(dm_deferred_set_add_work);
398399

399400
/*----------------------------------------------------------------*/
400401

401-
static int __init dm_bio_prison_init(void)
402+
static int __init dm_bio_prison_init_v1(void)
402403
{
403404
_cell_cache = KMEM_CACHE(dm_bio_prison_cell, 0);
404405
if (!_cell_cache)
@@ -407,12 +408,51 @@ static int __init dm_bio_prison_init(void)
407408
return 0;
408409
}
409410

410-
static void __exit dm_bio_prison_exit(void)
411+
static void dm_bio_prison_exit_v1(void)
411412
{
412413
kmem_cache_destroy(_cell_cache);
413414
_cell_cache = NULL;
414415
}
415416

417+
static int (*_inits[])(void) __initdata = {
418+
dm_bio_prison_init_v1,
419+
dm_bio_prison_init_v2,
420+
};
421+
422+
static void (*_exits[])(void) = {
423+
dm_bio_prison_exit_v1,
424+
dm_bio_prison_exit_v2,
425+
};
426+
427+
static int __init dm_bio_prison_init(void)
428+
{
429+
const int count = ARRAY_SIZE(_inits);
430+
431+
int r, i;
432+
433+
for (i = 0; i < count; i++) {
434+
r = _inits[i]();
435+
if (r)
436+
goto bad;
437+
}
438+
439+
return 0;
440+
441+
bad:
442+
while (i--)
443+
_exits[i]();
444+
445+
return r;
446+
}
447+
448+
static void __exit dm_bio_prison_exit(void)
449+
{
450+
int i = ARRAY_SIZE(_exits);
451+
452+
while (i--)
453+
_exits[i]();
454+
}
455+
416456
/*
417457
* module hooks
418458
*/

drivers/md/dm-bio-prison.h renamed to drivers/md/dm-bio-prison-v1.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (C) 2011-2012 Red Hat, Inc.
2+
* Copyright (C) 2011-2017 Red Hat, Inc.
33
*
44
* This file is released under the GPL.
55
*/

0 commit comments

Comments
 (0)