From: Sebastien Buisson Date: Mon, 4 Mar 2024 16:26:30 +0000 (+0100) Subject: LU-17605 obdclass: do not wait forever acquiring entry X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=ca111307975cbb4f605be6781fa3466e5163a1be;p=fs%2Flustre-release.git LU-17605 obdclass: do not wait forever acquiring entry The process of refreshing an entry via refresh_entry() goes through an upcall/downcall. If the upcall succeeds, we enter a wait queue. If after that the downcall is never called, we hit the expiry timeout, and we get removed from the wait queue. But if the entry is not new, the expiry time will be MAX_SCHEDULE_TIMEOUT == LONG_MAX, which means an infinite wait. So avoid waiting forever if an entry could not be refreshed, and call wake_up_all() if the wait for the ACQUIRING state failed. Lustre-change: https://review.whamcloud.com/54269 Lustre-commit: d3157bc43390b56e2de2c7251802a67ccebe4952 Signed-off-by: Sebastien Buisson Change-Id: I50ee59654adc221027c79cb68fa182b9abed50fa Reviewed-by: Yang Sheng Reviewed-by: Andreas Dilger Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/54551 Tested-by: jenkins Tested-by: Maloo --- diff --git a/lustre/obdclass/upcall_cache.c b/lustre/obdclass/upcall_cache.c index ab5a4956..b52849d 100644 --- a/lustre/obdclass/upcall_cache.c +++ b/lustre/obdclass/upcall_cache.c @@ -274,6 +274,7 @@ find_with_lock: entry->ue_key, rc); goto find_again; } + wake_up_all(&entry->ue_waitq); CERROR("%s: acquire for key %lld after %llu: rc = %d\n", cache->uc_name, entry->ue_key, cache->uc_acquire_expire, rc);