Whamcloud - gitweb
LU-13990 ldlm: ldlm_flock_deadlock() ASSERTION(req != lock) failed 47/40047/4
authorAndriy Skulysh <c17819@cray.com>
Tue, 19 May 2020 12:10:52 +0000 (15:10 +0300)
committerOleg Drokin <green@whamcloud.com>
Thu, 26 Nov 2020 09:26:27 +0000 (09:26 +0000)
A client gets evicted and reconnects, so there can be a window
with 2 exports with flocks from the same client.
In this case during deadlock search from the new export we can go
to the old export and back to the new one.

Failed exports should be excluded from
deadlock search.

Change-Id: I9dec50d4c6694bbbcf13b976b5ebdc29377261ce
HPE-bug-id: LUS-8635
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Reviewed-by: Alexander Boyko <c17825@cray.com>
Reviewed-by: Vitaly Fertman <c17818@cray.com>
Reviewed-on: https://review.whamcloud.com/40047
Reviewed-by: Alexander Boyko <alexander.boyko@hpe.com>
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Vitaly Fertman <vitaly.fertman@hpe.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ldlm/ldlm_flock.c

index 007d00a..92f7aa5 100644 (file)
@@ -173,6 +173,9 @@ static int ldlm_flock_lookup_cb(struct obd_export *exp, void *data)
        struct ldlm_flock_lookup_cb_data *cb_data = data;
        struct ldlm_lock *lock;
 
        struct ldlm_flock_lookup_cb_data *cb_data = data;
        struct ldlm_lock *lock;
 
+       if (exp->exp_failed)
+               return 0;
+
        lock = cfs_hash_lookup(exp->exp_flock_hash, cb_data->bl_owner);
        if (lock == NULL)
                return 0;
        lock = cfs_hash_lookup(exp->exp_flock_hash, cb_data->bl_owner);
        if (lock == NULL)
                return 0;