|
@@ -8750,18 +8750,27 @@ static void nfs4_layoutreturn_done(struct rpc_task *task, void *calldata)
|
|
|
|
|
|
|
|
server = NFS_SERVER(lrp->args.inode);
|
|
server = NFS_SERVER(lrp->args.inode);
|
|
|
switch (task->tk_status) {
|
|
switch (task->tk_status) {
|
|
|
|
|
+ case -NFS4ERR_OLD_STATEID:
|
|
|
|
|
+ if (nfs4_refresh_layout_stateid(&lrp->args.stateid,
|
|
|
|
|
+ lrp->args.inode))
|
|
|
|
|
+ goto out_restart;
|
|
|
|
|
+ /* Fallthrough */
|
|
|
default:
|
|
default:
|
|
|
task->tk_status = 0;
|
|
task->tk_status = 0;
|
|
|
|
|
+ /* Fallthrough */
|
|
|
case 0:
|
|
case 0:
|
|
|
break;
|
|
break;
|
|
|
case -NFS4ERR_DELAY:
|
|
case -NFS4ERR_DELAY:
|
|
|
if (nfs4_async_handle_error(task, server, NULL, NULL) != -EAGAIN)
|
|
if (nfs4_async_handle_error(task, server, NULL, NULL) != -EAGAIN)
|
|
|
break;
|
|
break;
|
|
|
- nfs4_sequence_free_slot(&lrp->res.seq_res);
|
|
|
|
|
- rpc_restart_call_prepare(task);
|
|
|
|
|
- return;
|
|
|
|
|
|
|
+ goto out_restart;
|
|
|
}
|
|
}
|
|
|
dprintk("<-- %s\n", __func__);
|
|
dprintk("<-- %s\n", __func__);
|
|
|
|
|
+ return;
|
|
|
|
|
+out_restart:
|
|
|
|
|
+ task->tk_status = 0;
|
|
|
|
|
+ nfs4_sequence_free_slot(&lrp->res.seq_res);
|
|
|
|
|
+ rpc_restart_call_prepare(task);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
static void nfs4_layoutreturn_release(void *calldata)
|
|
static void nfs4_layoutreturn_release(void *calldata)
|