Skip to content

Commit

Permalink
dm bio prison v2: new interface for the bio prison
Browse files Browse the repository at this point in the history
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 <ejt@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
  • Loading branch information
Joe Thornber authored and Mike Snitzer committed Mar 7, 2017
1 parent c1ae3cf commit 742c8fd
Show file tree
Hide file tree
Showing 7 changed files with 568 additions and 6 deletions.
1 change: 1 addition & 0 deletions drivers/md/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ dm-snapshot-y += dm-snap.o dm-exception-store.o dm-snap-transient.o \
dm-mirror-y += dm-raid1.o
dm-log-userspace-y \
+= dm-log-userspace-base.o dm-log-userspace-transfer.o
dm-bio-prison-y += dm-bio-prison-v1.o dm-bio-prison-v2.o
dm-thin-pool-y += dm-thin.o dm-thin-metadata.o
dm-cache-y += dm-cache-target.o dm-cache-metadata.o dm-cache-policy.o
dm-cache-smq-y += dm-cache-policy-smq.o
Expand Down
46 changes: 43 additions & 3 deletions drivers/md/dm-bio-prison.c → drivers/md/dm-bio-prison-v1.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,8 @@
*/

#include "dm.h"
#include "dm-bio-prison.h"
#include "dm-bio-prison-v1.h"
#include "dm-bio-prison-v2.h"

#include <linux/spinlock.h>
#include <linux/mempool.h>
Expand Down Expand Up @@ -398,7 +399,7 @@ EXPORT_SYMBOL_GPL(dm_deferred_set_add_work);

/*----------------------------------------------------------------*/

static int __init dm_bio_prison_init(void)
static int __init dm_bio_prison_init_v1(void)
{
_cell_cache = KMEM_CACHE(dm_bio_prison_cell, 0);
if (!_cell_cache)
Expand All @@ -407,12 +408,51 @@ static int __init dm_bio_prison_init(void)
return 0;
}

static void __exit dm_bio_prison_exit(void)
static void dm_bio_prison_exit_v1(void)
{
kmem_cache_destroy(_cell_cache);
_cell_cache = NULL;
}

static int (*_inits[])(void) __initdata = {
dm_bio_prison_init_v1,
dm_bio_prison_init_v2,
};

static void (*_exits[])(void) = {
dm_bio_prison_exit_v1,
dm_bio_prison_exit_v2,
};

static int __init dm_bio_prison_init(void)
{
const int count = ARRAY_SIZE(_inits);

int r, i;

for (i = 0; i < count; i++) {
r = _inits[i]();
if (r)
goto bad;
}

return 0;

bad:
while (i--)
_exits[i]();

return r;
}

static void __exit dm_bio_prison_exit(void)
{
int i = ARRAY_SIZE(_exits);

while (i--)
_exits[i]();
}

/*
* module hooks
*/
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (C) 2011-2012 Red Hat, Inc.
* Copyright (C) 2011-2017 Red Hat, Inc.
*
* This file is released under the GPL.
*/
Expand Down
Loading

0 comments on commit 742c8fd

Please sign in to comment.