Lines Matching defs:lkb

39 int dlm_enqueue_lkb_callback(struct dlm_lkb *lkb, uint32_t flags, int mode,
42 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
51 if (lkb->lkb_last_cast) {
52 if (dlm_modes_compat(mode, lkb->lkb_last_cast->mode)) {
54 lkb->lkb_id, mode,
55 lkb->lkb_last_cast->mode);
66 if (lkb->lkb_last_cb && lkb->lkb_last_cb->flags & DLM_CB_BAST) {
67 prev_mode = lkb->lkb_last_cb->mode;
72 lkb->lkb_id, mode, prev_mode);
89 if (!test_and_set_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags))
92 list_add_tail(&cb->list, &lkb->lkb_callbacks);
95 dlm_callback_set_last_ptr(&lkb->lkb_last_cast, cb);
97 dlm_callback_set_last_ptr(&lkb->lkb_last_cb, cb);
103 int dlm_dequeue_lkb_callback(struct dlm_lkb *lkb, struct dlm_callback **cb)
106 *cb = list_first_entry_or_null(&lkb->lkb_callbacks,
113 if (list_empty(&lkb->lkb_callbacks))
119 void dlm_add_cb(struct dlm_lkb *lkb, uint32_t flags, int mode, int status,
122 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
125 if (test_bit(DLM_DFL_USER_BIT, &lkb->lkb_dflags)) {
126 dlm_user_add_ast(lkb, flags, mode, status, sbflags);
130 spin_lock(&lkb->lkb_cb_lock);
131 rv = dlm_enqueue_lkb_callback(lkb, flags, mode, status, sbflags);
134 kref_get(&lkb->lkb_ref);
138 list_add(&lkb->lkb_cb_list, &ls->ls_cb_delay);
140 queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);
153 spin_unlock(&lkb->lkb_cb_lock);
158 struct dlm_lkb *lkb = container_of(work, struct dlm_lkb, lkb_cb_work);
159 struct dlm_ls *ls = lkb->lkb_resource->res_ls;
165 spin_lock(&lkb->lkb_cb_lock);
166 rv = dlm_dequeue_lkb_callback(lkb, &cb);
168 clear_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags);
169 spin_unlock(&lkb->lkb_cb_lock);
172 spin_unlock(&lkb->lkb_cb_lock);
175 castfn = lkb->lkb_astfn;
176 bastfn = lkb->lkb_bastfn;
179 trace_dlm_bast(ls, lkb, cb->mode);
180 lkb->lkb_last_bast_time = ktime_get();
181 lkb->lkb_last_bast_mode = cb->mode;
182 bastfn(lkb->lkb_astparam, cb->mode);
184 lkb->lkb_lksb->sb_status = cb->sb_status;
185 lkb->lkb_lksb->sb_flags = cb->sb_flags;
186 trace_dlm_ast(ls, lkb);
187 lkb->lkb_last_cast_time = ktime_get();
188 castfn(lkb->lkb_astparam);
193 spin_lock(&lkb->lkb_cb_lock);
194 rv = dlm_dequeue_lkb_callback(lkb, &cb);
196 clear_bit(DLM_IFL_CB_PENDING_BIT, &lkb->lkb_iflags);
197 spin_unlock(&lkb->lkb_cb_lock);
200 spin_unlock(&lkb->lkb_cb_lock);
204 /* undo kref_get from dlm_add_callback, may cause lkb to be freed */
205 dlm_put_lkb(lkb);
240 struct dlm_lkb *lkb, *safe;
249 list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) {
250 list_del_init(&lkb->lkb_cb_list);
251 queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work);