forked from Minki/linux
NFSv4.1: Fix layoutcommit error handling
Firstly, task->tk_status will always return negative error values, so the current tests for 'NFS4ERR_DELEG_REVOKED' etc. are all being ignored. Secondly, clean up the code so that we only need to test task->tk_status once! Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com> Cc: stable@vger.kernel.org
This commit is contained in:
parent
05e9cfb408
commit
e59d27e05a
@ -6112,21 +6112,22 @@ nfs4_layoutcommit_done(struct rpc_task *task, void *calldata)
|
||||
return;
|
||||
|
||||
switch (task->tk_status) { /* Just ignore these failures */
|
||||
case NFS4ERR_DELEG_REVOKED: /* layout was recalled */
|
||||
case NFS4ERR_BADIOMODE: /* no IOMODE_RW layout for range */
|
||||
case NFS4ERR_BADLAYOUT: /* no layout */
|
||||
case NFS4ERR_GRACE: /* loca_recalim always false */
|
||||
case -NFS4ERR_DELEG_REVOKED: /* layout was recalled */
|
||||
case -NFS4ERR_BADIOMODE: /* no IOMODE_RW layout for range */
|
||||
case -NFS4ERR_BADLAYOUT: /* no layout */
|
||||
case -NFS4ERR_GRACE: /* loca_recalim always false */
|
||||
task->tk_status = 0;
|
||||
}
|
||||
|
||||
if (nfs4_async_handle_error(task, server, NULL) == -EAGAIN) {
|
||||
rpc_restart_call_prepare(task);
|
||||
return;
|
||||
}
|
||||
|
||||
if (task->tk_status == 0)
|
||||
break;
|
||||
case 0:
|
||||
nfs_post_op_update_inode_force_wcc(data->args.inode,
|
||||
data->res.fattr);
|
||||
break;
|
||||
default:
|
||||
if (nfs4_async_handle_error(task, server, NULL) == -EAGAIN) {
|
||||
rpc_restart_call_prepare(task);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void nfs4_layoutcommit_release(void *calldata)
|
||||
|
Loading…
Reference in New Issue
Block a user