diff options
author | Kurt Hackel <kurt.hackel@oracle.com> | 2006-05-01 17:39:29 -0400 |
---|---|---|
committer | Mark Fasheh <mark.fasheh@oracle.com> | 2006-06-26 17:43:18 -0400 |
commit | 3156d267016627fe427a6b0d4ed8a9678557e91e (patch) | |
tree | fec0545da2e9593d1b5a2db4dd0d7360203cee4d /fs/ocfs2/dlm/dlmrecovery.c | |
parent | 495ac96e638cb0ad33baa7113531d742bfb328d4 (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.c | 13 |
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 | ||
1406 | leave: | 1415 | leave: |
1407 | dlm_put(dlm); | 1416 | dlm_put(dlm); |