Lines Matching +full:send +full:- +full:migration
1 // SPDX-License-Identifier: GPL-2.0-or-later
76 * taken: res->spinlock and lock->spinlock taken and dropped
98 BUG_ON(res->owner != dlm->node_num); in dlmunlock_common()
100 BUG_ON(res->owner == dlm->node_num); in dlmunlock_common()
102 spin_lock(&dlm->ast_lock); in dlmunlock_common()
105 in_use = !list_empty(&lock->ast_list); in dlmunlock_common()
106 spin_unlock(&dlm->ast_lock); in dlmunlock_common()
109 "while waiting for an ast!", res->lockname.len, in dlmunlock_common()
110 res->lockname.name); in dlmunlock_common()
114 spin_lock(&res->spinlock); in dlmunlock_common()
115 if (res->state & DLM_LOCK_RES_IN_PROGRESS) { in dlmunlock_common()
118 spin_unlock(&res->spinlock); in dlmunlock_common()
123 res->state |= DLM_LOCK_RES_IN_PROGRESS; in dlmunlock_common()
125 spin_lock(&lock->spinlock); in dlmunlock_common()
127 if (res->state & DLM_LOCK_RES_RECOVERING) { in dlmunlock_common()
132 if (res->state & DLM_LOCK_RES_MIGRATING) { in dlmunlock_common()
151 memcpy(res->lvb, lksb->lvb, DLM_LVB_LEN); in dlmunlock_common()
153 flags |= LKM_PUT_LVB; /* let the send function in dlmunlock_common()
158 owner = res->owner; in dlmunlock_common()
159 /* drop locks and send message */ in dlmunlock_common()
161 lock->cancel_pending = 1; in dlmunlock_common()
163 lock->unlock_pending = 1; in dlmunlock_common()
164 spin_unlock(&lock->spinlock); in dlmunlock_common()
165 spin_unlock(&res->spinlock); in dlmunlock_common()
168 spin_lock(&res->spinlock); in dlmunlock_common()
169 spin_lock(&lock->spinlock); in dlmunlock_common()
185 dlm->name, res->lockname.len, in dlmunlock_common()
186 res->lockname.name, in dlmunlock_common()
194 lock->cancel_pending = 0; in dlmunlock_common()
196 if (!lock->unlock_pending) in dlmunlock_common()
199 lock->unlock_pending = 0; in dlmunlock_common()
208 list_del_init(&lock->list); in dlmunlock_common()
213 list_add_tail(&lock->list, &res->granted); in dlmunlock_common()
217 master_node ? "" : "non-"); in dlmunlock_common()
218 lock->ml.convert_type = LKM_IVMODE; in dlmunlock_common()
225 res->state &= ~DLM_LOCK_RES_IN_PROGRESS; in dlmunlock_common()
226 if (!dlm_lock_on_list(&res->converting, lock)) in dlmunlock_common()
227 BUG_ON(lock->ml.convert_type != LKM_IVMODE); in dlmunlock_common()
229 BUG_ON(lock->ml.convert_type == LKM_IVMODE); in dlmunlock_common()
230 spin_unlock(&lock->spinlock); in dlmunlock_common()
231 spin_unlock(&res->spinlock); in dlmunlock_common()
232 wake_up(&res->wq); in dlmunlock_common()
235 spin_lock(&res->spinlock); in dlmunlock_common()
242 spin_unlock(&res->spinlock); in dlmunlock_common()
250 dlm_get_lock_cookie_node(be64_to_cpu(lock->ml.cookie)), in dlmunlock_common()
251 dlm_get_lock_cookie_seq(be64_to_cpu(lock->ml.cookie)), in dlmunlock_common()
252 kref_read(&lock->lock_refs)-1); in dlmunlock_common()
260 lksb->flags &= ~(DLM_LKSB_PUT_LVB|DLM_LKSB_GET_LVB); in dlmunlock_common()
270 list_del_init(&lock->list); in dlm_commit_pending_unlock()
276 list_move_tail(&lock->list, &res->granted); in dlm_commit_pending_cancel()
277 lock->ml.convert_type = LKM_IVMODE; in dlm_commit_pending_cancel()
321 mlog(0, "%.*s\n", res->lockname.len, res->lockname.name); in dlm_send_remote_unlock_request()
323 if (owner == dlm->node_num) { in dlm_send_remote_unlock_request()
326 * via a migration. just retry it, now as local */ in dlm_send_remote_unlock_request()
328 "migration, re-evaluate now\n", dlm->name, in dlm_send_remote_unlock_request()
329 res->lockname.len, res->lockname.name); in dlm_send_remote_unlock_request()
334 unlock.node_idx = dlm->node_num; in dlm_send_remote_unlock_request()
336 unlock.cookie = lock->ml.cookie; in dlm_send_remote_unlock_request()
337 unlock.namelen = res->lockname.len; in dlm_send_remote_unlock_request()
338 memcpy(unlock.name, res->lockname.name, unlock.namelen); in dlm_send_remote_unlock_request()
344 /* extra data to send if we are updating lvb */ in dlm_send_remote_unlock_request()
346 vec[1].iov_base = lock->lksb->lvb; in dlm_send_remote_unlock_request()
350 tmpret = o2net_send_message_vec(DLM_UNLOCK_LOCK_MSG, dlm->key, in dlm_send_remote_unlock_request()
355 mlog(0, "master was in-progress. retry\n"); in dlm_send_remote_unlock_request()
359 "node %u\n", tmpret, DLM_UNLOCK_LOCK_MSG, dlm->key, owner); in dlm_send_remote_unlock_request()
384 * taken: takes and drops res->spinlock
393 struct dlm_unlock_lock *unlock = (struct dlm_unlock_lock *)msg->buf; in dlm_unlock_lock_handler()
403 flags = be32_to_cpu(unlock->flags); in dlm_unlock_lock_handler()
416 if (unlock->namelen > DLM_LOCKID_NAME_MAX) { in dlm_unlock_lock_handler()
425 "Domain %s not fully joined!\n", dlm->name); in dlm_unlock_lock_handler()
429 res = dlm_lookup_lockres(dlm, unlock->name, unlock->namelen); in dlm_unlock_lock_handler()
434 mlog(0, "returning DLM_FORWARD -- res no longer exists\n"); in dlm_unlock_lock_handler()
439 queue=&res->granted; in dlm_unlock_lock_handler()
440 spin_lock(&res->spinlock); in dlm_unlock_lock_handler()
441 if (res->state & DLM_LOCK_RES_RECOVERING) { in dlm_unlock_lock_handler()
442 spin_unlock(&res->spinlock); in dlm_unlock_lock_handler()
448 if (res->state & DLM_LOCK_RES_MIGRATING) { in dlm_unlock_lock_handler()
449 spin_unlock(&res->spinlock); in dlm_unlock_lock_handler()
455 if (res->owner != dlm->node_num) { in dlm_unlock_lock_handler()
456 spin_unlock(&res->spinlock); in dlm_unlock_lock_handler()
457 mlog(0, "returning DLM_FORWARD -- not master\n"); in dlm_unlock_lock_handler()
464 if (iter->ml.cookie == unlock->cookie && in dlm_unlock_lock_handler()
465 iter->ml.node == unlock->node_idx) { in dlm_unlock_lock_handler()
473 /* scan granted -> converting -> blocked queues */ in dlm_unlock_lock_handler()
476 spin_unlock(&res->spinlock); in dlm_unlock_lock_handler()
483 lksb = lock->lksb; in dlm_unlock_lock_handler()
485 lock->ml.type != LKM_EXMODE) in dlm_unlock_lock_handler()
490 lksb->flags |= DLM_LKSB_PUT_LVB; in dlm_unlock_lock_handler()
491 memcpy(&lksb->lvb[0], &unlock->lvb[0], DLM_LVB_LEN); in dlm_unlock_lock_handler()
494 /* if this is in-progress, propagate the DLM_FORWARD in dlm_unlock_lock_handler()
501 lksb->flags &= ~DLM_LKSB_PUT_LVB; in dlm_unlock_lock_handler()
510 dlm_get_lock_cookie_node(be64_to_cpu(unlock->cookie)), in dlm_unlock_lock_handler()
511 dlm_get_lock_cookie_seq(be64_to_cpu(unlock->cookie))); in dlm_unlock_lock_handler()
533 if (dlm_lock_on_list(&res->blocked, lock)) { in dlm_get_cancel_actions()
538 } else if (dlm_lock_on_list(&res->converting, lock)) { in dlm_get_cancel_actions()
545 } else if (dlm_lock_on_list(&res->granted, lock)) { in dlm_get_cancel_actions()
566 if (!dlm_lock_on_list(&res->granted, lock)) { in dlm_get_unlock_actions()
607 if (!lksb->lockid || !lksb->lockid->lockres) { in dlmunlock()
612 lock = lksb->lockid; in dlmunlock()
616 res = lock->lockres; in dlmunlock()
624 spin_lock(&res->spinlock); in dlmunlock()
625 is_master = (res->owner == dlm->node_num); in dlmunlock()
626 if (flags & LKM_VALBLK && lock->ml.type != LKM_EXMODE) in dlmunlock()
628 spin_unlock(&res->spinlock); in dlmunlock()
648 * / migration to complete on this resource. I don't in dlmunlock()
658 "migration/in-progress/reconnect\n"); in dlmunlock()
672 wait_event(dlm->ast_wq, in dlmunlock()