dlmrecovery.c (3b3b84a892d37ba336391e411eb5f8b013b9a669) dlmrecovery.c (3156d267016627fe427a6b0d4ed8a9678557e91e)
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * dlmrecovery.c
5 *
6 * recovery stuff
7 *
8 * Copyright (C) 2004 Oracle. All rights reserved.

--- 143 unchanged lines hidden (view full) ---

152/* Worker function used during recovery. */
153void dlm_dispatch_work(void *data)
154{
155 struct dlm_ctxt *dlm = (struct dlm_ctxt *)data;
156 LIST_HEAD(tmp_list);
157 struct list_head *iter, *iter2;
158 struct dlm_work_item *item;
159 dlm_workfunc_t *workfunc;
1/* -*- mode: c; c-basic-offset: 8; -*-
2 * vim: noexpandtab sw=8 ts=8 sts=0:
3 *
4 * dlmrecovery.c
5 *
6 * recovery stuff
7 *
8 * Copyright (C) 2004 Oracle. All rights reserved.

--- 143 unchanged lines hidden (view full) ---

152/* Worker function used during recovery. */
153void dlm_dispatch_work(void *data)
154{
155 struct dlm_ctxt *dlm = (struct dlm_ctxt *)data;
156 LIST_HEAD(tmp_list);
157 struct list_head *iter, *iter2;
158 struct dlm_work_item *item;
159 dlm_workfunc_t *workfunc;
160 int tot=0;
160
161
162 if (!dlm_joined(dlm))
163 return;
164
161 spin_lock(&dlm->work_lock);
162 list_splice_init(&dlm->work_list, &tmp_list);
163 spin_unlock(&dlm->work_lock);
164
165 list_for_each_safe(iter, iter2, &tmp_list) {
165 spin_lock(&dlm->work_lock);
166 list_splice_init(&dlm->work_list, &tmp_list);
167 spin_unlock(&dlm->work_lock);
168
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);
167 workfunc = item->func;
168 list_del_init(&item->list);
169
170 /* already have ref on dlm to avoid having
171 * it disappear. just double-check. */
172 BUG_ON(item->dlm != dlm);
173

--- 672 unchanged lines hidden (view full) ---

846 /* queue up work for dlm_request_all_locks_worker */
847 dlm_grab(dlm); /* get an extra ref for the work item */
848 dlm_init_work_item(dlm, item, dlm_request_all_locks_worker, buf);
849 item->u.ral.reco_master = lr->node_idx;
850 item->u.ral.dead_node = lr->dead_node;
851 spin_lock(&dlm->work_lock);
852 list_add_tail(&item->list, &dlm->work_list);
853 spin_unlock(&dlm->work_lock);
175 item = list_entry(iter, struct dlm_work_item, list);
176 workfunc = item->func;
177 list_del_init(&item->list);
178
179 /* already have ref on dlm to avoid having
180 * it disappear. just double-check. */
181 BUG_ON(item->dlm != dlm);
182

--- 672 unchanged lines hidden (view full) ---

855 /* queue up work for dlm_request_all_locks_worker */
856 dlm_grab(dlm); /* get an extra ref for the work item */
857 dlm_init_work_item(dlm, item, dlm_request_all_locks_worker, buf);
858 item->u.ral.reco_master = lr->node_idx;
859 item->u.ral.dead_node = lr->dead_node;
860 spin_lock(&dlm->work_lock);
861 list_add_tail(&item->list, &dlm->work_list);
862 spin_unlock(&dlm->work_lock);
854 schedule_work(&dlm->dispatched_work);
863 queue_work(dlm->dlm_worker, &dlm->dispatched_work);
855
856 dlm_put(dlm);
857 return 0;
858}
859
860static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data)
861{
862 struct dlm_migratable_lockres *mres;

--- 533 unchanged lines hidden (view full) ---

1396 dlm_grab(dlm); /* get an extra ref for the work item */
1397 memcpy(buf, msg->buf, be16_to_cpu(msg->data_len)); /* copy the whole message */
1398 dlm_init_work_item(dlm, item, dlm_mig_lockres_worker, buf);
1399 item->u.ml.lockres = res; /* already have a ref */
1400 item->u.ml.real_master = real_master;
1401 spin_lock(&dlm->work_lock);
1402 list_add_tail(&item->list, &dlm->work_list);
1403 spin_unlock(&dlm->work_lock);
864
865 dlm_put(dlm);
866 return 0;
867}
868
869static void dlm_request_all_locks_worker(struct dlm_work_item *item, void *data)
870{
871 struct dlm_migratable_lockres *mres;

--- 533 unchanged lines hidden (view full) ---

1405 dlm_grab(dlm); /* get an extra ref for the work item */
1406 memcpy(buf, msg->buf, be16_to_cpu(msg->data_len)); /* copy the whole message */
1407 dlm_init_work_item(dlm, item, dlm_mig_lockres_worker, buf);
1408 item->u.ml.lockres = res; /* already have a ref */
1409 item->u.ml.real_master = real_master;
1410 spin_lock(&dlm->work_lock);
1411 list_add_tail(&item->list, &dlm->work_list);
1412 spin_unlock(&dlm->work_lock);
1404 schedule_work(&dlm->dispatched_work);
1413 queue_work(dlm->dlm_worker, &dlm->dispatched_work);
1405
1406leave:
1407 dlm_put(dlm);
1408 if (ret < 0) {
1409 if (buf)
1410 kfree(buf);
1411 if (item)
1412 kfree(item);

--- 1253 unchanged lines hidden ---
1414
1415leave:
1416 dlm_put(dlm);
1417 if (ret < 0) {
1418 if (buf)
1419 kfree(buf);
1420 if (item)
1421 kfree(item);

--- 1253 unchanged lines hidden ---