Whamcloud - gitweb
LU-14119 mdc: set fid2path RPC interruptible 19/41219/2
authorLai Siyao <lai.siyao@whamcloud.com>
Wed, 13 Jan 2021 09:29:50 +0000 (17:29 +0800)
committerLai Siyao <lai.siyao@whamcloud.com>
Wed, 20 Jan 2021 01:55:57 +0000 (09:55 +0800)
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.

Signed-off-by: Lai Siyao <lai.siyao@whamcloud.com>
Change-Id: I82192cb8a8256064ca632cabfe5581b12e86423b

lustre/mdc/mdc_request.c

index 52274be..047d44c 100644 (file)
@@ -2261,6 +2261,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 */