Whamcloud - gitweb
LU-11098 ptlrpc: ASSERTION(!list_empty(imp->imp_replay_cursor)) 27/32727/2
authorAndriy Skulysh <c17819@cray.com>
Mon, 4 Jun 2018 16:08:29 +0000 (19:08 +0300)
committerOleg Drokin <green@whamcloud.com>
Wed, 18 Jul 2018 06:01:13 +0000 (06:01 +0000)
It's ptlrpc_replay_next() vs close race.
ll_close_inode_openhandle() calls
mdc_free_open()->ptlrpc_request_committed->ptlrpc_free_request

Need to reset imp_replay_cursor while dropping a request from
replay list.

Change-Id: Ia0ce327a729f8cf554b008ab6d32323b5dd26ee7
Cray-bug-id: LUS-2455
Signed-off-by: Andriy Skulysh <c17819@cray.com>
Reviewed-on: https://review.whamcloud.com/32727
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-by: Vladimir Saveliev <c17830@cray.com>
Tested-by: Jenkins
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Mike Pershin <mpershin@whamcloud.com>
Reviewed-by: Oleg Drokin <green@whamcloud.com>
lustre/ptlrpc/client.c

index 047eea7..22c0d6f 100644 (file)
@@ -2672,8 +2672,11 @@ void ptlrpc_request_committed(struct ptlrpc_request *req, int force)
                return;
        }
 
-       if (force || req->rq_transno <= imp->imp_peer_committed_transno)
+       if (force || req->rq_transno <= imp->imp_peer_committed_transno) {
+               if (imp->imp_replay_cursor == &req->rq_replay_list)
+                       imp->imp_replay_cursor = req->rq_replay_list.next;
                ptlrpc_free_request(req);
+       }
 
        spin_unlock(&imp->imp_lock);
 }