NFS: create common routine for allocating nfs_direct_req
authorChuck Lever <cel@netapp.com>
Mon, 20 Mar 2006 18:44:31 +0000 (13:44 -0500)
committerTrond Myklebust <Trond.Myklebust@netapp.com>
Mon, 20 Mar 2006 18:44:31 +0000 (13:44 -0500)
Factor out a small common piece of the path that allocate nfs_direct_req
structures.

Test plan:
Compile kernel with CONFIG_NFS and CONFIG_NFS_DIRECTIO enabled.

Signed-off-by: Chuck Lever <cel@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
fs/nfs/direct.c

index 2593f47eaff0705bb77cd3db23e03d757689939b..489f736d0f5d3bdfd5f7ac6e5da777262ed87796 100644 (file)
@@ -152,6 +152,24 @@ static void nfs_free_user_pages(struct page **pages, int npages, int do_dirty)
        kfree(pages);
 }
 
+static inline struct nfs_direct_req *nfs_direct_req_alloc(void)
+{
+       struct nfs_direct_req *dreq;
+
+       dreq = kmem_cache_alloc(nfs_direct_cachep, SLAB_KERNEL);
+       if (!dreq)
+               return NULL;
+
+       kref_init(&dreq->kref);
+       init_waitqueue_head(&dreq->wait);
+       INIT_LIST_HEAD(&dreq->list);
+       dreq->iocb = NULL;
+       atomic_set(&dreq->count, 0);
+       atomic_set(&dreq->error, 0);
+
+       return dreq;
+}
+
 static void nfs_direct_req_release(struct kref *kref)
 {
        struct nfs_direct_req *dreq = container_of(kref, struct nfs_direct_req, kref);
@@ -194,17 +212,10 @@ static struct nfs_direct_req *nfs_direct_read_alloc(size_t nbytes, size_t rsize)
        unsigned int reads = 0;
        unsigned int rpages = (rsize + PAGE_CACHE_SIZE - 1) >> PAGE_CACHE_SHIFT;
 
-       dreq = kmem_cache_alloc(nfs_direct_cachep, SLAB_KERNEL);
+       dreq = nfs_direct_req_alloc();
        if (!dreq)
                return NULL;
 
-       kref_init(&dreq->kref);
-       init_waitqueue_head(&dreq->wait);
-       INIT_LIST_HEAD(&dreq->list);
-       dreq->iocb = NULL;
-       atomic_set(&dreq->count, 0);
-       atomic_set(&dreq->error, 0);
-
        list = &dreq->list;
        for(;;) {
                struct nfs_read_data *data = nfs_readdata_alloc(rpages);
This page took 0.028126 seconds and 5 git commands to generate.