diff options
author | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-01-21 17:46:16 +0900 |
---|---|---|
committer | Mark Brown <broonie@opensource.wolfsonmicro.com> | 2013-01-21 17:46:16 +0900 |
commit | 69485d3e6d6839b46a56c77d2dffad18cb7d373f (patch) | |
tree | 20e9de1d5fd9f6617b05e759f9326eaffaf743ee /fs/nfs/read.c | |
parent | f2a93e2a4c048dfb5c7ee3f159a4a1d1cb61b4b5 (diff) | |
parent | 7881fd0fb3ecc9e367ba998a4de533e7eecbdfeb (diff) |
Merge remote-tracking branch 'asoc/fix/adsp' into asoc-adsp
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); |