]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
Retry operation on EREMOTEIO on an interrupted slot
authorOlga Kornievskaia <kolga@netapp.com>
Fri, 23 Sep 2016 21:24:03 +0000 (17:24 -0400)
committerAnna Schumaker <Anna.Schumaker@Netapp.com>
Thu, 29 Sep 2016 16:31:48 +0000 (12:31 -0400)
If an operation got interrupted, then since we don't know if the
server processed it on not, we keep the seq#. Upon reuse of slot
and seq# if we get reply from the cache (ie EREMOTEIO) then we
need to retry the operation after bumping the seq#

Signed-off-by: Olga Kornievskaia <kolga@netapp.com>
Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
fs/nfs/nfs4proc.c

index 5b2b07bca490d51571da00139f0c8a18f1fd473e..8b30cdf41848a71e7b1eaceee003eb4b31bfdff1 100644 (file)
@@ -755,6 +755,13 @@ static int nfs41_sequence_process(struct rpc_task *task,
        /* Check the SEQUENCE operation status */
        switch (res->sr_status) {
        case 0:
+               /* If previous op on slot was interrupted and we reused
+                * the seq# and got a reply from the cache, then retry
+                */
+               if (task->tk_status == -EREMOTEIO && interrupted) {
+                       ++slot->seq_nr;
+                       goto retry_nowait;
+               }
                /* Update the slot's sequence and clientid lease timer */
                slot->seq_done = 1;
                clp = session->clp;