Whamcloud - gitweb
LU-14355 ptlrpc: do not output error when imp_sec is freed 10/41310/2
authorSebastien Buisson <sbuisson@ddn.com>
Mon, 25 Jan 2021 08:24:19 +0000 (17:24 +0900)
committerOleg Drokin <green@whamcloud.com>
Mon, 8 Feb 2021 21:56:08 +0000 (21:56 +0000)
There is a race condition on client reconnect when the import is being
destroyed.  Some outstanding client bound requests are being processed
when the imp_sec has already been freed.
Ensure to output the error message in import_sec_validate_get() only
if import is not already in the zombie work queue.

Fixes: 135fea8fa9 ("LU-4423 obdclass: use workqueue for zombie management")
Signed-off-by: Sebastien Buisson <sbuisson@ddn.com>
Change-Id: I4b431128e04f11b1e3ee7de47090af87538c3558
Reviewed-on: https://review.whamcloud.com/41310
Tested-by: jenkins <devops@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
Reviewed-by: John L. Hammond <jhammond@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ptlrpc/sec.c

index 093a1a3..27da5c8 100644 (file)
@@ -405,8 +405,11 @@ static int import_sec_validate_get(struct obd_import *imp,
 
        *sec = sptlrpc_import_sec_ref(imp);
        if (*sec == NULL) {
-               CERROR("import %p (%s) with no sec\n",
-                       imp, ptlrpc_import_state_name(imp->imp_state));
+               /* Only output an error when the import is still active */
+               if (!test_bit(WORK_STRUCT_PENDING_BIT,
+                             work_data_bits(&imp->imp_zombie_work)))
+                       CERROR("import %p (%s) with no sec\n",
+                              imp, ptlrpc_import_state_name(imp->imp_state));
                return -EACCES;
        }