]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
staging: lustre: ptlrpc: Do not resend req with allow_replay
authorwang di <di.wang@intel.com>
Thu, 27 Oct 2016 22:11:48 +0000 (18:11 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 30 Oct 2016 15:00:11 +0000 (11:00 -0400)
If the request is allowed to be sent during recovery,
and it is not timeout yet, then we do not need to
resend it in the final stage of recovery.

Unnecessary resend will cause the bulk request to resend the
request with different mbit, but same xid, and on the remote
server side, it will drop such request with same xid, so it
will never get the bulk in this case.

Signed-off-by: wang di <di.wang@intel.com>
Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-6780
Reviewed-on: http://review.whamcloud.com/15458
Reviewed-by: Alex Zhuravlev <alexey.zhuravlev@intel.com>
Reviewed-by: Liang Zhen <liang.zhen@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/lustre/lustre/ptlrpc/recover.c

index 405faf0dc9fcbea1c2072df1e02a13ccaf582f0a..aa9653498044a7d765f0160f65b7e8e2463f5982 100644 (file)
@@ -194,7 +194,13 @@ int ptlrpc_resend(struct obd_import *imp)
                LASSERTF((long)req > PAGE_SIZE && req != LP_POISON,
                         "req %p bad\n", req);
                LASSERTF(req->rq_type != LI_POISON, "req %p freed\n", req);
-               if (!ptlrpc_no_resend(req))
+
+               /*
+                * If the request is allowed to be sent during replay and it
+                * is not timeout yet, then it does not need to be resent.
+                */
+               if (!ptlrpc_no_resend(req) &&
+                   (req->rq_timedout || !req->rq_allow_replay))
                        ptlrpc_resend_req(req);
        }
        spin_unlock(&imp->imp_lock);