Whamcloud - gitweb
LU-17605 obdclass: do not wait forever acquiring entry
authorSebastien Buisson <sbuisson@ddn.com>
Mon, 4 Mar 2024 16:26:30 +0000 (17:26 +0100)
committerAndreas Dilger <adilger@whamcloud.com>
Sat, 30 Mar 2024 07:20:57 +0000 (07:20 +0000)
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 <sbuisson@ddn.com>
Change-Id: I50ee59654adc221027c79cb68fa182b9abed50fa
Reviewed-by: Yang Sheng <ys@whamcloud.com>
Reviewed-by: Andreas Dilger <adilger@whamcloud.com>
Reviewed-on: https://review.whamcloud.com/c/ex/lustre-release/+/54551
Tested-by: jenkins <devops@whamcloud.com>
Tested-by: Maloo <maloo@whamcloud.com>
lustre/obdclass/upcall_cache.c

index ab5a495..b52849d 100644 (file)
@@ -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);