Skip to content

Commit

Permalink
Merge git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-2.6-dm
Browse files Browse the repository at this point in the history
* git://git.kernel.org/pub/scm/linux/kernel/git/agk/linux-2.6-dm:
  dm kcopyd: return client directly and not through a pointer
  dm kcopyd: reserve fewer pages
  dm io: use fixed initial mempool size
  dm kcopyd: alloc pages from the main page allocator
  dm kcopyd: add gfp parm to alloc_pl
  dm kcopyd: remove superfluous page allocation spinlock
  dm kcopyd: preallocate sub jobs to avoid deadlock
  dm kcopyd: avoid pointless job splitting
  dm mpath: do not fail paths after integrity errors
  dm table: reject devices without request fns
  dm table: allow targets to support discards internally
  • Loading branch information
Linus Torvalds committed May 29, 2011
2 parents f1d1c9f + fa34ce7 commit b11b06d
Show file tree
Hide file tree
Showing 11 changed files with 144 additions and 124 deletions.
27 changes: 5 additions & 22 deletions drivers/md/dm-io.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@
#define DM_MSG_PREFIX "io"

#define DM_IO_MAX_REGIONS BITS_PER_LONG
#define MIN_IOS 16
#define MIN_BIOS 16

struct dm_io_client {
mempool_t *pool;
Expand All @@ -40,34 +42,22 @@ struct io {

static struct kmem_cache *_dm_io_cache;

/*
* io contexts are only dynamically allocated for asynchronous
* io. Since async io is likely to be the majority of io we'll
* have the same number of io contexts as bios! (FIXME: must reduce this).
*/

static unsigned int pages_to_ios(unsigned int pages)
{
return 4 * pages; /* too many ? */
}

/*
* Create a client with mempool and bioset.
*/
struct dm_io_client *dm_io_client_create(unsigned num_pages)
struct dm_io_client *dm_io_client_create(void)
{
unsigned ios = pages_to_ios(num_pages);
struct dm_io_client *client;

client = kmalloc(sizeof(*client), GFP_KERNEL);
if (!client)
return ERR_PTR(-ENOMEM);

client->pool = mempool_create_slab_pool(ios, _dm_io_cache);
client->pool = mempool_create_slab_pool(MIN_IOS, _dm_io_cache);
if (!client->pool)
goto bad;

client->bios = bioset_create(16, 0);
client->bios = bioset_create(MIN_BIOS, 0);
if (!client->bios)
goto bad;

Expand All @@ -81,13 +71,6 @@ struct dm_io_client *dm_io_client_create(unsigned num_pages)
}
EXPORT_SYMBOL(dm_io_client_create);

int dm_io_client_resize(unsigned num_pages, struct dm_io_client *client)
{
return mempool_resize(client->pool, pages_to_ios(num_pages),
GFP_KERNEL);
}
EXPORT_SYMBOL(dm_io_client_resize);

void dm_io_client_destroy(struct dm_io_client *client)
{
mempool_destroy(client->pool);
Expand Down
Loading

0 comments on commit b11b06d

Please sign in to comment.