diff options
author | David Teigland <teigland@redhat.com> | 2011-04-05 14:16:24 -0400 |
---|---|---|
committer | David Teigland <teigland@redhat.com> | 2011-07-15 13:30:43 -0400 |
commit | 23e8e1aaacb10d9f05e44a93e10ea4ee5b3838a5 (patch) | |
tree | 7c94bc4eeb9dfd85a26869003c56dc45fc6fd697 /fs/dlm/recoverd.c | |
parent | 883ba74f43092823d0ed4c6b21f0171e9b334607 (diff) |
dlm: use workqueue for callbacks
Instead of creating our own kthread (dlm_astd) to deliver
callbacks for all lockspaces, use a per-lockspace workqueue
to deliver the callbacks. This eliminates complications and
slowdowns from many lockspaces sharing the same thread.
Signed-off-by: David Teigland <teigland@redhat.com>
Diffstat (limited to 'fs/dlm/recoverd.c')
-rw-r--r-- | fs/dlm/recoverd.c | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/fs/dlm/recoverd.c b/fs/dlm/recoverd.c index fd677c8c3d3b..774da3cf92c6 100644 --- a/fs/dlm/recoverd.c +++ b/fs/dlm/recoverd.c | |||
@@ -58,13 +58,7 @@ static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) | |||
58 | 58 | ||
59 | mutex_lock(&ls->ls_recoverd_active); | 59 | mutex_lock(&ls->ls_recoverd_active); |
60 | 60 | ||
61 | /* | 61 | dlm_callback_suspend(ls); |
62 | * Suspending and resuming dlm_astd ensures that no lkb's from this ls | ||
63 | * will be processed by dlm_astd during recovery. | ||
64 | */ | ||
65 | |||
66 | dlm_astd_suspend(); | ||
67 | dlm_astd_resume(); | ||
68 | 62 | ||
69 | /* | 63 | /* |
70 | * Free non-master tossed rsb's. Master rsb's are kept on toss | 64 | * Free non-master tossed rsb's. Master rsb's are kept on toss |
@@ -202,6 +196,8 @@ static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) | |||
202 | 196 | ||
203 | dlm_adjust_timeouts(ls); | 197 | dlm_adjust_timeouts(ls); |
204 | 198 | ||
199 | dlm_callback_resume(ls); | ||
200 | |||
205 | error = enable_locking(ls, rv->seq); | 201 | error = enable_locking(ls, rv->seq); |
206 | if (error) { | 202 | if (error) { |
207 | log_debug(ls, "enable_locking failed %d", error); | 203 | log_debug(ls, "enable_locking failed %d", error); |
@@ -222,8 +218,6 @@ static int ls_recover(struct dlm_ls *ls, struct dlm_recover *rv) | |||
222 | 218 | ||
223 | dlm_grant_after_purge(ls); | 219 | dlm_grant_after_purge(ls); |
224 | 220 | ||
225 | dlm_astd_wake(); | ||
226 | |||
227 | log_debug(ls, "recover %llx done: %u ms", | 221 | log_debug(ls, "recover %llx done: %u ms", |
228 | (unsigned long long)rv->seq, | 222 | (unsigned long long)rv->seq, |
229 | jiffies_to_msecs(jiffies - start)); | 223 | jiffies_to_msecs(jiffies - start)); |