From 8df38432ecb72fae449543ef1df3c1f5dd8ff50f Mon Sep 17 00:00:00 2001 From: Trond Myklebust Date: Wed, 30 May 2007 12:58:00 -0400 Subject: [PATCH] --- yaml --- r: 57131 b: refs/heads/master c: b4946ffb1860597b187d78d61ac6504177eb0ff8 h: refs/heads/master i: 57129: 4bf7b91f24b7f64ca8d8e6c92dbc7f542588c521 57127: 037fc3cbe659452a77a5ca871d277034efedb663 v: v3 --- [refs] | 2 +- trunk/fs/nfs/direct.c | 12 +++++++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index 6b96106e6f30..ffd46139448d 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 7a74fc4925067c2102175baef73f9b07ab519b71 +refs/heads/master: b4946ffb1860597b187d78d61ac6504177eb0ff8 diff --git a/trunk/fs/nfs/direct.c b/trunk/fs/nfs/direct.c index 0c542ec92d5b..00eee87510fe 100644 --- a/trunk/fs/nfs/direct.c +++ b/trunk/fs/nfs/direct.c @@ -168,7 +168,7 @@ static inline struct nfs_direct_req *nfs_direct_req_alloc(void) return dreq; } -static void nfs_direct_req_release(struct kref *kref) +static void nfs_direct_req_free(struct kref *kref) { struct nfs_direct_req *dreq = container_of(kref, struct nfs_direct_req, kref); @@ -177,6 +177,11 @@ static void nfs_direct_req_release(struct kref *kref) kmem_cache_free(nfs_direct_cachep, dreq); } +static void nfs_direct_req_release(struct nfs_direct_req *dreq) +{ + kref_put(&dreq->kref, nfs_direct_req_free); +} + /* * Collects and returns the final error value/byte-count. */ @@ -196,7 +201,6 @@ static ssize_t nfs_direct_wait(struct nfs_direct_req *dreq) result = dreq->count; out: - kref_put(&dreq->kref, nfs_direct_req_release); return (ssize_t) result; } @@ -214,7 +218,7 @@ static void nfs_direct_complete(struct nfs_direct_req *dreq) } complete_all(&dreq->completion); - kref_put(&dreq->kref, nfs_direct_req_release); + nfs_direct_req_release(dreq); } /* @@ -369,6 +373,7 @@ static ssize_t nfs_direct_read(struct kiocb *iocb, unsigned long user_addr, size if (!result) result = nfs_direct_wait(dreq); rpc_clnt_sigunmask(clnt, &oldset); + nfs_direct_req_release(dreq); return result; } @@ -716,6 +721,7 @@ static ssize_t nfs_direct_write(struct kiocb *iocb, unsigned long user_addr, siz if (!result) result = nfs_direct_wait(dreq); rpc_clnt_sigunmask(clnt, &oldset); + nfs_direct_req_release(dreq); return result; }