staging: lustre: simplify waiting in ptlrpc_invalidate_import()
This waiter currently wakes up every second to re-test if imp_flight is zero. If we ensure wakeup is called whenever imp_flight is decremented to zero, we can just have a simple wait_event_idle_timeout(). So add a wake_up_all to the one place it is missing, and simplify the wait_event. Reviewed-by: James Simmons <jsimmons@infradead.org> Signed-off-by: NeilBrown <neilb@suse.com> Reviewed-by: Patrick Farrell <paf@cray.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
60f51d5974
commit
4796293a7a
|
@ -1588,7 +1588,8 @@ static int ptlrpc_send_new_req(struct ptlrpc_request *req)
|
|||
spin_lock(&imp->imp_lock);
|
||||
if (!list_empty(&req->rq_list)) {
|
||||
list_del_init(&req->rq_list);
|
||||
atomic_dec(&req->rq_import->imp_inflight);
|
||||
if (atomic_dec_and_test(&req->rq_import->imp_inflight))
|
||||
wake_up_all(&req->rq_import->imp_recovery_waitq);
|
||||
}
|
||||
spin_unlock(&imp->imp_lock);
|
||||
ptlrpc_rqphase_move(req, RQ_PHASE_NEW);
|
||||
|
|
|
@ -265,7 +265,6 @@ void ptlrpc_invalidate_import(struct obd_import *imp)
|
|||
{
|
||||
struct list_head *tmp, *n;
|
||||
struct ptlrpc_request *req;
|
||||
struct l_wait_info lwi;
|
||||
unsigned int timeout;
|
||||
int rc;
|
||||
|
||||
|
@ -306,19 +305,15 @@ void ptlrpc_invalidate_import(struct obd_import *imp)
|
|||
* callbacks. Cap it at obd_timeout -- these should all
|
||||
* have been locally cancelled by ptlrpc_abort_inflight.
|
||||
*/
|
||||
lwi = LWI_TIMEOUT_INTERVAL(
|
||||
cfs_timeout_cap(timeout * HZ),
|
||||
(timeout > 1) ? HZ :
|
||||
HZ / 2,
|
||||
NULL, NULL);
|
||||
rc = l_wait_event(imp->imp_recovery_waitq,
|
||||
(atomic_read(&imp->imp_inflight) == 0),
|
||||
&lwi);
|
||||
if (rc) {
|
||||
rc = wait_event_idle_timeout(imp->imp_recovery_waitq,
|
||||
atomic_read(&imp->imp_inflight) == 0,
|
||||
obd_timeout * HZ);
|
||||
|
||||
if (rc == 0) {
|
||||
const char *cli_tgt = obd2cli_tgt(imp->imp_obd);
|
||||
|
||||
CERROR("%s: rc = %d waiting for callback (%d != 0)\n",
|
||||
cli_tgt, rc,
|
||||
CERROR("%s: timeout waiting for callback (%d != 0)\n",
|
||||
cli_tgt,
|
||||
atomic_read(&imp->imp_inflight));
|
||||
|
||||
spin_lock(&imp->imp_lock);
|
||||
|
@ -365,7 +360,7 @@ void ptlrpc_invalidate_import(struct obd_import *imp)
|
|||
}
|
||||
spin_unlock(&imp->imp_lock);
|
||||
}
|
||||
} while (rc != 0);
|
||||
} while (rc == 0);
|
||||
|
||||
/*
|
||||
* Let's additionally check that no new rpcs added to import in
|
||||
|
|
Loading…
Reference in New Issue