From 19b76b289d756d944d64de346c533517e32a1295 Mon Sep 17 00:00:00 2001 From: shadow Date: Fri, 15 Jun 2007 14:11:34 +0000 Subject: [PATCH] imp_lock should be held while iterating over imp_sending_list for prevent destroy request after get timeout in ptlrpc_queue_wait. b=11674 i=green i=wangdi --- lustre/ChangeLog | 6 ++++++ lustre/ptlrpc/recover.c | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lustre/ChangeLog b/lustre/ChangeLog index b4f5bba..50f6155 100644 --- a/lustre/ChangeLog +++ b/lustre/ChangeLog @@ -298,6 +298,12 @@ Details : brw_stats were being printed as log2 but all of them were not recorded as log2. Also remove some code duplication arising from filter_tally_{read,write}. +Severity : normal +Bugzilla : 11674 +Frequency : rare, only in recovery. +Description: ASSERTION(req->rq_type != LI_POISON) failed +Details : imp_lock should be held while iterating over imp_sending_list for + prevent destroy request after get timeout in ptlrpc_queue_wait. -------------------------------------------------------------------------------- diff --git a/lustre/ptlrpc/recover.c b/lustre/ptlrpc/recover.c index 94c0d78..cc9448c 100644 --- a/lustre/ptlrpc/recover.c +++ b/lustre/ptlrpc/recover.c @@ -150,7 +150,6 @@ int ptlrpc_resend(struct obd_import *imp) spin_unlock(&imp->imp_lock); RETURN(-1); } - spin_unlock(&imp->imp_lock); list_for_each_entry_safe(req, next, &imp->imp_sending_list, rq_list) { LASSERTF((long)req > CFS_PAGE_SIZE && req != LP_POISON, @@ -159,6 +158,7 @@ int ptlrpc_resend(struct obd_import *imp) if (!req->rq_no_resend) ptlrpc_resend_req(req); } + spin_unlock(&imp->imp_lock); RETURN(0); } -- 1.8.3.1