Lines Matching refs:op

61 static void dlm_release_plock_op(struct plock_op *op)
63 kfree(op->data);
64 kfree(op);
67 static void send_op(struct plock_op *op)
69 set_version(&op->info);
70 INIT_LIST_HEAD(&op->list);
72 list_add_tail(&op->list, &send_list);
85 struct plock_op *op;
87 op = kzalloc(sizeof(*op), GFP_NOFS);
88 if (!op)
91 op->info.optype = DLM_PLOCK_OP_UNLOCK;
92 op->info.pid = info->pid;
93 op->info.fsid = info->fsid;
94 op->info.number = info->number;
95 op->info.start = 0;
96 op->info.end = OFFSET_MAX;
97 op->info.owner = info->owner;
99 op->info.flags |= DLM_PLOCK_FL_CLOSE;
100 send_op(op);
108 struct plock_op *op;
115 op = kzalloc(sizeof(*op), GFP_NOFS);
116 if (!op) {
121 op->info.optype = DLM_PLOCK_OP_LOCK;
122 op->info.pid = fl->fl_pid;
123 op->info.ex = (fl->fl_type == F_WRLCK);
124 op->info.wait = IS_SETLKW(cmd);
125 op->info.fsid = ls->ls_global_id;
126 op->info.number = number;
127 op->info.start = fl->fl_start;
128 op->info.end = fl->fl_end;
133 dlm_release_plock_op(op);
140 op->info.owner = (__u64) fl->fl_pid;
147 op->data = op_data;
149 send_op(op);
153 op->info.owner = (__u64)(long) fl->fl_owner;
156 send_op(op);
158 rv = wait_event_killable(recv_wq, (op->done != 0));
161 list_del(&op->list);
165 (unsigned long long)number, op->info.pid);
166 dlm_release_plock_op(op);
167 do_unlock_close(&op->info);
172 if (!list_empty(&op->list)) {
173 log_error(ls, "dlm_posix_lock: op on list %llx",
175 list_del(&op->list);
179 rv = op->info.rv;
187 dlm_release_plock_op(op);
195 static int dlm_plock_callback(struct plock_op *op)
197 struct plock_async_data *op_data = op->data;
205 if (!list_empty(&op->list)) {
206 log_print("dlm_plock_callback: op on list %llx",
207 (unsigned long long)op->info.number);
208 list_del(&op->list);
218 if (op->info.rv) {
219 notify(fl, op->info.rv);
235 (unsigned long long)op->info.number, file, fl);
247 dlm_release_plock_op(op);
255 struct plock_op *op;
263 op = kzalloc(sizeof(*op), GFP_NOFS);
264 if (!op) {
282 op->info.optype = DLM_PLOCK_OP_UNLOCK;
283 op->info.pid = fl->fl_pid;
284 op->info.fsid = ls->ls_global_id;
285 op->info.number = number;
286 op->info.start = fl->fl_start;
287 op->info.end = fl->fl_end;
289 op->info.owner = (__u64) fl->fl_pid;
291 op->info.owner = (__u64)(long) fl->fl_owner;
294 op->info.flags |= DLM_PLOCK_FL_CLOSE;
295 send_op(op);
300 send_op(op);
301 wait_event(recv_wq, (op->done != 0));
304 if (!list_empty(&op->list)) {
305 log_error(ls, "dlm_posix_unlock: op on list %llx",
307 list_del(&op->list);
311 rv = op->info.rv;
317 dlm_release_plock_op(op);
329 struct plock_op *op;
336 op = kzalloc(sizeof(*op), GFP_NOFS);
337 if (!op) {
342 op->info.optype = DLM_PLOCK_OP_GET;
343 op->info.pid = fl->fl_pid;
344 op->info.ex = (fl->fl_type == F_WRLCK);
345 op->info.fsid = ls->ls_global_id;
346 op->info.number = number;
347 op->info.start = fl->fl_start;
348 op->info.end = fl->fl_end;
350 op->info.owner = (__u64) fl->fl_pid;
352 op->info.owner = (__u64)(long) fl->fl_owner;
354 send_op(op);
355 wait_event(recv_wq, (op->done != 0));
358 if (!list_empty(&op->list)) {
359 log_error(ls, "dlm_posix_get: op on list %llx",
361 list_del(&op->list);
368 rv = op->info.rv;
375 fl->fl_type = (op->info.ex) ? F_WRLCK : F_RDLCK;
377 fl->fl_pid = op->info.pid;
378 if (op->info.nodeid != dlm_our_nodeid())
380 fl->fl_start = op->info.start;
381 fl->fl_end = op->info.end;
385 dlm_release_plock_op(op);
397 struct plock_op *op = NULL;
404 op = list_entry(send_list.next, struct plock_op, list);
405 if (op->info.flags & DLM_PLOCK_FL_CLOSE)
406 list_del(&op->list);
408 list_move_tail(&op->list, &recv_list);
409 memcpy(&info, &op->info, sizeof(info));
413 if (!op)
420 if (op->info.flags & DLM_PLOCK_FL_CLOSE)
421 dlm_release_plock_op(op);
433 struct plock_op *op = NULL, *iter;
448 * order, so match all fields to find the op. The results for
450 * to userspace, so match the result with the first non-waiting op.
463 op = iter;
471 op = iter;
477 if (op) {
478 /* Sanity check that op and info match. */
480 WARN_ON(op->info.optype != DLM_PLOCK_OP_LOCK);
482 WARN_ON(op->info.number != info.number ||
483 op->info.owner != info.owner ||
484 op->info.optype != info.optype);
486 list_del_init(&op->list);
487 memcpy(&op->info, &info, sizeof(info));
488 if (op->data)
491 op->done = 1;
495 if (op) {
497 dlm_plock_callback(op);
501 log_print("%s: no op %x %llx", __func__,