X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Fldlm%2Fldlm_lockd.c;h=82c37cfcb9104d6ba6a40b5f9dada34b4a120edd;hb=cf45b9d3ec9aa0872d3654a72f1b5cc9c5fff373;hp=d6e9757d8ed8e51a1c1b8eef41c24167d706dc32;hpb=653dc8768a885cc8132cb4b79d7cd55fe4696acc;p=fs%2Flustre-release.git diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index d6e9757..82c37cf 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -809,11 +809,6 @@ int ldlm_server_completion_ast(struct ldlm_lock *lock, int flags, void *data) total_enqueue_wait = cfs_time_sub(cfs_time_current_sec(), lock->l_last_activity); - if (total_enqueue_wait > obd_timeout) - /* non-fatal with AT - change to LDLM_DEBUG? */ - LDLM_WARN(lock, "enqueue wait took %lus from "CFS_TIME_T, - total_enqueue_wait, lock->l_last_activity); - req = ptlrpc_request_alloc(lock->l_export->exp_imp_reverse, &RQF_LDLM_CP_CALLBACK); if (req == NULL) @@ -854,8 +849,18 @@ int ldlm_server_completion_ast(struct ldlm_lock *lock, int flags, void *data) /* Server-side enqueue wait time estimate, used in __ldlm_add_waiting_lock to set future enqueue timers */ - at_add(&lock->l_resource->lr_namespace->ns_at_estimate, - total_enqueue_wait); + if (total_enqueue_wait < ldlm_get_enq_timeout(lock)) + at_add(&lock->l_resource->lr_namespace->ns_at_estimate, + total_enqueue_wait); + else + /* bz18618. Don't add lock enqueue time we spend waiting for a + previous callback to fail. Locks waiting legitimately will + get extended by ldlm_refresh_waiting_lock regardless of the + estimate, so it's okay to underestimate here. */ + LDLM_DEBUG(lock, "lock completed after %lus; estimate was %ds. " + "It is likely that a previous callback timed out.", + total_enqueue_wait, + at_get(&lock->l_resource->lr_namespace->ns_at_estimate)); ptlrpc_request_set_replen(req);