Lines Matching refs:lkb

20 static void dlm_dump_lkb_callbacks(struct dlm_lkb *lkb)
25 lkb->lkb_id,
26 (unsigned long long)lkb->lkb_last_bast.seq,
27 lkb->lkb_last_bast.flags,
28 lkb->lkb_last_bast.mode,
29 lkb->lkb_last_bast.sb_status,
30 lkb->lkb_last_bast.sb_flags);
33 lkb->lkb_id,
34 (unsigned long long)lkb->lkb_last_cast.seq,
35 lkb->lkb_last_cast.flags,
36 lkb->lkb_last_cast.mode,
37 lkb->lkb_last_cast.sb_status,
38 lkb->lkb_last_cast.sb_flags);
42 lkb->lkb_id,
43 (unsigned long long)lkb->lkb_callbacks[i].seq,
44 lkb->lkb_callbacks[i].flags,
45 lkb->lkb_callbacks[i].mode,
46 lkb->lkb_callbacks[i].sb_status,
47 lkb->lkb_callbacks[i].sb_flags);
51 int dlm_add_lkb_callback(struct dlm_lkb *lkb, uint32_t flags, int mode,
54 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
60 if (lkb->lkb_callbacks[i].seq)
71 (lkb->lkb_callbacks[i-1].flags & DLM_CB_BAST)) {
73 prev_seq = lkb->lkb_callbacks[i-1].seq;
74 prev_mode = lkb->lkb_callbacks[i-1].mode;
81 lkb->lkb_id,
91 lkb->lkb_callbacks[i].seq = seq;
92 lkb->lkb_callbacks[i].flags = flags;
93 lkb->lkb_callbacks[i].mode = mode;
94 lkb->lkb_callbacks[i].sb_status = status;
95 lkb->lkb_callbacks[i].sb_flags = (sbflags & 0x000000FF);
102 lkb->lkb_id, (unsigned long long)seq,
104 dlm_dump_lkb_callbacks(lkb);
112 int dlm_rem_lkb_callback(struct dlm_ls *ls, struct dlm_lkb *lkb,
119 if (!lkb->lkb_callbacks[0].seq) {
126 memcpy(cb, &lkb->lkb_callbacks[0], sizeof(struct dlm_callback));
127 memset(&lkb->lkb_callbacks[0], 0, sizeof(struct dlm_callback));
132 if (!lkb->lkb_callbacks[i].seq)
134 memcpy(&lkb->lkb_callbacks[i-1], &lkb->lkb_callbacks[i],
136 memset(&lkb->lkb_callbacks[i], 0, sizeof(struct dlm_callback));
143 if ((cb->flags & DLM_CB_BAST) && lkb->lkb_last_cast.seq) {
144 if (dlm_modes_compat(cb->mode, lkb->lkb_last_cast.mode)) {
149 lkb->lkb_id,
152 (unsigned long long)lkb->lkb_last_cast.seq,
153 lkb->lkb_last_cast.mode);
160 memcpy(&lkb->lkb_last_cast, cb, sizeof(struct dlm_callback));
161 lkb->lkb_last_cast_time = ktime_get();
165 memcpy(&lkb->lkb_last_bast, cb, sizeof(struct dlm_callback));
166 lkb->lkb_last_bast_time = ktime_get();
173 void dlm_add_cb(struct dlm_lkb *lkb, uint32_t flags, int mode, int status,
176 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
186 if (lkb->lkb_flags & DLM_IFL_USER) {
187 dlm_user_add_ast(lkb, flags, mode, status, sbflags, new_seq);
191 mutex_lock(&lkb->lkb_cb_mutex);
192 prev_seq = lkb->lkb_callbacks[0].seq;
194 rv = dlm_add_lkb_callback(lkb, flags, mode, status, sbflags, new_seq);
199 kref_get(&lkb->lkb_ref);
203 list_add(&lkb->lkb_cb_list, &ls->ls_cb_delay);
205 queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);
210 mutex_unlock(&lkb->lkb_cb_mutex);
215 struct dlm_lkb *lkb = container_of(work, struct dlm_lkb, lkb_cb_work);
216 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
224 mutex_lock(&lkb->lkb_cb_mutex);
225 if (!lkb->lkb_callbacks[0].seq) {
227 log_error(ls, "dlm_callback_work %x no work", lkb->lkb_id);
228 dlm_print_lkb(lkb);
229 dlm_dump_lkb_callbacks(lkb);
233 rv = dlm_rem_lkb_callback(ls, lkb, &callbacks[i], &resid);
240 log_error(ls, "dlm_callback_work %x resid %d", lkb->lkb_id,
242 dlm_print_lkb(lkb);
243 dlm_dump_lkb_callbacks(lkb);
245 mutex_unlock(&lkb->lkb_cb_mutex);
247 castfn = lkb->lkb_astfn;
248 bastfn = lkb->lkb_bastfn;
256 bastfn(lkb->lkb_astparam, callbacks[i].mode);
258 lkb->lkb_lksb->sb_status = callbacks[i].sb_status;
259 lkb->lkb_lksb->sb_flags = callbacks[i].sb_flags;
260 castfn(lkb->lkb_astparam);
264 /* undo kref_get from dlm_add_callback, may cause lkb to be freed */
265 dlm_put_lkb(lkb);
299 struct dlm_lkb *lkb, *safe;
309 list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) {
310 list_del_init(&lkb->lkb_cb_list);
311 queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);