#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;
 
 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;
 
 }
 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);
 
        if (r)
                goto bad_client_pages;
 
-       kc->io_client = dm_io_client_create(min_pages);
+       kc->io_client = dm_io_client_create();
        if (IS_ERR(kc->io_client)) {
                r = PTR_ERR(kc->io_client);
                goto bad_io_client;
 
 
                lc->io_req.mem.type = DM_IO_VMA;
                lc->io_req.notify.fn = NULL;
-               lc->io_req.client = dm_io_client_create(dm_div_up(buf_size,
-                                                                  PAGE_SIZE));
+               lc->io_req.client = dm_io_client_create();
                if (IS_ERR(lc->io_req.client)) {
                        r = PTR_ERR(lc->io_req.client);
                        DMWARN("couldn't allocate disk io client");
 
 #define DM_MSG_PREFIX "raid1"
 
 #define MAX_RECOVERY 1 /* Maximum number of regions recovered in parallel. */
-#define DM_IO_PAGES 64
 #define DM_KCOPYD_PAGES 64
 
 #define DM_RAID1_HANDLE_ERRORS 0x01
                return NULL;
        }
 
-       ms->io_client = dm_io_client_create(DM_IO_PAGES);
+       ms->io_client = dm_io_client_create();
        if (IS_ERR(ms->io_client)) {
                ti->error = "Error creating dm_io client";
                mempool_destroy(ms->read_record_pool);
 
        struct workqueue_struct *metadata_wq;
 };
 
-static unsigned sectors_to_pages(unsigned sectors)
-{
-       return DIV_ROUND_UP(sectors, PAGE_SIZE >> 9);
-}
-
 static int alloc_area(struct pstore *ps)
 {
        int r = -ENOMEM;
                chunk_size_supplied = 0;
        }
 
-       ps->io_client = dm_io_client_create(sectors_to_pages(ps->store->
-                                                            chunk_size));
+       ps->io_client = dm_io_client_create();
        if (IS_ERR(ps->io_client))
                return PTR_ERR(ps->io_client);
 
                return r;
        }
 
-       r = dm_io_client_resize(sectors_to_pages(ps->store->chunk_size),
-                               ps->io_client);
-       if (r)
-               return r;
-
        r = alloc_area(ps);
        return r;
 
 
  *
  * Create/destroy may block.
  */
-struct dm_io_client *dm_io_client_create(unsigned num_pages);
-int dm_io_client_resize(unsigned num_pages, struct dm_io_client *client);
+struct dm_io_client *dm_io_client_create(void);
 void dm_io_client_destroy(struct dm_io_client *client);
 
 /*