diff options
| author | Andy Adamson <andros@netapp.com> | 2011-02-28 20:34:20 -0500 |
|---|---|---|
| committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2011-03-11 15:38:43 -0500 |
| commit | cbdabc7f8bf14ca1d40ab1cb86f64b3bc09716e8 (patch) | |
| tree | 16939b96996e8380d91d7e2743e811cf5c49f629 /include | |
| parent | dc70d7b3189597f313df7bd2da849cfc39063b15 (diff) | |
NFSv4.1: filelayout async error handler
Use our own async error handler.
Mark the layout as failed and retry i/o through the MDS on specified errors.
Update the mds_offset in nfs_readpage_retry so that a failed short-read retry
to a DS gets correctly resent through the MDS.
Signed-off-by: Andy Adamson <andros@netapp.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/nfs_xdr.h | 1 | ||||
| -rw-r--r-- | include/linux/sunrpc/clnt.h | 1 |
2 files changed, 2 insertions, 0 deletions
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h index b63faef5052e..eb0e87084353 100644 --- a/include/linux/nfs_xdr.h +++ b/include/linux/nfs_xdr.h | |||
| @@ -1020,6 +1020,7 @@ struct nfs_read_data { | |||
| 1020 | struct pnfs_layout_segment *lseg; | 1020 | struct pnfs_layout_segment *lseg; |
| 1021 | struct nfs_client *ds_clp; /* pNFS data server */ | 1021 | struct nfs_client *ds_clp; /* pNFS data server */ |
| 1022 | const struct rpc_call_ops *mds_ops; | 1022 | const struct rpc_call_ops *mds_ops; |
| 1023 | int (*read_done_cb) (struct rpc_task *task, struct nfs_read_data *data); | ||
| 1023 | __u64 mds_offset; | 1024 | __u64 mds_offset; |
| 1024 | struct page *page_array[NFS_PAGEVEC_SIZE]; | 1025 | struct page *page_array[NFS_PAGEVEC_SIZE]; |
| 1025 | }; | 1026 | }; |
diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index ef9476a36ff7..db7bcaf7c5bd 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h | |||
| @@ -129,6 +129,7 @@ struct rpc_create_args { | |||
| 129 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); | 129 | struct rpc_clnt *rpc_create(struct rpc_create_args *args); |
| 130 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, | 130 | struct rpc_clnt *rpc_bind_new_program(struct rpc_clnt *, |
| 131 | struct rpc_program *, u32); | 131 | struct rpc_program *, u32); |
| 132 | void rpc_task_reset_client(struct rpc_task *task, struct rpc_clnt *clnt); | ||
| 132 | struct rpc_clnt *rpc_clone_client(struct rpc_clnt *); | 133 | struct rpc_clnt *rpc_clone_client(struct rpc_clnt *); |
| 133 | void rpc_shutdown_client(struct rpc_clnt *); | 134 | void rpc_shutdown_client(struct rpc_clnt *); |
| 134 | void rpc_release_client(struct rpc_clnt *); | 135 | void rpc_release_client(struct rpc_clnt *); |
