Lines Matching refs:res
44 struct dlm_lock_resource *res,
68 * caller needs: res->spinlock
73 static int dlm_can_grant_new_lock(struct dlm_lock_resource *res,
78 list_for_each_entry(tmplock, &res->granted, list) {
83 list_for_each_entry(tmplock, &res->converting, list) {
97 * taken: takes and drops res->spinlock
102 struct dlm_lock_resource *res,
110 spin_lock(&res->spinlock);
113 status = __dlm_lockres_state_to_status(res);
117 spin_unlock(&res->spinlock);
121 __dlm_wait_on_lockres(res);
122 __dlm_lockres_reserve_ast(res);
124 if (dlm_can_grant_new_lock(res, lock)) {
130 list_add_tail(&lock->list, &res->granted);
137 if (!dlm_is_recovery_lock(res->lockname.name,
138 res->lockname.len)) {
151 if (dlm_is_recovery_lock(res->lockname.name,
152 res->lockname.len)) {
160 list_add_tail(&lock->list, &res->blocked);
165 spin_unlock(&res->spinlock);
166 wake_up(&res->wq);
172 dlm_lockres_release_ast(dlm, res);
174 dlm_lockres_calc_usage(dlm, res);
176 dlm_kick_thread(dlm, res);
181 void dlm_revert_pending_lock(struct dlm_lock_resource *res,
193 * taken: takes and drops res->spinlock
198 struct dlm_lock_resource *res,
205 lock->ml.type, res->lockname.len,
206 res->lockname.name, flags);
212 spin_lock(&res->spinlock);
213 __dlm_wait_on_lockres(res);
214 if (res->owner == dlm->node_num) {
215 spin_unlock(&res->spinlock);
218 res->state |= DLM_LOCK_RES_IN_PROGRESS;
222 list_add_tail(&lock->list, &res->blocked);
224 spin_unlock(&res->spinlock);
228 status = dlm_send_remote_lock_request(dlm, res, lock, flags);
230 spin_lock(&res->spinlock);
231 res->state &= ~DLM_LOCK_RES_IN_PROGRESS;
235 dlm_is_recovery_lock(res->lockname.name,
236 res->lockname.len)) {
242 dlm->name, res->owner);
253 dlm_revert_pending_lock(res, lock);
255 } else if (dlm_is_recovery_lock(res->lockname.name,
256 res->lockname.len)) {
263 dlm->name, dlm->node_num, res->owner);
264 list_move_tail(&lock->list, &res->granted);
266 spin_unlock(&res->spinlock);
269 dlm_lockres_calc_usage(dlm, res);
271 wake_up(&res->wq);
278 * caller needs: none, but need res->state & DLM_LOCK_RES_IN_PROGRESS
284 struct dlm_lock_resource *res,
295 create.namelen = res->lockname.len;
297 memcpy(create.name, res->lockname.name, create.namelen);
300 sizeof(create), res->owner, &status);
304 mlog(ML_ERROR, "%s: res %.*s, Stale lockres no longer "
307 create.name, res->owner);
308 dlm_print_one_lock_resource(res);
312 mlog(ML_ERROR, "%s: res %.*s, Error %d send CREATE LOCK to "
314 tmpret, res->owner);
357 struct dlm_lock_resource *res)
359 dlm_lockres_get(res);
360 lock->lockres = res;
366 struct dlm_lock_resource *res;
368 res = lock->lockres;
369 if (res) {
372 dlm_lockres_put(res);
436 * taken: takes and drops res->spinlock
445 struct dlm_lock_resource *res = NULL;
491 res = dlm_lookup_lockres(dlm, name, namelen);
492 if (!res) {
497 spin_lock(&res->spinlock);
498 status = __dlm_lockres_state_to_status(res);
499 spin_unlock(&res->spinlock);
506 dlm_lock_attach_lockres(newlock, res);
508 status = dlmlock_master(dlm, res, newlock, be32_to_cpu(create->flags));
514 if (res)
515 dlm_lockres_put(res);
546 struct dlm_lock_resource *res = NULL;
593 res = lock->lockres;
594 if (!res) {
599 dlm_lockres_get(res);
619 if (res->owner == dlm->node_num)
620 status = dlmconvert_master(dlm, res, lock, flags, mode);
622 status = dlmconvert_remote(dlm, res, lock, flags, mode);
661 res = dlm_get_lock_resource(dlm, name, namelen, flags);
662 if (!res) {
669 mlog(0, "creating lock: lock=%p res=%p\n", lock, res);
671 dlm_lock_attach_lockres(lock, res);
690 if (res->owner == dlm->node_num)
691 status = dlmlock_master(dlm, res, lock, flags);
693 status = dlmlock_remote(dlm, res, lock, flags);
704 dlm_wait_for_node_death(dlm, res->owner,
713 spin_lock(&res->spinlock);
714 dlm_lockres_drop_inflight_ref(dlm, res);
715 spin_unlock(&res->spinlock);
717 dlm_lockres_calc_usage(dlm, res);
718 dlm_kick_thread(dlm, res);
738 if (res)
739 dlm_lockres_put(res);