From f7bb44126a50fd17ceba9b8dd9468eb55d424335 Mon Sep 17 00:00:00 2001 From: zhanghc Date: Sun, 30 Nov 2008 16:12:46 +0000 Subject: [PATCH] branch=b1_6 b=17031 during refreshing locks waiting its I/O to complete, take current service time into account, not only using the timeout gotten by ldlm_get_enqueue_timeout i=Andreas i=Nathan.Rutman --- lustre/ldlm/ldlm_lockd.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/lustre/ldlm/ldlm_lockd.c b/lustre/ldlm/ldlm_lockd.c index ef6c4a0..1386afe 100644 --- a/lustre/ldlm/ldlm_lockd.c +++ b/lustre/ldlm/ldlm_lockd.c @@ -285,7 +285,8 @@ static void waiting_locks_callback(unsigned long unused) LDLM_LOCK_GET(lock); spin_unlock_bh(&waiting_locks_spinlock); LDLM_DEBUG(lock, "prolong the busy lock"); - ldlm_refresh_waiting_lock(lock); + ldlm_refresh_waiting_lock(lock, + ldlm_get_enq_timeout(lock)); spin_lock_bh(&waiting_locks_spinlock); if (!cont) { @@ -362,7 +363,7 @@ static void waiting_locks_callback(unsigned long unused) * * Called with the namespace lock held. */ -static int __ldlm_add_waiting_lock(struct ldlm_lock *lock) +static int __ldlm_add_waiting_lock(struct ldlm_lock *lock, int seconds) { cfs_time_t timeout; cfs_time_t timeout_rounded; @@ -372,11 +373,9 @@ static int __ldlm_add_waiting_lock(struct ldlm_lock *lock) if (OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_HPREQ_NOTIMEOUT) || OBD_FAIL_CHECK(OBD_FAIL_PTLRPC_HPREQ_TIMEOUT)) - timeout = 2; - else - timeout = ldlm_get_enq_timeout(lock); + seconds = 2; - timeout = cfs_time_shift(timeout); + timeout = cfs_time_shift(seconds); if (likely(cfs_time_after(timeout, lock->l_callback_timeout))) lock->l_callback_timeout = timeout; @@ -411,7 +410,7 @@ static int ldlm_add_waiting_lock(struct ldlm_lock *lock) return 0; } - ret = __ldlm_add_waiting_lock(lock); + ret = __ldlm_add_waiting_lock(lock, ldlm_get_enq_timeout(lock)); if (ret) /* grab ref on the lock if it has been added to the * waiting list */ @@ -485,7 +484,7 @@ int ldlm_del_waiting_lock(struct ldlm_lock *lock) * * Called with namespace lock held. */ -int ldlm_refresh_waiting_lock(struct ldlm_lock *lock) +int ldlm_refresh_waiting_lock(struct ldlm_lock *lock, int timeout) { if (lock->l_export == NULL) { /* We don't have a "waiting locks list" on clients. */ @@ -504,7 +503,7 @@ int ldlm_refresh_waiting_lock(struct ldlm_lock *lock) /* we remove/add the lock to the waiting list, so no needs to * release/take a lock reference */ __ldlm_del_waiting_lock(lock); - __ldlm_add_waiting_lock(lock); + __ldlm_add_waiting_lock(lock, timeout); spin_unlock_bh(&waiting_locks_spinlock); LDLM_DEBUG(lock, "refreshed"); @@ -523,7 +522,7 @@ int ldlm_del_waiting_lock(struct ldlm_lock *lock) RETURN(0); } -int ldlm_refresh_waiting_lock(struct ldlm_lock *lock) +int ldlm_refresh_waiting_lock(struct ldlm_lock *lock, int timeout) { RETURN(0); } -- 1.8.3.1