diff options
| -rw-r--r-- | fs/nfs/nfs4filelayout.c | 1 | ||||
| -rw-r--r-- | fs/nfs/nfs4proc.c | 43 | ||||
| -rw-r--r-- | net/sunrpc/rpcb_clnt.c | 2 |
3 files changed, 24 insertions, 22 deletions
diff --git a/fs/nfs/nfs4filelayout.c b/fs/nfs/nfs4filelayout.c index 634c0bcb4fd6..5acfd9ea8a31 100644 --- a/fs/nfs/nfs4filelayout.c +++ b/fs/nfs/nfs4filelayout.c | |||
| @@ -793,7 +793,6 @@ filelayout_clear_request_commit(struct nfs_page *req) | |||
| 793 | if (!test_and_clear_bit(PG_COMMIT_TO_DS, &req->wb_flags)) | 793 | if (!test_and_clear_bit(PG_COMMIT_TO_DS, &req->wb_flags)) |
| 794 | goto out; | 794 | goto out; |
| 795 | if (list_is_singular(&req->wb_list)) { | 795 | if (list_is_singular(&req->wb_list)) { |
| 796 | struct inode *inode = req->wb_context->dentry->d_inode; | ||
| 797 | struct pnfs_layout_segment *lseg; | 796 | struct pnfs_layout_segment *lseg; |
| 798 | 797 | ||
| 799 | /* From here we can find the bucket, but for the moment, | 798 | /* From here we can find the bucket, but for the moment, |
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c index e809d2305ebf..f82bde005a82 100644 --- a/fs/nfs/nfs4proc.c +++ b/fs/nfs/nfs4proc.c | |||
| @@ -270,7 +270,7 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc | |||
| 270 | case 0: | 270 | case 0: |
| 271 | return 0; | 271 | return 0; |
| 272 | case -NFS4ERR_OPENMODE: | 272 | case -NFS4ERR_OPENMODE: |
| 273 | if (nfs_have_delegation(inode, FMODE_READ)) { | 273 | if (inode && nfs_have_delegation(inode, FMODE_READ)) { |
| 274 | nfs_inode_return_delegation(inode); | 274 | nfs_inode_return_delegation(inode); |
| 275 | exception->retry = 1; | 275 | exception->retry = 1; |
| 276 | return 0; | 276 | return 0; |
| @@ -282,10 +282,9 @@ static int nfs4_handle_exception(struct nfs_server *server, int errorcode, struc | |||
| 282 | case -NFS4ERR_DELEG_REVOKED: | 282 | case -NFS4ERR_DELEG_REVOKED: |
| 283 | case -NFS4ERR_ADMIN_REVOKED: | 283 | case -NFS4ERR_ADMIN_REVOKED: |
| 284 | case -NFS4ERR_BAD_STATEID: | 284 | case -NFS4ERR_BAD_STATEID: |
| 285 | if (state != NULL) | ||
| 286 | nfs_remove_bad_delegation(state->inode); | ||
| 287 | if (state == NULL) | 285 | if (state == NULL) |
| 288 | break; | 286 | break; |
| 287 | nfs_remove_bad_delegation(state->inode); | ||
| 289 | nfs4_schedule_stateid_recovery(server, state); | 288 | nfs4_schedule_stateid_recovery(server, state); |
| 290 | goto wait_on_recovery; | 289 | goto wait_on_recovery; |
| 291 | case -NFS4ERR_EXPIRED: | 290 | case -NFS4ERR_EXPIRED: |
| @@ -2290,11 +2289,12 @@ static int nfs4_lookup_root(struct nfs_server *server, struct nfs_fh *fhandle, | |||
| 2290 | switch (err) { | 2289 | switch (err) { |
| 2291 | case 0: | 2290 | case 0: |
| 2292 | case -NFS4ERR_WRONGSEC: | 2291 | case -NFS4ERR_WRONGSEC: |
| 2293 | break; | 2292 | goto out; |
| 2294 | default: | 2293 | default: |
| 2295 | err = nfs4_handle_exception(server, err, &exception); | 2294 | err = nfs4_handle_exception(server, err, &exception); |
| 2296 | } | 2295 | } |
| 2297 | } while (exception.retry); | 2296 | } while (exception.retry); |
| 2297 | out: | ||
| 2298 | return err; | 2298 | return err; |
| 2299 | } | 2299 | } |
| 2300 | 2300 | ||
| @@ -3712,7 +3712,7 @@ static ssize_t __nfs4_get_acl_uncached(struct inode *inode, void *buf, size_t bu | |||
| 3712 | if (acl_len > buflen) | 3712 | if (acl_len > buflen) |
| 3713 | goto out_free; | 3713 | goto out_free; |
| 3714 | _copy_from_pages(buf, pages, res.acl_data_offset, | 3714 | _copy_from_pages(buf, pages, res.acl_data_offset, |
| 3715 | res.acl_len); | 3715 | acl_len); |
| 3716 | } | 3716 | } |
| 3717 | ret = acl_len; | 3717 | ret = acl_len; |
| 3718 | out_free: | 3718 | out_free: |
| @@ -3824,8 +3824,9 @@ nfs4_async_handle_error(struct rpc_task *task, const struct nfs_server *server, | |||
| 3824 | case -NFS4ERR_DELEG_REVOKED: | 3824 | case -NFS4ERR_DELEG_REVOKED: |
| 3825 | case -NFS4ERR_ADMIN_REVOKED: | 3825 | case -NFS4ERR_ADMIN_REVOKED: |
| 3826 | case -NFS4ERR_BAD_STATEID: | 3826 | case -NFS4ERR_BAD_STATEID: |
| 3827 | if (state != NULL) | 3827 | if (state == NULL) |
| 3828 | nfs_remove_bad_delegation(state->inode); | 3828 | break; |
| 3829 | nfs_remove_bad_delegation(state->inode); | ||
| 3829 | case -NFS4ERR_OPENMODE: | 3830 | case -NFS4ERR_OPENMODE: |
| 3830 | if (state == NULL) | 3831 | if (state == NULL) |
| 3831 | break; | 3832 | break; |
| @@ -6111,21 +6112,22 @@ nfs4_layoutcommit_done(struct rpc_task *task, void *calldata) | |||
| 6111 | return; | 6112 | return; |
| 6112 | 6113 | ||
| 6113 | switch (task->tk_status) { /* Just ignore these failures */ | 6114 | switch (task->tk_status) { /* Just ignore these failures */ |
| 6114 | case NFS4ERR_DELEG_REVOKED: /* layout was recalled */ | 6115 | case -NFS4ERR_DELEG_REVOKED: /* layout was recalled */ |
| 6115 | case NFS4ERR_BADIOMODE: /* no IOMODE_RW layout for range */ | 6116 | case -NFS4ERR_BADIOMODE: /* no IOMODE_RW layout for range */ |
| 6116 | case NFS4ERR_BADLAYOUT: /* no layout */ | 6117 | case -NFS4ERR_BADLAYOUT: /* no layout */ |
| 6117 | case NFS4ERR_GRACE: /* loca_recalim always false */ | 6118 | case -NFS4ERR_GRACE: /* loca_recalim always false */ |
| 6118 | task->tk_status = 0; | 6119 | task->tk_status = 0; |
| 6119 | } | 6120 | break; |
| 6120 | 6121 | case 0: | |
| 6121 | if (nfs4_async_handle_error(task, server, NULL) == -EAGAIN) { | ||
| 6122 | rpc_restart_call_prepare(task); | ||
| 6123 | return; | ||
| 6124 | } | ||
| 6125 | |||
| 6126 | if (task->tk_status == 0) | ||
| 6127 | nfs_post_op_update_inode_force_wcc(data->args.inode, | 6122 | nfs_post_op_update_inode_force_wcc(data->args.inode, |
| 6128 | data->res.fattr); | 6123 | data->res.fattr); |
| 6124 | break; | ||
| 6125 | default: | ||
| 6126 | if (nfs4_async_handle_error(task, server, NULL) == -EAGAIN) { | ||
| 6127 | rpc_restart_call_prepare(task); | ||
| 6128 | return; | ||
| 6129 | } | ||
| 6130 | } | ||
| 6129 | } | 6131 | } |
| 6130 | 6132 | ||
| 6131 | static void nfs4_layoutcommit_release(void *calldata) | 6133 | static void nfs4_layoutcommit_release(void *calldata) |
| @@ -6229,11 +6231,12 @@ nfs41_proc_secinfo_no_name(struct nfs_server *server, struct nfs_fh *fhandle, | |||
| 6229 | case 0: | 6231 | case 0: |
| 6230 | case -NFS4ERR_WRONGSEC: | 6232 | case -NFS4ERR_WRONGSEC: |
| 6231 | case -NFS4ERR_NOTSUPP: | 6233 | case -NFS4ERR_NOTSUPP: |
| 6232 | break; | 6234 | goto out; |
| 6233 | default: | 6235 | default: |
| 6234 | err = nfs4_handle_exception(server, err, &exception); | 6236 | err = nfs4_handle_exception(server, err, &exception); |
| 6235 | } | 6237 | } |
| 6236 | } while (exception.retry); | 6238 | } while (exception.retry); |
| 6239 | out: | ||
| 6237 | return err; | 6240 | return err; |
| 6238 | } | 6241 | } |
| 6239 | 6242 | ||
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index 207a74696c9f..78ac39fd9fe7 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c | |||
| @@ -734,7 +734,7 @@ void rpcb_getport_async(struct rpc_task *task) | |||
| 734 | map->r_vers = clnt->cl_vers; | 734 | map->r_vers = clnt->cl_vers; |
| 735 | map->r_prot = xprt->prot; | 735 | map->r_prot = xprt->prot; |
| 736 | map->r_port = 0; | 736 | map->r_port = 0; |
| 737 | map->r_xprt = xprt_get(xprt); | 737 | map->r_xprt = xprt; |
| 738 | map->r_status = -EIO; | 738 | map->r_status = -EIO; |
| 739 | 739 | ||
| 740 | switch (bind_version) { | 740 | switch (bind_version) { |
