aboutsummaryrefslogtreecommitdiffstats
path: root/fs/ocfs2/dlm/dlmrecovery.c
diff options
context:
space:
mode:
authorKurt Hackel <kurt.hackel@oracle.com>2006-05-01 17:39:29 -0400
committerMark Fasheh <mark.fasheh@oracle.com>2006-06-26 17:43:18 -0400
commit3156d267016627fe427a6b0d4ed8a9678557e91e (patch)
treefec0545da2e9593d1b5a2db4dd0d7360203cee4d /fs/ocfs2/dlm/dlmrecovery.c
parent495ac96e638cb0ad33baa7113531d742bfb328d4 (diff)
ocfs2: move dlm work to a private work queue
The work that is done can block for long periods of time and so is not appropriate for keventd. Signed-off-by: Kurt Hackel <kurt.hackel@oracle.com> Signed-off-by: Mark Fasheh <mark.fasheh@oracle.com>
Diffstat (limited to 'fs/ocfs2/dlm/dlmrecovery.c')
-rw-r--r--fs/ocfs2/dlm/dlmrecovery.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/fs/ocfs2/dlm/dlmrecovery.c b/fs/ocfs2/dlm/dlmrecovery.c
index f0549e9f0024..22e6a5b69584 100644
--- a/fs/ocfs2/dlm/dlmrecovery.c
+++ b/fs/ocfs2/dlm/dlmrecovery.c
@@ -157,12 +157,21 @@ void dlm_dispatch_work(void *data)
157 struct list_head *iter, *iter2; 157 struct list_head *iter, *iter2;
158 struct dlm_work_item *item; 158 struct dlm_work_item *item;
159 dlm_workfunc_t *workfunc; 159 dlm_workfunc_t *workfunc;
160 int tot=0;
161
162 if (!dlm_joined(dlm))
163 return;
160 164
161 spin_lock(&dlm->work_lock); 165 spin_lock(&dlm->work_lock);
162 list_splice_init(&dlm->work_list, &tmp_list); 166 list_splice_init(&dlm->work_list, &tmp_list);
163 spin_unlock(&dlm->work_lock); 167 spin_unlock(&dlm->work_lock);
164 168
165 list_for_each_safe(iter, iter2, &tmp_list) { 169 list_for_each_safe(iter, iter2, &tmp_list) {
170 tot++;
171 }
172 mlog(0, "%s: work thread has %d work items\n", dlm->name, tot);
173
174 list_for_each_safe(iter, iter2, &tmp_list) {
166 item = list_entry(iter, struct dlm_work_item, list); 175 item = list_entry(iter, struct dlm_work_item, list);
167 workfunc = item->func; 176 workfunc = item->func;
168 list_del_init(&item->list); 177 list_del_init(&item->list);
@@ -851,7 +860,7 @@ int dlm_request_all_locks_handler(struct o2net_msg *msg, u32 len, void *data)
851 spin_lock(&dlm->work_lock); 860 spin_lock(&dlm->work_lock);
852 list_add_tail(&item->list, &dlm->work_list); 861 list_add_tail(&item->list, &dlm->work_list);
853 spin_unlock(&dlm->work_lock); 862 spin_unlock(&dlm->work_lock);
854 schedule_work(&dlm->dispatched_work); 863 queue_work(dlm->dlm_worker, &dlm->dispatched_work);
855 864
856 dlm_put(dlm); 865 dlm_put(dlm);
857 return 0; 866 return 0;
@@ -1401,7 +1410,7 @@ int dlm_mig_lockres_handler(struct o2net_msg *msg, u32 len, void *data)
1401 spin_lock(&dlm->work_lock); 1410 spin_lock(&dlm->work_lock);
1402 list_add_tail(&item->list, &dlm->work_list); 1411 list_add_tail(&item->list, &dlm->work_list);
1403 spin_unlock(&dlm->work_lock); 1412 spin_unlock(&dlm->work_lock);
1404 schedule_work(&dlm->dispatched_work); 1413 queue_work(dlm->dlm_worker, &dlm->dispatched_work);
1405 1414
1406leave: 1415leave:
1407 dlm_put(dlm); 1416 dlm_put(dlm);