static struct kmem_cache *cifs_req_cachep;
 static struct kmem_cache *cifs_mid_cachep;
 static struct kmem_cache *cifs_sm_req_cachep;
+static struct kmem_cache *cifs_io_request_cachep;
+static struct kmem_cache *cifs_io_subrequest_cachep;
 mempool_t *cifs_sm_req_poolp;
 mempool_t *cifs_req_poolp;
 mempool_t *cifs_mid_poolp;
+mempool_t cifs_io_request_pool;
+mempool_t cifs_io_subrequest_pool;
 
 static struct inode *
 cifs_alloc_inode(struct super_block *sb)
        kmem_cache_destroy(cifs_mid_cachep);
 }
 
+static int cifs_init_netfs(void)
+{
+       cifs_io_request_cachep =
+               kmem_cache_create("cifs_io_request",
+                                 sizeof(struct netfs_io_request), 0,
+                                 SLAB_HWCACHE_ALIGN, NULL);
+       if (!cifs_io_request_cachep)
+               goto nomem_req;
+
+       if (mempool_init_slab_pool(&cifs_io_request_pool, 100, cifs_io_request_cachep) < 0)
+               goto nomem_reqpool;
+
+       cifs_io_subrequest_cachep =
+               kmem_cache_create("cifs_io_subrequest",
+                                 sizeof(struct cifs_io_subrequest), 0,
+                                 SLAB_HWCACHE_ALIGN, NULL);
+       if (!cifs_io_subrequest_cachep)
+               goto nomem_subreq;
+
+       if (mempool_init_slab_pool(&cifs_io_subrequest_pool, 100, cifs_io_subrequest_cachep) < 0)
+               goto nomem_subreqpool;
+
+       return 0;
+
+nomem_subreqpool:
+       kmem_cache_destroy(cifs_io_subrequest_cachep);
+nomem_subreq:
+       mempool_destroy(&cifs_io_request_pool);
+nomem_reqpool:
+       kmem_cache_destroy(cifs_io_request_cachep);
+nomem_req:
+       return -ENOMEM;
+}
+
+static void cifs_destroy_netfs(void)
+{
+       mempool_destroy(&cifs_io_subrequest_pool);
+       kmem_cache_destroy(cifs_io_subrequest_cachep);
+       mempool_destroy(&cifs_io_request_pool);
+       kmem_cache_destroy(cifs_io_request_cachep);
+}
+
 static int __init
 init_cifs(void)
 {
        if (rc)
                goto out_destroy_deferredclose_wq;
 
-       rc = init_mids();
+       rc = cifs_init_netfs();
        if (rc)
                goto out_destroy_inodecache;
 
+       rc = init_mids();
+       if (rc)
+               goto out_destroy_netfs;
+
        rc = cifs_init_request_bufs();
        if (rc)
                goto out_destroy_mids;
        cifs_destroy_request_bufs();
 out_destroy_mids:
        destroy_mids();
+out_destroy_netfs:
+       cifs_destroy_netfs();
 out_destroy_inodecache:
        cifs_destroy_inodecache();
 out_destroy_deferredclose_wq:
 #endif
        cifs_destroy_request_bufs();
        destroy_mids();
+       cifs_destroy_netfs();
        cifs_destroy_inodecache();
        destroy_workqueue(deferredclose_wq);
        destroy_workqueue(cifsoplockd_wq);