if (!cfqd->cfq_hash)
                goto out_cfqhash;
 
-       cfqd->crq_pool = mempool_create(BLKDEV_MIN_RQ, mempool_alloc_slab, mempool_free_slab, crq_pool);
+       cfqd->crq_pool = mempool_create_slab_pool(BLKDEV_MIN_RQ, crq_pool);
        if (!cfqd->crq_pool)
                goto out_crqpool;
 
 
                return;
        }
 
-       d->bufpool = mempool_create(MIN_BUFS,
-                                   mempool_alloc_slab, mempool_free_slab,
-                                   buf_pool_cache);
+       d->bufpool = mempool_create_slab_pool(MIN_BUFS, buf_pool_cache);
        if (d->bufpool == NULL) {
                printk(KERN_ERR "aoe: aoeblk_gdalloc: cannot allocate bufpool "
                        "for %ld.%ld\n", d->aoemajor, d->aoeminor);
 
                }
        }
 
-       cc->io_pool = mempool_create(MIN_IOS, mempool_alloc_slab,
-                                    mempool_free_slab, _crypt_io_pool);
+       cc->io_pool = mempool_create_slab_pool(MIN_IOS, _crypt_io_pool);
        if (!cc->io_pool) {
                ti->error = PFX "Cannot allocate crypt io mempool";
                goto bad3;
 
                m->queue_io = 1;
                INIT_WORK(&m->process_queued_ios, process_queued_ios, m);
                INIT_WORK(&m->trigger_event, trigger_event, m);
-               m->mpio_pool = mempool_create(MIN_IOS, mempool_alloc_slab,
-                                             mempool_free_slab, _mpio_cache);
+               m->mpio_pool = mempool_create_slab_pool(MIN_IOS, _mpio_cache);
                if (!m->mpio_pool) {
                        kfree(m);
                        return NULL;
 
                goto bad4;
        }
 
-       pending_pool = mempool_create(128, mempool_alloc_slab,
-                                     mempool_free_slab, pending_cache);
+       pending_pool = mempool_create_slab_pool(128, pending_cache);
        if (!pending_pool) {
                DMERR("Couldn't create pending pool.");
                r = -ENOMEM;
 
        md->queue->unplug_fn = dm_unplug_all;
        md->queue->issue_flush_fn = dm_flush_all;
 
-       md->io_pool = mempool_create(MIN_IOS, mempool_alloc_slab,
-                                    mempool_free_slab, _io_cache);
+       md->io_pool = mempool_create_slab_pool(MIN_IOS, _io_cache);
        if (!md->io_pool)
                goto bad2;
 
-       md->tio_pool = mempool_create(MIN_IOS, mempool_alloc_slab,
-                                     mempool_free_slab, _tio_cache);
+       md->tio_pool = mempool_create_slab_pool(MIN_IOS, _tio_cache);
        if (!md->tio_pool)
                goto bad3;
 
 
        if (!_job_cache)
                return -ENOMEM;
 
-       _job_pool = mempool_create(MIN_JOBS, mempool_alloc_slab,
-                                  mempool_free_slab, _job_cache);
+       _job_pool = mempool_create_slab_pool(MIN_JOBS, _job_cache);
        if (!_job_pool) {
                kmem_cache_destroy(_job_cache);
                return -ENOMEM;
 
                goto exit;
        }
 
-       i2o_blk_req_pool.pool = mempool_create(I2O_BLOCK_REQ_MEMPOOL_SIZE,
-                                              mempool_alloc_slab,
-                                              mempool_free_slab,
-                                              i2o_blk_req_pool.slab);
+       i2o_blk_req_pool.pool =
+               mempool_create_slab_pool(I2O_BLOCK_REQ_MEMPOOL_SIZE,
+                                        i2o_blk_req_pool.slab);
        if (!i2o_blk_req_pool.pool) {
                osm_err("can't init request mempool\n");
                rc = -ENOMEM;
 
                 * Data-Out PDU's within R2T-sequence can be quite big;
                 * using mempool
                 */
-               ctask->datapool = mempool_create(ISCSI_DTASK_DEFAULT_MAX,
-                        mempool_alloc_slab, mempool_free_slab, taskcache);
+               ctask->datapool = mempool_create_slab_pool(ISCSI_DTASK_DEFAULT_MAX,
+                                                          taskcache);
                if (ctask->datapool == NULL) {
                        kfifo_free(ctask->r2tqueue);
                        iscsi_pool_free(&ctask->r2tpool, (void**)ctask->r2ts);
 
        int      rval;
 
        rval = QLA_SUCCESS;
-       ha->srb_mempool = mempool_create(SRB_MIN_REQ, mempool_alloc_slab,
-           mempool_free_slab, srb_cachep);
+       ha->srb_mempool = mempool_create_slab_pool(SRB_MIN_REQ, srb_cachep);
        if (ha->srb_mempool == NULL) {
                qla_printk(KERN_INFO, ha, "Unable to allocate SRB mempool.\n");
                rval = QLA_FUNCTION_FAILED;
 
                                        sgp->name);
                }
 
-               sgp->pool = mempool_create(SG_MEMPOOL_SIZE,
-                               mempool_alloc_slab, mempool_free_slab,
-                               sgp->slab);
+               sgp->pool = mempool_create_slab_pool(SG_MEMPOOL_SIZE,
+                                                    sgp->slab);
                if (!sgp->pool) {
                        printk(KERN_ERR "SCSI: can't init sg mempool %s\n",
                                        sgp->name);
 
                if (i >= scale)
                        pool_entries >>= 1;
 
-               *bvp = mempool_create(pool_entries, mempool_alloc_slab,
-                                       mempool_free_slab, bp->slab);
+               *bvp = mempool_create_slab_pool(pool_entries, bp->slab);
                if (!*bvp)
                        return -ENOMEM;
        }
        if (!bs)
                return NULL;
 
-       bs->bio_pool = mempool_create(bio_pool_size, mempool_alloc_slab,
-                       mempool_free_slab, bio_slab);
-
+       bs->bio_pool = mempool_create_slab_pool(bio_pool_size, bio_slab);
        if (!bs->bio_pool)
                goto bad;
 
 
                cERROR(1,("cifs_min_rcv set to maximum (64)"));
        }
 
-       cifs_req_poolp = mempool_create(cifs_min_rcv,
-                                       mempool_alloc_slab,
-                                       mempool_free_slab,
-                                       cifs_req_cachep);
+       cifs_req_poolp = mempool_create_slab_pool(cifs_min_rcv,
+                                                 cifs_req_cachep);
 
        if(cifs_req_poolp == NULL) {
                kmem_cache_destroy(cifs_req_cachep);
                cFYI(1,("cifs_min_small set to maximum (256)"));
        }
 
-       cifs_sm_req_poolp = mempool_create(cifs_min_small,
-                               mempool_alloc_slab,
-                               mempool_free_slab,
-                               cifs_sm_req_cachep);
+       cifs_sm_req_poolp = mempool_create_slab_pool(cifs_min_small,
+                                                    cifs_sm_req_cachep);
 
        if(cifs_sm_req_poolp == NULL) {
                mempool_destroy(cifs_req_poolp);
        if (cifs_mid_cachep == NULL)
                return -ENOMEM;
 
-       cifs_mid_poolp = mempool_create(3 /* a reasonable min simultan opers */,
-                                       mempool_alloc_slab,
-                                       mempool_free_slab,
-                                       cifs_mid_cachep);
+       /* 3 is a reasonable minimum number of simultaneous operations */
+       cifs_mid_poolp = mempool_create_slab_pool(3, cifs_mid_cachep);
        if(cifs_mid_poolp == NULL) {
                kmem_cache_destroy(cifs_mid_cachep);
                return -ENOMEM;
 
        if (metapage_cache == NULL)
                return -ENOMEM;
 
-       metapage_mempool = mempool_create(METAPOOL_MIN_PAGES, mempool_alloc_slab,
-                                         mempool_free_slab, metapage_cache);
+       metapage_mempool = mempool_create_slab_pool(METAPOOL_MIN_PAGES,
+                                                   metapage_cache);
 
        if (metapage_mempool == NULL) {
                kmem_cache_destroy(metapage_cache);
 
        if (nfs_rdata_cachep == NULL)
                return -ENOMEM;
 
-       nfs_rdata_mempool = mempool_create(MIN_POOL_READ,
-                                          mempool_alloc_slab,
-                                          mempool_free_slab,
-                                          nfs_rdata_cachep);
+       nfs_rdata_mempool = mempool_create_slab_pool(MIN_POOL_READ,
+                                                    nfs_rdata_cachep);
        if (nfs_rdata_mempool == NULL)
                return -ENOMEM;
 
 
        if (nfs_wdata_cachep == NULL)
                return -ENOMEM;
 
-       nfs_wdata_mempool = mempool_create(MIN_POOL_WRITE,
-                                          mempool_alloc_slab,
-                                          mempool_free_slab,
-                                          nfs_wdata_cachep);
+       nfs_wdata_mempool = mempool_create_slab_pool(MIN_POOL_WRITE,
+                                                    nfs_wdata_cachep);
        if (nfs_wdata_mempool == NULL)
                return -ENOMEM;
 
-       nfs_commit_mempool = mempool_create(MIN_POOL_COMMIT,
-                                          mempool_alloc_slab,
-                                          mempool_free_slab,
-                                          nfs_wdata_cachep);
+       nfs_commit_mempool = mempool_create_slab_pool(MIN_POOL_COMMIT,
+                                                     nfs_wdata_cachep);
        if (nfs_commit_mempool == NULL)
                return -ENOMEM;
 
 
        if (!xfs_ioend_zone)
                goto out_destroy_vnode_zone;
 
-       xfs_ioend_pool = mempool_create(4 * MAX_BUF_PER_PAGE,
-                                       mempool_alloc_slab, mempool_free_slab,
-                                       xfs_ioend_zone);
+       xfs_ioend_pool = mempool_create_slab_pool(4 * MAX_BUF_PER_PAGE,
+                                                 xfs_ioend_zone);
        if (!xfs_ioend_pool)
                goto out_free_ioend_zone;
        return 0;
 
        if (!pool->slab)
                goto free_name;
 
-       pool->mempool =
-           mempool_create(min_nr, mempool_alloc_slab, mempool_free_slab,
-                          pool->slab);
+       pool->mempool = mempool_create_slab_pool(min_nr, pool->slab);
        if (!pool->mempool)
                goto free_slab;
 
 
                                             NULL, NULL);
        if (!rpc_buffer_slabp)
                goto err_nomem;
-       rpc_task_mempool = mempool_create(RPC_TASK_POOLSIZE,
-                                           mempool_alloc_slab,
-                                           mempool_free_slab,
-                                           rpc_task_slabp);
+       rpc_task_mempool = mempool_create_slab_pool(RPC_TASK_POOLSIZE,
+                                                   rpc_task_slabp);
        if (!rpc_task_mempool)
                goto err_nomem;
-       rpc_buffer_mempool = mempool_create(RPC_BUFFER_POOLSIZE,
-                                           mempool_alloc_slab,
-                                           mempool_free_slab,
-                                           rpc_buffer_slabp);
+       rpc_buffer_mempool = mempool_create_slab_pool(RPC_BUFFER_POOLSIZE,
+                                                     rpc_buffer_slabp);
        if (!rpc_buffer_mempool)
                goto err_nomem;
        return 0;