Whamcloud - gitweb
LU-14119 mdc: set fid2path RPC interruptible 66/43266/2
authorLai Siyao <lai.siyao@whamcloud.com>
Wed, 13 Jan 2021 09:29:50 +0000 (17:29 +0800)
committerOleg Drokin <green@whamcloud.com>
Sun, 16 May 2021 22:07:01 +0000 (22:07 +0000)
Sometimes OI scrub can't fix the inconsistency in FID and name, and
server will return -EINPROGRESS for fid2path request. Upon such
failure, client will keep resending the request. Set such request
to be interruptible to avoid deadlock.

Lustre-change: https://review.whamcloud.com/41219
Lustre-commit: bf475262610671534b1b1a33cebb49d8380b74f7

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I82192cb8a8256064ca632cabfe5581b12e86423b
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Alex Zhuravlev <bzzz@whamcloud.com>
Signed-off-by: Minh Diep <mdiep@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/43266
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/mdc/mdc_request.c

index 9e8e516..5a29a28 100644 (file)
@@ -2215,6 +2215,13 @@ static int mdc_get_info_rpc(struct obd_export *exp,
                              RCL_SERVER, vallen);
         ptlrpc_request_set_replen(req);
 
+       /* if server failed to resolve FID, and OI scrub not able to fix it, it
+        * will return -EINPROGRESS, ptlrpc_queue_wait() will keep retrying,
+        * set request interruptible to avoid deadlock.
+        */
+       if (KEY_IS(KEY_FID2PATH))
+               req->rq_allow_intr = 1;
+
        rc = ptlrpc_queue_wait(req);
        /* -EREMOTE means the get_info result is partial, and it needs to
         * continue on another MDT, see fid2path part in lmv_iocontrol */