/* * Create a client with mempool and bioset. */ struct dm_io_client *dm_io_client_create(unsigned num_pages) { 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); if (!client->pool) goto bad; client->bios = bioset_create(16, 0); if (!client->bios) goto bad; return client; bad: if (client->pool) mempool_destroy(client->pool); kfree(client); return ERR_PTR(-ENOMEM); }
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); }
void dm_io_put(unsigned int num_pages) { resize_pool(_num_ios - pages_to_ios(num_pages)); }
int dm_io_get(unsigned int num_pages) { return resize_pool(_num_ios + pages_to_ios(num_pages)); }