summaryrefslogtreecommitdiffstats
path: root/fs/nfs/pagelist.c
diff options
context:
space:
mode:
authorAnna Schumaker <Anna.Schumaker@netapp.com>2014-05-06 15:12:35 +0200
committerTrond Myklebust <trond.myklebust@primarydata.com>2014-05-29 00:41:04 +0200
commit844c9e691d8723853ca8f2de0207683538645824 (patch)
tree81e74dc24a665888727c0e7b26a59db2feea2ecb /fs/nfs/pagelist.c
parentNFS: Create a common rpcsetup function for reads and writes (diff)
downloadlinux-844c9e691d8723853ca8f2de0207683538645824.tar.xz
linux-844c9e691d8723853ca8f2de0207683538645824.zip
NFS: Create a common pgio_error function
At this point, the read and write versions of this function look identical so both should use the same function. Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
Diffstat (limited to 'fs/nfs/pagelist.c')
-rw-r--r--fs/nfs/pagelist.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/fs/nfs/pagelist.c b/fs/nfs/pagelist.c
index 0ccd95116968..b0a98daae14c 100644
--- a/fs/nfs/pagelist.c
+++ b/fs/nfs/pagelist.c
@@ -447,6 +447,26 @@ static void nfs_pgio_prepare(struct rpc_task *task, void *calldata)
}
/**
+ * nfs_pgio_error - Clean up from a pageio error
+ * @desc: IO descriptor
+ * @hdr: pageio header
+ */
+int nfs_pgio_error(struct nfs_pageio_descriptor *desc,
+ struct nfs_pgio_header *hdr)
+{
+ struct nfs_pgio_data *data;
+
+ set_bit(NFS_IOHDR_REDO, &hdr->flags);
+ while (!list_empty(&hdr->rpc_list)) {
+ data = list_first_entry(&hdr->rpc_list, struct nfs_pgio_data, list);
+ list_del(&data->list);
+ nfs_pgio_data_release(data);
+ }
+ desc->pg_completion_ops->error_cleanup(&desc->pg_list);
+ return -ENOMEM;
+}
+
+/**
* nfs_pgio_release - Release pageio data
* @calldata: The pageio data to release
*/