diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-01-19 15:27:30 +0000 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-01-19 15:27:30 +0000 |
commit | 210b1847b32951f52d19df229972399e5b987de2 (patch) | |
tree | be6eeb3ba76b4f4331c98d5ba47aa233bea8f22d /fs/nfs/read.c | |
parent | 93d5bf073a1e01035be66dc41860b9ae9aa9ccfa (diff) | |
parent | d01723479e6a6c70c83295f7847477a016d5e14a (diff) |
Merge branch 'for-rmk/virt/hyp-boot/fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/will/linux into fixes
Diffstat (limited to 'fs/nfs/read.c')
-rw-r--r-- | fs/nfs/read.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/fs/nfs/read.c b/fs/nfs/read.c index b6bdb18e892..a5e5d9899d5 100644 --- a/fs/nfs/read.c +++ b/fs/nfs/read.c @@ -91,12 +91,16 @@ void nfs_readdata_release(struct nfs_read_data *rdata) put_nfs_open_context(rdata->args.context); if (rdata->pages.pagevec != rdata->pages.page_array) kfree(rdata->pages.pagevec); - if (rdata != &read_header->rpc_data) - kfree(rdata); - else + if (rdata == &read_header->rpc_data) { rdata->header = NULL; + rdata = NULL; + } if (atomic_dec_and_test(&hdr->refcnt)) hdr->completion_ops->completion(hdr); + /* Note: we only free the rpc_task after callbacks are done. + * See the comment in rpc_free_task() for why + */ + kfree(rdata); } EXPORT_SYMBOL_GPL(nfs_readdata_release); |