lkb 20 fs/dlm/ast.c static void dlm_dump_lkb_callbacks(struct dlm_lkb *lkb) lkb 25 fs/dlm/ast.c lkb->lkb_id, lkb 26 fs/dlm/ast.c (unsigned long long)lkb->lkb_last_bast.seq, lkb 27 fs/dlm/ast.c lkb->lkb_last_bast.flags, lkb 28 fs/dlm/ast.c lkb->lkb_last_bast.mode, lkb 29 fs/dlm/ast.c lkb->lkb_last_bast.sb_status, lkb 30 fs/dlm/ast.c lkb->lkb_last_bast.sb_flags); lkb 33 fs/dlm/ast.c lkb->lkb_id, lkb 34 fs/dlm/ast.c (unsigned long long)lkb->lkb_last_cast.seq, lkb 35 fs/dlm/ast.c lkb->lkb_last_cast.flags, lkb 36 fs/dlm/ast.c lkb->lkb_last_cast.mode, lkb 37 fs/dlm/ast.c lkb->lkb_last_cast.sb_status, lkb 38 fs/dlm/ast.c lkb->lkb_last_cast.sb_flags); lkb 42 fs/dlm/ast.c lkb->lkb_id, lkb 43 fs/dlm/ast.c (unsigned long long)lkb->lkb_callbacks[i].seq, lkb 44 fs/dlm/ast.c lkb->lkb_callbacks[i].flags, lkb 45 fs/dlm/ast.c lkb->lkb_callbacks[i].mode, lkb 46 fs/dlm/ast.c lkb->lkb_callbacks[i].sb_status, lkb 47 fs/dlm/ast.c lkb->lkb_callbacks[i].sb_flags); lkb 51 fs/dlm/ast.c int dlm_add_lkb_callback(struct dlm_lkb *lkb, uint32_t flags, int mode, lkb 54 fs/dlm/ast.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 60 fs/dlm/ast.c if (lkb->lkb_callbacks[i].seq) lkb 71 fs/dlm/ast.c (lkb->lkb_callbacks[i-1].flags & DLM_CB_BAST)) { lkb 73 fs/dlm/ast.c prev_seq = lkb->lkb_callbacks[i-1].seq; lkb 74 fs/dlm/ast.c prev_mode = lkb->lkb_callbacks[i-1].mode; lkb 81 fs/dlm/ast.c lkb->lkb_id, lkb 91 fs/dlm/ast.c lkb->lkb_callbacks[i].seq = seq; lkb 92 fs/dlm/ast.c lkb->lkb_callbacks[i].flags = flags; lkb 93 fs/dlm/ast.c lkb->lkb_callbacks[i].mode = mode; lkb 94 fs/dlm/ast.c lkb->lkb_callbacks[i].sb_status = status; lkb 95 fs/dlm/ast.c lkb->lkb_callbacks[i].sb_flags = (sbflags & 0x000000FF); lkb 102 fs/dlm/ast.c lkb->lkb_id, (unsigned long long)seq, lkb 104 fs/dlm/ast.c dlm_dump_lkb_callbacks(lkb); lkb 112 fs/dlm/ast.c int dlm_rem_lkb_callback(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 119 fs/dlm/ast.c if (!lkb->lkb_callbacks[0].seq) { lkb 126 fs/dlm/ast.c memcpy(cb, &lkb->lkb_callbacks[0], sizeof(struct dlm_callback)); lkb 127 fs/dlm/ast.c memset(&lkb->lkb_callbacks[0], 0, sizeof(struct dlm_callback)); lkb 132 fs/dlm/ast.c if (!lkb->lkb_callbacks[i].seq) lkb 134 fs/dlm/ast.c memcpy(&lkb->lkb_callbacks[i-1], &lkb->lkb_callbacks[i], lkb 136 fs/dlm/ast.c memset(&lkb->lkb_callbacks[i], 0, sizeof(struct dlm_callback)); lkb 143 fs/dlm/ast.c if ((cb->flags & DLM_CB_BAST) && lkb->lkb_last_cast.seq) { lkb 144 fs/dlm/ast.c if (dlm_modes_compat(cb->mode, lkb->lkb_last_cast.mode)) { lkb 149 fs/dlm/ast.c lkb->lkb_id, lkb 152 fs/dlm/ast.c (unsigned long long)lkb->lkb_last_cast.seq, lkb 153 fs/dlm/ast.c lkb->lkb_last_cast.mode); lkb 160 fs/dlm/ast.c memcpy(&lkb->lkb_last_cast, cb, sizeof(struct dlm_callback)); lkb 161 fs/dlm/ast.c lkb->lkb_last_cast_time = ktime_get(); lkb 165 fs/dlm/ast.c memcpy(&lkb->lkb_last_bast, cb, sizeof(struct dlm_callback)); lkb 166 fs/dlm/ast.c lkb->lkb_last_bast_time = ktime_get(); lkb 173 fs/dlm/ast.c void dlm_add_cb(struct dlm_lkb *lkb, uint32_t flags, int mode, int status, lkb 176 fs/dlm/ast.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 186 fs/dlm/ast.c if (lkb->lkb_flags & DLM_IFL_USER) { lkb 187 fs/dlm/ast.c dlm_user_add_ast(lkb, flags, mode, status, sbflags, new_seq); lkb 191 fs/dlm/ast.c mutex_lock(&lkb->lkb_cb_mutex); lkb 192 fs/dlm/ast.c prev_seq = lkb->lkb_callbacks[0].seq; lkb 194 fs/dlm/ast.c rv = dlm_add_lkb_callback(lkb, flags, mode, status, sbflags, new_seq); lkb 199 fs/dlm/ast.c kref_get(&lkb->lkb_ref); lkb 203 fs/dlm/ast.c list_add(&lkb->lkb_cb_list, &ls->ls_cb_delay); lkb 206 fs/dlm/ast.c queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work); lkb 210 fs/dlm/ast.c mutex_unlock(&lkb->lkb_cb_mutex); lkb 215 fs/dlm/ast.c struct dlm_lkb *lkb = container_of(work, struct dlm_lkb, lkb_cb_work); lkb 216 fs/dlm/ast.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 224 fs/dlm/ast.c mutex_lock(&lkb->lkb_cb_mutex); lkb 225 fs/dlm/ast.c if (!lkb->lkb_callbacks[0].seq) { lkb 227 fs/dlm/ast.c log_error(ls, "dlm_callback_work %x no work", lkb->lkb_id); lkb 228 fs/dlm/ast.c dlm_print_lkb(lkb); lkb 229 fs/dlm/ast.c dlm_dump_lkb_callbacks(lkb); lkb 233 fs/dlm/ast.c rv = dlm_rem_lkb_callback(ls, lkb, &callbacks[i], &resid); lkb 240 fs/dlm/ast.c log_error(ls, "dlm_callback_work %x resid %d", lkb->lkb_id, lkb 242 fs/dlm/ast.c dlm_print_lkb(lkb); lkb 243 fs/dlm/ast.c dlm_dump_lkb_callbacks(lkb); lkb 245 fs/dlm/ast.c mutex_unlock(&lkb->lkb_cb_mutex); lkb 247 fs/dlm/ast.c castfn = lkb->lkb_astfn; lkb 248 fs/dlm/ast.c bastfn = lkb->lkb_bastfn; lkb 256 fs/dlm/ast.c bastfn(lkb->lkb_astparam, callbacks[i].mode); lkb 258 fs/dlm/ast.c lkb->lkb_lksb->sb_status = callbacks[i].sb_status; lkb 259 fs/dlm/ast.c lkb->lkb_lksb->sb_flags = callbacks[i].sb_flags; lkb 260 fs/dlm/ast.c castfn(lkb->lkb_astparam); lkb 265 fs/dlm/ast.c dlm_put_lkb(lkb); lkb 297 fs/dlm/ast.c struct dlm_lkb *lkb, *safe; lkb 307 fs/dlm/ast.c list_for_each_entry_safe(lkb, safe, &ls->ls_cb_delay, lkb_cb_list) { lkb 308 fs/dlm/ast.c list_del_init(&lkb->lkb_cb_list); lkb 309 fs/dlm/ast.c queue_work(ls->ls_callback_wq, &lkb->lkb_cb_work); lkb 14 fs/dlm/ast.h void dlm_del_ast(struct dlm_lkb *lkb); lkb 15 fs/dlm/ast.h int dlm_add_lkb_callback(struct dlm_lkb *lkb, uint32_t flags, int mode, lkb 17 fs/dlm/ast.h int dlm_rem_lkb_callback(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 19 fs/dlm/ast.h void dlm_add_cb(struct dlm_lkb *lkb, uint32_t flags, int mode, int status, lkb 49 fs/dlm/debug_fs.c static void print_format1_lock(struct seq_file *s, struct dlm_lkb *lkb, lkb 52 fs/dlm/debug_fs.c seq_printf(s, "%08x %s", lkb->lkb_id, print_lockmode(lkb->lkb_grmode)); lkb 54 fs/dlm/debug_fs.c if (lkb->lkb_status == DLM_LKSTS_CONVERT || lkb 55 fs/dlm/debug_fs.c lkb->lkb_status == DLM_LKSTS_WAITING) lkb 56 fs/dlm/debug_fs.c seq_printf(s, " (%s)", print_lockmode(lkb->lkb_rqmode)); lkb 58 fs/dlm/debug_fs.c if (lkb->lkb_nodeid) { lkb 59 fs/dlm/debug_fs.c if (lkb->lkb_nodeid != res->res_nodeid) lkb 60 fs/dlm/debug_fs.c seq_printf(s, " Remote: %3d %08x", lkb->lkb_nodeid, lkb 61 fs/dlm/debug_fs.c lkb->lkb_remid); lkb 63 fs/dlm/debug_fs.c seq_printf(s, " Master: %08x", lkb->lkb_remid); lkb 66 fs/dlm/debug_fs.c if (lkb->lkb_wait_type) lkb 67 fs/dlm/debug_fs.c seq_printf(s, " wait_type: %d", lkb->lkb_wait_type); lkb 74 fs/dlm/debug_fs.c struct dlm_lkb *lkb; lkb 128 fs/dlm/debug_fs.c list_for_each_entry(lkb, &res->res_grantqueue, lkb_statequeue) { lkb 129 fs/dlm/debug_fs.c print_format1_lock(s, lkb, res); lkb 135 fs/dlm/debug_fs.c list_for_each_entry(lkb, &res->res_convertqueue, lkb_statequeue) { lkb 136 fs/dlm/debug_fs.c print_format1_lock(s, lkb, res); lkb 142 fs/dlm/debug_fs.c list_for_each_entry(lkb, &res->res_waitqueue, lkb_statequeue) { lkb 143 fs/dlm/debug_fs.c print_format1_lock(s, lkb, res); lkb 152 fs/dlm/debug_fs.c list_for_each_entry(lkb, &res->res_lookup, lkb_rsb_lookup) { lkb 154 fs/dlm/debug_fs.c lkb->lkb_id, print_lockmode(lkb->lkb_rqmode)); lkb 155 fs/dlm/debug_fs.c if (lkb->lkb_wait_type) lkb 156 fs/dlm/debug_fs.c seq_printf(s, " wait_type: %d", lkb->lkb_wait_type); lkb 165 fs/dlm/debug_fs.c static void print_format2_lock(struct seq_file *s, struct dlm_lkb *lkb, lkb 171 fs/dlm/debug_fs.c if (lkb->lkb_flags & DLM_IFL_USER) { lkb 172 fs/dlm/debug_fs.c if (lkb->lkb_ua) lkb 173 fs/dlm/debug_fs.c xid = lkb->lkb_ua->xid; lkb 177 fs/dlm/debug_fs.c us = ktime_to_us(ktime_sub(ktime_get(), lkb->lkb_timestamp)); lkb 183 fs/dlm/debug_fs.c lkb->lkb_id, lkb 184 fs/dlm/debug_fs.c lkb->lkb_nodeid, lkb 185 fs/dlm/debug_fs.c lkb->lkb_remid, lkb 186 fs/dlm/debug_fs.c lkb->lkb_ownpid, lkb 188 fs/dlm/debug_fs.c lkb->lkb_exflags, lkb 189 fs/dlm/debug_fs.c lkb->lkb_flags, lkb 190 fs/dlm/debug_fs.c lkb->lkb_status, lkb 191 fs/dlm/debug_fs.c lkb->lkb_grmode, lkb 192 fs/dlm/debug_fs.c lkb->lkb_rqmode, lkb 201 fs/dlm/debug_fs.c struct dlm_lkb *lkb; lkb 205 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { lkb 206 fs/dlm/debug_fs.c print_format2_lock(s, lkb, r); lkb 211 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { lkb 212 fs/dlm/debug_fs.c print_format2_lock(s, lkb, r); lkb 217 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_waitqueue, lkb_statequeue) { lkb 218 fs/dlm/debug_fs.c print_format2_lock(s, lkb, r); lkb 226 fs/dlm/debug_fs.c static void print_format3_lock(struct seq_file *s, struct dlm_lkb *lkb, lkb 231 fs/dlm/debug_fs.c if (lkb->lkb_flags & DLM_IFL_USER) { lkb 232 fs/dlm/debug_fs.c if (lkb->lkb_ua) lkb 233 fs/dlm/debug_fs.c xid = lkb->lkb_ua->xid; lkb 237 fs/dlm/debug_fs.c lkb->lkb_id, lkb 238 fs/dlm/debug_fs.c lkb->lkb_nodeid, lkb 239 fs/dlm/debug_fs.c lkb->lkb_remid, lkb 240 fs/dlm/debug_fs.c lkb->lkb_ownpid, lkb 242 fs/dlm/debug_fs.c lkb->lkb_exflags, lkb 243 fs/dlm/debug_fs.c lkb->lkb_flags, lkb 244 fs/dlm/debug_fs.c lkb->lkb_status, lkb 245 fs/dlm/debug_fs.c lkb->lkb_grmode, lkb 246 fs/dlm/debug_fs.c lkb->lkb_rqmode, lkb 247 fs/dlm/debug_fs.c lkb->lkb_last_bast.mode, lkb 249 fs/dlm/debug_fs.c lkb->lkb_wait_type, lkb 250 fs/dlm/debug_fs.c lkb->lkb_lvbseq, lkb 251 fs/dlm/debug_fs.c (unsigned long long)ktime_to_ns(lkb->lkb_timestamp), lkb 252 fs/dlm/debug_fs.c (unsigned long long)ktime_to_ns(lkb->lkb_last_bast_time)); lkb 257 fs/dlm/debug_fs.c struct dlm_lkb *lkb; lkb 304 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { lkb 305 fs/dlm/debug_fs.c print_format3_lock(s, lkb, 0); lkb 310 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { lkb 311 fs/dlm/debug_fs.c print_format3_lock(s, lkb, 0); lkb 316 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_waitqueue, lkb_statequeue) { lkb 317 fs/dlm/debug_fs.c print_format3_lock(s, lkb, 0); lkb 322 fs/dlm/debug_fs.c list_for_each_entry(lkb, &r->res_lookup, lkb_rsb_lookup) { lkb 323 fs/dlm/debug_fs.c print_format3_lock(s, lkb, 1); lkb 702 fs/dlm/debug_fs.c struct dlm_lkb *lkb; lkb 709 fs/dlm/debug_fs.c list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) { lkb 711 fs/dlm/debug_fs.c lkb->lkb_id, lkb->lkb_wait_type, lkb 712 fs/dlm/debug_fs.c lkb->lkb_nodeid, lkb->lkb_resource->res_name); lkb 717 fs/dlm/dlm_internal.h void dlm_timeout_warn(struct dlm_lkb *lkb); lkb 76 fs/dlm/lock.c static int send_request(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 77 fs/dlm/lock.c static int send_convert(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 78 fs/dlm/lock.c static int send_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 79 fs/dlm/lock.c static int send_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 80 fs/dlm/lock.c static int send_grant(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 81 fs/dlm/lock.c static int send_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int mode); lkb 82 fs/dlm/lock.c static int send_lookup(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 84 fs/dlm/lock.c static int _request_lock(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 85 fs/dlm/lock.c static int _cancel_lock(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 86 fs/dlm/lock.c static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 90 fs/dlm/lock.c static void del_timeout(struct dlm_lkb *lkb); lkb 160 fs/dlm/lock.c void dlm_print_lkb(struct dlm_lkb *lkb) lkb 164 fs/dlm/lock.c lkb->lkb_nodeid, lkb->lkb_id, lkb->lkb_remid, lkb->lkb_exflags, lkb 165 fs/dlm/lock.c lkb->lkb_flags, lkb->lkb_status, lkb->lkb_rqmode, lkb 166 fs/dlm/lock.c lkb->lkb_grmode, lkb->lkb_wait_type, lkb->lkb_wait_nodeid, lkb 167 fs/dlm/lock.c (unsigned long long)lkb->lkb_recover_seq); lkb 181 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 188 fs/dlm/lock.c list_for_each_entry(lkb, &r->res_lookup, lkb_rsb_lookup) lkb 189 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 191 fs/dlm/lock.c list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) lkb 192 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 194 fs/dlm/lock.c list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) lkb 195 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 197 fs/dlm/lock.c list_for_each_entry(lkb, &r->res_waitqueue, lkb_statequeue) lkb 198 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 218 fs/dlm/lock.c static inline int can_be_queued(struct dlm_lkb *lkb) lkb 220 fs/dlm/lock.c return !(lkb->lkb_exflags & DLM_LKF_NOQUEUE); lkb 223 fs/dlm/lock.c static inline int force_blocking_asts(struct dlm_lkb *lkb) lkb 225 fs/dlm/lock.c return (lkb->lkb_exflags & DLM_LKF_NOQUEUEBAST); lkb 228 fs/dlm/lock.c static inline int is_demoted(struct dlm_lkb *lkb) lkb 230 fs/dlm/lock.c return (lkb->lkb_sbflags & DLM_SBF_DEMOTED); lkb 233 fs/dlm/lock.c static inline int is_altmode(struct dlm_lkb *lkb) lkb 235 fs/dlm/lock.c return (lkb->lkb_sbflags & DLM_SBF_ALTMODE); lkb 238 fs/dlm/lock.c static inline int is_granted(struct dlm_lkb *lkb) lkb 240 fs/dlm/lock.c return (lkb->lkb_status == DLM_LKSTS_GRANTED); lkb 249 fs/dlm/lock.c static inline int is_process_copy(struct dlm_lkb *lkb) lkb 251 fs/dlm/lock.c return (lkb->lkb_nodeid && !(lkb->lkb_flags & DLM_IFL_MSTCPY)); lkb 254 fs/dlm/lock.c static inline int is_master_copy(struct dlm_lkb *lkb) lkb 256 fs/dlm/lock.c return (lkb->lkb_flags & DLM_IFL_MSTCPY) ? 1 : 0; lkb 259 fs/dlm/lock.c static inline int middle_conversion(struct dlm_lkb *lkb) lkb 261 fs/dlm/lock.c if ((lkb->lkb_grmode==DLM_LOCK_PR && lkb->lkb_rqmode==DLM_LOCK_CW) || lkb 262 fs/dlm/lock.c (lkb->lkb_rqmode==DLM_LOCK_PR && lkb->lkb_grmode==DLM_LOCK_CW)) lkb 267 fs/dlm/lock.c static inline int down_conversion(struct dlm_lkb *lkb) lkb 269 fs/dlm/lock.c return (!middle_conversion(lkb) && lkb->lkb_rqmode < lkb->lkb_grmode); lkb 272 fs/dlm/lock.c static inline int is_overlap_unlock(struct dlm_lkb *lkb) lkb 274 fs/dlm/lock.c return lkb->lkb_flags & DLM_IFL_OVERLAP_UNLOCK; lkb 277 fs/dlm/lock.c static inline int is_overlap_cancel(struct dlm_lkb *lkb) lkb 279 fs/dlm/lock.c return lkb->lkb_flags & DLM_IFL_OVERLAP_CANCEL; lkb 282 fs/dlm/lock.c static inline int is_overlap(struct dlm_lkb *lkb) lkb 284 fs/dlm/lock.c return (lkb->lkb_flags & (DLM_IFL_OVERLAP_UNLOCK | lkb 288 fs/dlm/lock.c static void queue_cast(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv) lkb 290 fs/dlm/lock.c if (is_master_copy(lkb)) lkb 293 fs/dlm/lock.c del_timeout(lkb); lkb 295 fs/dlm/lock.c DLM_ASSERT(lkb->lkb_lksb, dlm_print_lkb(lkb);); lkb 299 fs/dlm/lock.c if (rv == -DLM_ECANCEL && (lkb->lkb_flags & DLM_IFL_TIMEOUT_CANCEL)) { lkb 300 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_TIMEOUT_CANCEL; lkb 304 fs/dlm/lock.c if (rv == -DLM_ECANCEL && (lkb->lkb_flags & DLM_IFL_DEADLOCK_CANCEL)) { lkb 305 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_DEADLOCK_CANCEL; lkb 309 fs/dlm/lock.c dlm_add_cb(lkb, DLM_CB_CAST, lkb->lkb_grmode, rv, lkb->lkb_sbflags); lkb 312 fs/dlm/lock.c static inline void queue_cast_overlap(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 314 fs/dlm/lock.c queue_cast(r, lkb, lkb 315 fs/dlm/lock.c is_overlap_unlock(lkb) ? -DLM_EUNLOCK : -DLM_ECANCEL); lkb 318 fs/dlm/lock.c static void queue_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int rqmode) lkb 320 fs/dlm/lock.c if (is_master_copy(lkb)) { lkb 321 fs/dlm/lock.c send_bast(r, lkb, rqmode); lkb 323 fs/dlm/lock.c dlm_add_cb(lkb, DLM_CB_BAST, rqmode, 0, 0); lkb 1167 fs/dlm/lock.c static void attach_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 1170 fs/dlm/lock.c lkb->lkb_resource = r; lkb 1173 fs/dlm/lock.c static void detach_lkb(struct dlm_lkb *lkb) lkb 1175 fs/dlm/lock.c if (lkb->lkb_resource) { lkb 1176 fs/dlm/lock.c put_rsb(lkb->lkb_resource); lkb 1177 fs/dlm/lock.c lkb->lkb_resource = NULL; lkb 1183 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 1186 fs/dlm/lock.c lkb = dlm_allocate_lkb(ls); lkb 1187 fs/dlm/lock.c if (!lkb) lkb 1190 fs/dlm/lock.c lkb->lkb_nodeid = -1; lkb 1191 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 1192 fs/dlm/lock.c kref_init(&lkb->lkb_ref); lkb 1193 fs/dlm/lock.c INIT_LIST_HEAD(&lkb->lkb_ownqueue); lkb 1194 fs/dlm/lock.c INIT_LIST_HEAD(&lkb->lkb_rsb_lookup); lkb 1195 fs/dlm/lock.c INIT_LIST_HEAD(&lkb->lkb_time_list); lkb 1196 fs/dlm/lock.c INIT_LIST_HEAD(&lkb->lkb_cb_list); lkb 1197 fs/dlm/lock.c mutex_init(&lkb->lkb_cb_mutex); lkb 1198 fs/dlm/lock.c INIT_WORK(&lkb->lkb_cb_work, dlm_callback_work); lkb 1202 fs/dlm/lock.c rv = idr_alloc(&ls->ls_lkbidr, lkb, 1, 0, GFP_NOWAIT); lkb 1204 fs/dlm/lock.c lkb->lkb_id = rv; lkb 1210 fs/dlm/lock.c dlm_free_lkb(lkb); lkb 1214 fs/dlm/lock.c *lkb_ret = lkb; lkb 1220 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 1223 fs/dlm/lock.c lkb = idr_find(&ls->ls_lkbidr, lkid); lkb 1224 fs/dlm/lock.c if (lkb) lkb 1225 fs/dlm/lock.c kref_get(&lkb->lkb_ref); lkb 1228 fs/dlm/lock.c *lkb_ret = lkb; lkb 1229 fs/dlm/lock.c return lkb ? 0 : -ENOENT; lkb 1234 fs/dlm/lock.c struct dlm_lkb *lkb = container_of(kref, struct dlm_lkb, lkb_ref); lkb 1239 fs/dlm/lock.c DLM_ASSERT(!lkb->lkb_status, dlm_print_lkb(lkb);); lkb 1245 fs/dlm/lock.c static int __put_lkb(struct dlm_ls *ls, struct dlm_lkb *lkb) lkb 1247 fs/dlm/lock.c uint32_t lkid = lkb->lkb_id; lkb 1250 fs/dlm/lock.c if (kref_put(&lkb->lkb_ref, kill_lkb)) { lkb 1254 fs/dlm/lock.c detach_lkb(lkb); lkb 1257 fs/dlm/lock.c if (lkb->lkb_lvbptr && is_master_copy(lkb)) lkb 1258 fs/dlm/lock.c dlm_free_lvb(lkb->lkb_lvbptr); lkb 1259 fs/dlm/lock.c dlm_free_lkb(lkb); lkb 1267 fs/dlm/lock.c int dlm_put_lkb(struct dlm_lkb *lkb) lkb 1271 fs/dlm/lock.c DLM_ASSERT(lkb->lkb_resource, dlm_print_lkb(lkb);); lkb 1272 fs/dlm/lock.c DLM_ASSERT(lkb->lkb_resource->res_ls, dlm_print_lkb(lkb);); lkb 1274 fs/dlm/lock.c ls = lkb->lkb_resource->res_ls; lkb 1275 fs/dlm/lock.c return __put_lkb(ls, lkb); lkb 1281 fs/dlm/lock.c static inline void hold_lkb(struct dlm_lkb *lkb) lkb 1283 fs/dlm/lock.c kref_get(&lkb->lkb_ref); lkb 1291 fs/dlm/lock.c static inline void unhold_lkb(struct dlm_lkb *lkb) lkb 1294 fs/dlm/lock.c rv = kref_put(&lkb->lkb_ref, kill_lkb); lkb 1295 fs/dlm/lock.c DLM_ASSERT(!rv, dlm_print_lkb(lkb);); lkb 1301 fs/dlm/lock.c struct dlm_lkb *lkb = NULL; lkb 1303 fs/dlm/lock.c list_for_each_entry(lkb, head, lkb_statequeue) lkb 1304 fs/dlm/lock.c if (lkb->lkb_rqmode < mode) lkb 1307 fs/dlm/lock.c __list_add(new, lkb->lkb_statequeue.prev, &lkb->lkb_statequeue); lkb 1312 fs/dlm/lock.c static void add_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb, int status) lkb 1314 fs/dlm/lock.c kref_get(&lkb->lkb_ref); lkb 1316 fs/dlm/lock.c DLM_ASSERT(!lkb->lkb_status, dlm_print_lkb(lkb);); lkb 1318 fs/dlm/lock.c lkb->lkb_timestamp = ktime_get(); lkb 1320 fs/dlm/lock.c lkb->lkb_status = status; lkb 1324 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_HEADQUE) lkb 1325 fs/dlm/lock.c list_add(&lkb->lkb_statequeue, &r->res_waitqueue); lkb 1327 fs/dlm/lock.c list_add_tail(&lkb->lkb_statequeue, &r->res_waitqueue); lkb 1331 fs/dlm/lock.c lkb_add_ordered(&lkb->lkb_statequeue, &r->res_grantqueue, lkb 1332 fs/dlm/lock.c lkb->lkb_grmode); lkb 1335 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_HEADQUE) lkb 1336 fs/dlm/lock.c list_add(&lkb->lkb_statequeue, &r->res_convertqueue); lkb 1338 fs/dlm/lock.c list_add_tail(&lkb->lkb_statequeue, lkb 1342 fs/dlm/lock.c DLM_ASSERT(0, dlm_print_lkb(lkb); printk("sts=%d\n", status);); lkb 1346 fs/dlm/lock.c static void del_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 1348 fs/dlm/lock.c lkb->lkb_status = 0; lkb 1349 fs/dlm/lock.c list_del(&lkb->lkb_statequeue); lkb 1350 fs/dlm/lock.c unhold_lkb(lkb); lkb 1353 fs/dlm/lock.c static void move_lkb(struct dlm_rsb *r, struct dlm_lkb *lkb, int sts) lkb 1355 fs/dlm/lock.c hold_lkb(lkb); lkb 1356 fs/dlm/lock.c del_lkb(r, lkb); lkb 1357 fs/dlm/lock.c add_lkb(r, lkb, sts); lkb 1358 fs/dlm/lock.c unhold_lkb(lkb); lkb 1395 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 1408 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) { lkb 1409 fs/dlm/lock.c if (!lkb->lkb_wait_time) lkb 1414 fs/dlm/lock.c us = ktime_to_us(ktime_sub(ktime_get(), lkb->lkb_wait_time)); lkb 1419 fs/dlm/lock.c lkb->lkb_wait_time = 0; lkb 1431 fs/dlm/lock.c if (nodeid_warned(lkb->lkb_wait_nodeid, num_nodes, warned)) lkb 1435 fs/dlm/lock.c "node %d", lkb->lkb_id, (long long)us, lkb 1436 fs/dlm/lock.c dlm_config.ci_waitwarn_us, lkb->lkb_wait_nodeid); lkb 1450 fs/dlm/lock.c static int add_to_waiters(struct dlm_lkb *lkb, int mstype, int to_nodeid) lkb 1452 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1457 fs/dlm/lock.c if (is_overlap_unlock(lkb) || lkb 1458 fs/dlm/lock.c (is_overlap_cancel(lkb) && (mstype == DLM_MSG_CANCEL))) { lkb 1463 fs/dlm/lock.c if (lkb->lkb_wait_type || is_overlap_cancel(lkb)) { lkb 1466 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK; lkb 1469 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL; lkb 1475 fs/dlm/lock.c lkb->lkb_wait_count++; lkb 1476 fs/dlm/lock.c hold_lkb(lkb); lkb 1479 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_wait_type, mstype, lkb 1480 fs/dlm/lock.c lkb->lkb_wait_count, lkb->lkb_flags); lkb 1484 fs/dlm/lock.c DLM_ASSERT(!lkb->lkb_wait_count, lkb 1485 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 1486 fs/dlm/lock.c printk("wait_count %d\n", lkb->lkb_wait_count);); lkb 1488 fs/dlm/lock.c lkb->lkb_wait_count++; lkb 1489 fs/dlm/lock.c lkb->lkb_wait_type = mstype; lkb 1490 fs/dlm/lock.c lkb->lkb_wait_time = ktime_get(); lkb 1491 fs/dlm/lock.c lkb->lkb_wait_nodeid = to_nodeid; /* for debugging */ lkb 1492 fs/dlm/lock.c hold_lkb(lkb); lkb 1493 fs/dlm/lock.c list_add(&lkb->lkb_wait_reply, &ls->ls_waiters); lkb 1497 fs/dlm/lock.c lkb->lkb_id, error, lkb->lkb_flags, mstype, lkb 1498 fs/dlm/lock.c lkb->lkb_wait_type, lkb->lkb_resource->res_name); lkb 1508 fs/dlm/lock.c static int _remove_from_waiters(struct dlm_lkb *lkb, int mstype, lkb 1511 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1514 fs/dlm/lock.c if (is_overlap_unlock(lkb) && (mstype == DLM_MSG_UNLOCK_REPLY)) { lkb 1515 fs/dlm/lock.c log_debug(ls, "remwait %x unlock_reply overlap", lkb->lkb_id); lkb 1516 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK; lkb 1521 fs/dlm/lock.c if (is_overlap_cancel(lkb) && (mstype == DLM_MSG_CANCEL_REPLY)) { lkb 1522 fs/dlm/lock.c log_debug(ls, "remwait %x cancel_reply overlap", lkb->lkb_id); lkb 1523 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 1532 fs/dlm/lock.c (lkb->lkb_wait_type != DLM_MSG_CANCEL)) { lkb 1534 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_wait_type); lkb 1547 fs/dlm/lock.c (lkb->lkb_wait_type == DLM_MSG_CONVERT) && lkb 1548 fs/dlm/lock.c is_overlap_cancel(lkb) && ms && !ms->m_result) { lkb 1550 fs/dlm/lock.c lkb->lkb_id); lkb 1551 fs/dlm/lock.c lkb->lkb_wait_type = 0; lkb 1552 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 1553 fs/dlm/lock.c lkb->lkb_wait_count--; lkb 1560 fs/dlm/lock.c if (lkb->lkb_wait_type) { lkb 1561 fs/dlm/lock.c lkb->lkb_wait_type = 0; lkb 1566 fs/dlm/lock.c lkb->lkb_id, ms ? ms->m_header.h_nodeid : 0, lkb->lkb_remid, lkb 1567 fs/dlm/lock.c mstype, lkb->lkb_flags); lkb 1576 fs/dlm/lock.c if (overlap_done && lkb->lkb_wait_type) { lkb 1578 fs/dlm/lock.c lkb->lkb_id, mstype, lkb->lkb_wait_type); lkb 1579 fs/dlm/lock.c lkb->lkb_wait_count--; lkb 1580 fs/dlm/lock.c lkb->lkb_wait_type = 0; lkb 1583 fs/dlm/lock.c DLM_ASSERT(lkb->lkb_wait_count, dlm_print_lkb(lkb);); lkb 1585 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_RESEND; lkb 1586 fs/dlm/lock.c lkb->lkb_wait_count--; lkb 1587 fs/dlm/lock.c if (!lkb->lkb_wait_count) lkb 1588 fs/dlm/lock.c list_del_init(&lkb->lkb_wait_reply); lkb 1589 fs/dlm/lock.c unhold_lkb(lkb); lkb 1593 fs/dlm/lock.c static int remove_from_waiters(struct dlm_lkb *lkb, int mstype) lkb 1595 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1599 fs/dlm/lock.c error = _remove_from_waiters(lkb, mstype, NULL); lkb 1607 fs/dlm/lock.c static int remove_from_waiters_ms(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 1609 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1614 fs/dlm/lock.c error = _remove_from_waiters(lkb, ms->m_type, ms); lkb 1812 fs/dlm/lock.c static void add_timeout(struct dlm_lkb *lkb) lkb 1814 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1816 fs/dlm/lock.c if (is_master_copy(lkb)) lkb 1820 fs/dlm/lock.c !(lkb->lkb_exflags & DLM_LKF_NODLCKWT)) { lkb 1821 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_WATCH_TIMEWARN; lkb 1824 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_TIMEOUT) lkb 1829 fs/dlm/lock.c DLM_ASSERT(list_empty(&lkb->lkb_time_list), dlm_print_lkb(lkb);); lkb 1831 fs/dlm/lock.c hold_lkb(lkb); lkb 1832 fs/dlm/lock.c list_add_tail(&lkb->lkb_time_list, &ls->ls_timeout); lkb 1836 fs/dlm/lock.c static void del_timeout(struct dlm_lkb *lkb) lkb 1838 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 1841 fs/dlm/lock.c if (!list_empty(&lkb->lkb_time_list)) { lkb 1842 fs/dlm/lock.c list_del_init(&lkb->lkb_time_list); lkb 1843 fs/dlm/lock.c unhold_lkb(lkb); lkb 1857 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 1868 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list) { lkb 1871 fs/dlm/lock.c lkb->lkb_timestamp)); lkb 1873 fs/dlm/lock.c if ((lkb->lkb_exflags & DLM_LKF_TIMEOUT) && lkb 1874 fs/dlm/lock.c wait_us >= (lkb->lkb_timeout_cs * 10000)) lkb 1877 fs/dlm/lock.c if ((lkb->lkb_flags & DLM_IFL_WATCH_TIMEWARN) && lkb 1883 fs/dlm/lock.c hold_lkb(lkb); lkb 1891 fs/dlm/lock.c r = lkb->lkb_resource; lkb 1897 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_WATCH_TIMEWARN; lkb 1898 fs/dlm/lock.c if (!(lkb->lkb_exflags & DLM_LKF_TIMEOUT)) lkb 1899 fs/dlm/lock.c del_timeout(lkb); lkb 1900 fs/dlm/lock.c dlm_timeout_warn(lkb); lkb 1905 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_nodeid, r->res_name); lkb 1906 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_WATCH_TIMEWARN; lkb 1907 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_TIMEOUT_CANCEL; lkb 1908 fs/dlm/lock.c del_timeout(lkb); lkb 1909 fs/dlm/lock.c _cancel_lock(r, lkb); lkb 1914 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 1923 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 1928 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_timeout, lkb_time_list) lkb 1929 fs/dlm/lock.c lkb->lkb_timestamp = ktime_add_us(lkb->lkb_timestamp, adj_us); lkb 1936 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) { lkb 1937 fs/dlm/lock.c if (ktime_to_us(lkb->lkb_wait_time)) lkb 1938 fs/dlm/lock.c lkb->lkb_wait_time = ktime_get(); lkb 1945 fs/dlm/lock.c static void set_lvb_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 1953 fs/dlm/lock.c b = dlm_lvb_operations[lkb->lkb_grmode + 1][lkb->lkb_rqmode + 1]; lkb 1956 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 1959 fs/dlm/lock.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 1965 fs/dlm/lock.c memcpy(lkb->lkb_lvbptr, r->res_lvbptr, len); lkb 1966 fs/dlm/lock.c lkb->lkb_lvbseq = r->res_lvbseq; lkb 1969 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) { lkb 1974 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 1977 fs/dlm/lock.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 1986 fs/dlm/lock.c memcpy(r->res_lvbptr, lkb->lkb_lvbptr, len); lkb 1988 fs/dlm/lock.c lkb->lkb_lvbseq = r->res_lvbseq; lkb 1993 fs/dlm/lock.c lkb->lkb_sbflags |= DLM_SBF_VALNOTVALID; lkb 1996 fs/dlm/lock.c static void set_lvb_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 1998 fs/dlm/lock.c if (lkb->lkb_grmode < DLM_LOCK_PW) lkb 2001 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_IVVALBLK) { lkb 2006 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 2009 fs/dlm/lock.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 2018 fs/dlm/lock.c memcpy(r->res_lvbptr, lkb->lkb_lvbptr, r->res_ls->ls_lvblen); lkb 2025 fs/dlm/lock.c static void set_lvb_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 2030 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 2033 fs/dlm/lock.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 2036 fs/dlm/lock.c b = dlm_lvb_operations[lkb->lkb_grmode + 1][lkb->lkb_rqmode + 1]; lkb 2041 fs/dlm/lock.c memcpy(lkb->lkb_lvbptr, ms->m_extra, len); lkb 2042 fs/dlm/lock.c lkb->lkb_lvbseq = ms->m_lvbseq; lkb 2056 fs/dlm/lock.c static void _remove_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2058 fs/dlm/lock.c del_lkb(r, lkb); lkb 2059 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 2062 fs/dlm/lock.c unhold_lkb(lkb); lkb 2065 fs/dlm/lock.c static void remove_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2067 fs/dlm/lock.c set_lvb_unlock(r, lkb); lkb 2068 fs/dlm/lock.c _remove_lock(r, lkb); lkb 2071 fs/dlm/lock.c static void remove_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2073 fs/dlm/lock.c _remove_lock(r, lkb); lkb 2080 fs/dlm/lock.c static int revert_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2084 fs/dlm/lock.c lkb->lkb_rqmode = DLM_LOCK_IV; lkb 2086 fs/dlm/lock.c switch (lkb->lkb_status) { lkb 2090 fs/dlm/lock.c move_lkb(r, lkb, DLM_LKSTS_GRANTED); lkb 2094 fs/dlm/lock.c del_lkb(r, lkb); lkb 2095 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 2098 fs/dlm/lock.c unhold_lkb(lkb); lkb 2102 fs/dlm/lock.c log_print("invalid status for revert %d", lkb->lkb_status); lkb 2107 fs/dlm/lock.c static int revert_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2109 fs/dlm/lock.c return revert_lock(r, lkb); lkb 2112 fs/dlm/lock.c static void _grant_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2114 fs/dlm/lock.c if (lkb->lkb_grmode != lkb->lkb_rqmode) { lkb 2115 fs/dlm/lock.c lkb->lkb_grmode = lkb->lkb_rqmode; lkb 2116 fs/dlm/lock.c if (lkb->lkb_status) lkb 2117 fs/dlm/lock.c move_lkb(r, lkb, DLM_LKSTS_GRANTED); lkb 2119 fs/dlm/lock.c add_lkb(r, lkb, DLM_LKSTS_GRANTED); lkb 2122 fs/dlm/lock.c lkb->lkb_rqmode = DLM_LOCK_IV; lkb 2123 fs/dlm/lock.c lkb->lkb_highbast = 0; lkb 2126 fs/dlm/lock.c static void grant_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2128 fs/dlm/lock.c set_lvb_lock(r, lkb); lkb 2129 fs/dlm/lock.c _grant_lock(r, lkb); lkb 2132 fs/dlm/lock.c static void grant_lock_pc(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 2135 fs/dlm/lock.c set_lvb_lock_pc(r, lkb, ms); lkb 2136 fs/dlm/lock.c _grant_lock(r, lkb); lkb 2143 fs/dlm/lock.c static void grant_lock_pending(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2145 fs/dlm/lock.c grant_lock(r, lkb); lkb 2146 fs/dlm/lock.c if (is_master_copy(lkb)) lkb 2147 fs/dlm/lock.c send_grant(r, lkb); lkb 2149 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 2160 fs/dlm/lock.c static void munge_demoted(struct dlm_lkb *lkb) lkb 2162 fs/dlm/lock.c if (lkb->lkb_rqmode == DLM_LOCK_IV || lkb->lkb_grmode == DLM_LOCK_IV) { lkb 2164 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_grmode, lkb->lkb_rqmode); lkb 2168 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_NL; lkb 2171 fs/dlm/lock.c static void munge_altmode(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 2176 fs/dlm/lock.c lkb->lkb_id, ms->m_type); lkb 2180 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_ALTPR) lkb 2181 fs/dlm/lock.c lkb->lkb_rqmode = DLM_LOCK_PR; lkb 2182 fs/dlm/lock.c else if (lkb->lkb_exflags & DLM_LKF_ALTCW) lkb 2183 fs/dlm/lock.c lkb->lkb_rqmode = DLM_LOCK_CW; lkb 2185 fs/dlm/lock.c log_print("munge_altmode invalid exflags %x", lkb->lkb_exflags); lkb 2186 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 2190 fs/dlm/lock.c static inline int first_in_list(struct dlm_lkb *lkb, struct list_head *head) lkb 2194 fs/dlm/lock.c if (lkb->lkb_id == first->lkb_id) lkb 2202 fs/dlm/lock.c static int queue_conflict(struct list_head *head, struct dlm_lkb *lkb) lkb 2207 fs/dlm/lock.c if (this == lkb) lkb 2209 fs/dlm/lock.c if (!modes_compat(this, lkb)) lkb 2295 fs/dlm/lock.c static int _can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now, lkb 2298 fs/dlm/lock.c int8_t conv = (lkb->lkb_grmode != DLM_LOCK_IV); lkb 2319 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_EXPEDITE) lkb 2327 fs/dlm/lock.c if (queue_conflict(&r->res_grantqueue, lkb)) lkb 2336 fs/dlm/lock.c if (queue_conflict(&r->res_convertqueue, lkb)) lkb 2379 fs/dlm/lock.c if (now && conv && !(lkb->lkb_exflags & DLM_LKF_QUECVT)) lkb 2387 fs/dlm/lock.c if (now && conv && (lkb->lkb_exflags & DLM_LKF_QUECVT)) { lkb 2399 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_NOORDER) lkb 2408 fs/dlm/lock.c if (!now && conv && first_in_list(lkb, &r->res_convertqueue)) lkb 2435 fs/dlm/lock.c first_in_list(lkb, &r->res_waitqueue)) lkb 2441 fs/dlm/lock.c static int can_be_granted(struct dlm_rsb *r, struct dlm_lkb *lkb, int now, lkb 2445 fs/dlm/lock.c int8_t alt = 0, rqmode = lkb->lkb_rqmode; lkb 2446 fs/dlm/lock.c int8_t is_convert = (lkb->lkb_grmode != DLM_LOCK_IV); lkb 2451 fs/dlm/lock.c rv = _can_be_granted(r, lkb, now, recover); lkb 2461 fs/dlm/lock.c if (is_convert && can_be_queued(lkb) && lkb 2462 fs/dlm/lock.c conversion_deadlock_detect(r, lkb)) { lkb 2463 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_CONVDEADLK) { lkb 2464 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_NL; lkb 2465 fs/dlm/lock.c lkb->lkb_sbflags |= DLM_SBF_DEMOTED; lkb 2470 fs/dlm/lock.c lkb->lkb_id, now); lkb 2483 fs/dlm/lock.c if (rqmode != DLM_LOCK_PR && (lkb->lkb_exflags & DLM_LKF_ALTPR)) lkb 2485 fs/dlm/lock.c else if (rqmode != DLM_LOCK_CW && (lkb->lkb_exflags & DLM_LKF_ALTCW)) lkb 2489 fs/dlm/lock.c lkb->lkb_rqmode = alt; lkb 2490 fs/dlm/lock.c rv = _can_be_granted(r, lkb, now, 0); lkb 2492 fs/dlm/lock.c lkb->lkb_sbflags |= DLM_SBF_ALTMODE; lkb 2494 fs/dlm/lock.c lkb->lkb_rqmode = rqmode; lkb 2506 fs/dlm/lock.c struct dlm_lkb *lkb, *s; lkb 2517 fs/dlm/lock.c list_for_each_entry_safe(lkb, s, &r->res_convertqueue, lkb_statequeue) { lkb 2518 fs/dlm/lock.c demoted = is_demoted(lkb); lkb 2521 fs/dlm/lock.c if (can_be_granted(r, lkb, 0, recover, &deadlk)) { lkb 2522 fs/dlm/lock.c grant_lock_pending(r, lkb); lkb 2529 fs/dlm/lock.c if (!demoted && is_demoted(lkb)) { lkb 2531 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_nodeid, r->res_name); lkb 2542 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_NODLCKWT) { lkb 2543 fs/dlm/lock.c if (lkb->lkb_highbast < lkb->lkb_rqmode) { lkb 2544 fs/dlm/lock.c queue_bast(r, lkb, lkb->lkb_rqmode); lkb 2545 fs/dlm/lock.c lkb->lkb_highbast = lkb->lkb_rqmode; lkb 2549 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_nodeid, lkb 2556 fs/dlm/lock.c hi = max_t(int, lkb->lkb_rqmode, hi); lkb 2558 fs/dlm/lock.c if (cw && lkb->lkb_rqmode == DLM_LOCK_CW) lkb 2575 fs/dlm/lock.c struct dlm_lkb *lkb, *s; lkb 2577 fs/dlm/lock.c list_for_each_entry_safe(lkb, s, &r->res_waitqueue, lkb_statequeue) { lkb 2578 fs/dlm/lock.c if (can_be_granted(r, lkb, 0, 0, NULL)) { lkb 2579 fs/dlm/lock.c grant_lock_pending(r, lkb); lkb 2583 fs/dlm/lock.c high = max_t(int, lkb->lkb_rqmode, high); lkb 2584 fs/dlm/lock.c if (lkb->lkb_rqmode == DLM_LOCK_CW) lkb 2613 fs/dlm/lock.c struct dlm_lkb *lkb, *s; lkb 2635 fs/dlm/lock.c list_for_each_entry_safe(lkb, s, &r->res_grantqueue, lkb_statequeue) { lkb 2636 fs/dlm/lock.c if (lkb->lkb_bastfn && lock_requires_bast(lkb, high, cw)) { lkb 2638 fs/dlm/lock.c lkb->lkb_grmode == DLM_LOCK_PR) lkb 2639 fs/dlm/lock.c queue_bast(r, lkb, DLM_LOCK_CW); lkb 2641 fs/dlm/lock.c queue_bast(r, lkb, high); lkb 2642 fs/dlm/lock.c lkb->lkb_highbast = high; lkb 2662 fs/dlm/lock.c struct dlm_lkb *lkb) lkb 2668 fs/dlm/lock.c if (gr == lkb) lkb 2670 fs/dlm/lock.c if (gr->lkb_bastfn && modes_require_bast(gr, lkb)) { lkb 2671 fs/dlm/lock.c queue_bast(r, gr, lkb->lkb_rqmode); lkb 2672 fs/dlm/lock.c gr->lkb_highbast = lkb->lkb_rqmode; lkb 2677 fs/dlm/lock.c static void send_blocking_asts(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2679 fs/dlm/lock.c send_bast_queue(r, &r->res_grantqueue, lkb); lkb 2682 fs/dlm/lock.c static void send_blocking_asts_all(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2684 fs/dlm/lock.c send_bast_queue(r, &r->res_grantqueue, lkb); lkb 2685 fs/dlm/lock.c send_bast_queue(r, &r->res_convertqueue, lkb); lkb 2707 fs/dlm/lock.c static int set_master(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 2713 fs/dlm/lock.c r->res_first_lkid = lkb->lkb_id; lkb 2714 fs/dlm/lock.c lkb->lkb_nodeid = r->res_nodeid; lkb 2718 fs/dlm/lock.c if (r->res_first_lkid && r->res_first_lkid != lkb->lkb_id) { lkb 2719 fs/dlm/lock.c list_add_tail(&lkb->lkb_rsb_lookup, &r->res_lookup); lkb 2724 fs/dlm/lock.c lkb->lkb_nodeid = 0; lkb 2729 fs/dlm/lock.c lkb->lkb_nodeid = r->res_master_nodeid; lkb 2741 fs/dlm/lock.c lkb->lkb_id, r->res_master_nodeid, r->res_dir_nodeid, lkb 2745 fs/dlm/lock.c lkb->lkb_nodeid = 0; lkb 2751 fs/dlm/lock.c r->res_first_lkid = lkb->lkb_id; lkb 2752 fs/dlm/lock.c send_lookup(r, lkb); lkb 2758 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 2760 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &r->res_lookup, lkb_rsb_lookup) { lkb 2761 fs/dlm/lock.c list_del_init(&lkb->lkb_rsb_lookup); lkb 2762 fs/dlm/lock.c _request_lock(r, lkb); lkb 2771 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 2793 fs/dlm/lock.c lkb = list_entry(r->res_lookup.next, struct dlm_lkb, lkb 2795 fs/dlm/lock.c list_del_init(&lkb->lkb_rsb_lookup); lkb 2796 fs/dlm/lock.c r->res_first_lkid = lkb->lkb_id; lkb 2797 fs/dlm/lock.c _request_lock(r, lkb); lkb 2886 fs/dlm/lock.c static int validate_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 2892 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_MSTCPY) lkb 2896 fs/dlm/lock.c !__quecvt_compat_matrix[lkb->lkb_grmode+1][args->mode+1]) lkb 2900 fs/dlm/lock.c if (lkb->lkb_status != DLM_LKSTS_GRANTED) lkb 2903 fs/dlm/lock.c if (lkb->lkb_wait_type) lkb 2906 fs/dlm/lock.c if (is_overlap(lkb)) lkb 2910 fs/dlm/lock.c lkb->lkb_exflags = args->flags; lkb 2911 fs/dlm/lock.c lkb->lkb_sbflags = 0; lkb 2912 fs/dlm/lock.c lkb->lkb_astfn = args->astfn; lkb 2913 fs/dlm/lock.c lkb->lkb_astparam = args->astparam; lkb 2914 fs/dlm/lock.c lkb->lkb_bastfn = args->bastfn; lkb 2915 fs/dlm/lock.c lkb->lkb_rqmode = args->mode; lkb 2916 fs/dlm/lock.c lkb->lkb_lksb = args->lksb; lkb 2917 fs/dlm/lock.c lkb->lkb_lvbptr = args->lksb->sb_lvbptr; lkb 2918 fs/dlm/lock.c lkb->lkb_ownpid = (int) current->pid; lkb 2919 fs/dlm/lock.c lkb->lkb_timeout_cs = args->timeout; lkb 2924 fs/dlm/lock.c rv, lkb->lkb_id, lkb->lkb_flags, args->flags, lkb 2925 fs/dlm/lock.c lkb->lkb_status, lkb->lkb_wait_type, lkb 2926 fs/dlm/lock.c lkb->lkb_resource->res_name); lkb 2937 fs/dlm/lock.c static int validate_unlock_args(struct dlm_lkb *lkb, struct dlm_args *args) lkb 2939 fs/dlm/lock.c struct dlm_ls *ls = lkb->lkb_resource->res_ls; lkb 2942 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_MSTCPY) { lkb 2943 fs/dlm/lock.c log_error(ls, "unlock on MSTCPY %x", lkb->lkb_id); lkb 2944 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 2952 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_ENDOFLIFE) { lkb 2953 fs/dlm/lock.c log_debug(ls, "unlock on ENDOFLIFE %x", lkb->lkb_id); lkb 2961 fs/dlm/lock.c if (!list_empty(&lkb->lkb_rsb_lookup)) { lkb 2963 fs/dlm/lock.c log_debug(ls, "unlock on rsb_lookup %x", lkb->lkb_id); lkb 2964 fs/dlm/lock.c list_del_init(&lkb->lkb_rsb_lookup); lkb 2965 fs/dlm/lock.c queue_cast(lkb->lkb_resource, lkb, lkb 2968 fs/dlm/lock.c unhold_lkb(lkb); /* undoes create_lkb() */ lkb 2978 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_CANCEL) lkb 2981 fs/dlm/lock.c if (is_overlap(lkb)) lkb 2985 fs/dlm/lock.c del_timeout(lkb); lkb 2987 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_RESEND) { lkb 2988 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL; lkb 2994 fs/dlm/lock.c if (lkb->lkb_status == DLM_LKSTS_GRANTED && lkb 2995 fs/dlm/lock.c !lkb->lkb_wait_type) { lkb 3000 fs/dlm/lock.c switch (lkb->lkb_wait_type) { lkb 3003 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_CANCEL; lkb 3019 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_FORCEUNLOCK) lkb 3022 fs/dlm/lock.c if (is_overlap_unlock(lkb)) lkb 3026 fs/dlm/lock.c del_timeout(lkb); lkb 3028 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_RESEND) { lkb 3029 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK; lkb 3034 fs/dlm/lock.c switch (lkb->lkb_wait_type) { lkb 3037 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_OVERLAP_UNLOCK; lkb 3049 fs/dlm/lock.c if (lkb->lkb_wait_type || lkb->lkb_wait_count) lkb 3054 fs/dlm/lock.c lkb->lkb_exflags |= args->flags; lkb 3055 fs/dlm/lock.c lkb->lkb_sbflags = 0; lkb 3056 fs/dlm/lock.c lkb->lkb_astparam = args->astparam; lkb 3061 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_flags, lkb->lkb_exflags, lkb 3062 fs/dlm/lock.c args->flags, lkb->lkb_wait_type, lkb 3063 fs/dlm/lock.c lkb->lkb_resource->res_name); lkb 3074 fs/dlm/lock.c static int do_request(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3078 fs/dlm/lock.c if (can_be_granted(r, lkb, 1, 0, NULL)) { lkb 3079 fs/dlm/lock.c grant_lock(r, lkb); lkb 3080 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 3084 fs/dlm/lock.c if (can_be_queued(lkb)) { lkb 3086 fs/dlm/lock.c add_lkb(r, lkb, DLM_LKSTS_WAITING); lkb 3087 fs/dlm/lock.c add_timeout(lkb); lkb 3092 fs/dlm/lock.c queue_cast(r, lkb, -EAGAIN); lkb 3097 fs/dlm/lock.c static void do_request_effects(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3102 fs/dlm/lock.c if (force_blocking_asts(lkb)) lkb 3103 fs/dlm/lock.c send_blocking_asts_all(r, lkb); lkb 3106 fs/dlm/lock.c send_blocking_asts(r, lkb); lkb 3111 fs/dlm/lock.c static int do_convert(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3118 fs/dlm/lock.c if (can_be_granted(r, lkb, 1, 0, &deadlk)) { lkb 3119 fs/dlm/lock.c grant_lock(r, lkb); lkb 3120 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 3128 fs/dlm/lock.c if (deadlk && !(lkb->lkb_exflags & DLM_LKF_NODLCKWT)) { lkb 3130 fs/dlm/lock.c revert_lock(r, lkb); lkb 3131 fs/dlm/lock.c queue_cast(r, lkb, -EDEADLK); lkb 3142 fs/dlm/lock.c if (is_demoted(lkb)) { lkb 3144 fs/dlm/lock.c if (_can_be_granted(r, lkb, 1, 0)) { lkb 3145 fs/dlm/lock.c grant_lock(r, lkb); lkb 3146 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 3152 fs/dlm/lock.c if (can_be_queued(lkb)) { lkb 3154 fs/dlm/lock.c del_lkb(r, lkb); lkb 3155 fs/dlm/lock.c add_lkb(r, lkb, DLM_LKSTS_CONVERT); lkb 3156 fs/dlm/lock.c add_timeout(lkb); lkb 3161 fs/dlm/lock.c queue_cast(r, lkb, -EAGAIN); lkb 3166 fs/dlm/lock.c static void do_convert_effects(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3175 fs/dlm/lock.c if (force_blocking_asts(lkb)) lkb 3176 fs/dlm/lock.c send_blocking_asts_all(r, lkb); lkb 3179 fs/dlm/lock.c send_blocking_asts(r, lkb); lkb 3184 fs/dlm/lock.c static int do_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3186 fs/dlm/lock.c remove_lock(r, lkb); lkb 3187 fs/dlm/lock.c queue_cast(r, lkb, -DLM_EUNLOCK); lkb 3191 fs/dlm/lock.c static void do_unlock_effects(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3199 fs/dlm/lock.c static int do_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3203 fs/dlm/lock.c error = revert_lock(r, lkb); lkb 3205 fs/dlm/lock.c queue_cast(r, lkb, -DLM_ECANCEL); lkb 3211 fs/dlm/lock.c static void do_cancel_effects(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3225 fs/dlm/lock.c static int _request_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3231 fs/dlm/lock.c error = set_master(r, lkb); lkb 3241 fs/dlm/lock.c error = send_request(r, lkb); lkb 3243 fs/dlm/lock.c error = do_request(r, lkb); lkb 3246 fs/dlm/lock.c do_request_effects(r, lkb, error); lkb 3254 fs/dlm/lock.c static int _convert_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3260 fs/dlm/lock.c error = send_convert(r, lkb); lkb 3262 fs/dlm/lock.c error = do_convert(r, lkb); lkb 3265 fs/dlm/lock.c do_convert_effects(r, lkb, error); lkb 3273 fs/dlm/lock.c static int _unlock_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3279 fs/dlm/lock.c error = send_unlock(r, lkb); lkb 3281 fs/dlm/lock.c error = do_unlock(r, lkb); lkb 3284 fs/dlm/lock.c do_unlock_effects(r, lkb, error); lkb 3292 fs/dlm/lock.c static int _cancel_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3298 fs/dlm/lock.c error = send_cancel(r, lkb); lkb 3300 fs/dlm/lock.c error = do_cancel(r, lkb); lkb 3303 fs/dlm/lock.c do_cancel_effects(r, lkb, error); lkb 3314 fs/dlm/lock.c static int request_lock(struct dlm_ls *ls, struct dlm_lkb *lkb, char *name, lkb 3320 fs/dlm/lock.c error = validate_lock_args(ls, lkb, args); lkb 3330 fs/dlm/lock.c attach_lkb(r, lkb); lkb 3331 fs/dlm/lock.c lkb->lkb_lksb->sb_lkid = lkb->lkb_id; lkb 3333 fs/dlm/lock.c error = _request_lock(r, lkb); lkb 3340 fs/dlm/lock.c static int convert_lock(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3346 fs/dlm/lock.c r = lkb->lkb_resource; lkb 3351 fs/dlm/lock.c error = validate_lock_args(ls, lkb, args); lkb 3355 fs/dlm/lock.c error = _convert_lock(r, lkb); lkb 3362 fs/dlm/lock.c static int unlock_lock(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3368 fs/dlm/lock.c r = lkb->lkb_resource; lkb 3373 fs/dlm/lock.c error = validate_unlock_args(lkb, args); lkb 3377 fs/dlm/lock.c error = _unlock_lock(r, lkb); lkb 3384 fs/dlm/lock.c static int cancel_lock(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3390 fs/dlm/lock.c r = lkb->lkb_resource; lkb 3395 fs/dlm/lock.c error = validate_unlock_args(lkb, args); lkb 3399 fs/dlm/lock.c error = _cancel_lock(r, lkb); lkb 3422 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 3433 fs/dlm/lock.c error = find_lkb(ls, lksb->sb_lkid, &lkb); lkb 3435 fs/dlm/lock.c error = create_lkb(ls, &lkb); lkb 3446 fs/dlm/lock.c error = convert_lock(ls, lkb, &args); lkb 3448 fs/dlm/lock.c error = request_lock(ls, lkb, name, namelen, &args); lkb 3454 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 3470 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 3480 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 3489 fs/dlm/lock.c error = cancel_lock(ls, lkb, &args); lkb 3491 fs/dlm/lock.c error = unlock_lock(ls, lkb, &args); lkb 3498 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 3561 fs/dlm/lock.c static int create_message(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3579 fs/dlm/lock.c if (lkb && lkb->lkb_lvbptr) lkb 3598 fs/dlm/lock.c static void send_args(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3601 fs/dlm/lock.c ms->m_nodeid = lkb->lkb_nodeid; lkb 3602 fs/dlm/lock.c ms->m_pid = lkb->lkb_ownpid; lkb 3603 fs/dlm/lock.c ms->m_lkid = lkb->lkb_id; lkb 3604 fs/dlm/lock.c ms->m_remid = lkb->lkb_remid; lkb 3605 fs/dlm/lock.c ms->m_exflags = lkb->lkb_exflags; lkb 3606 fs/dlm/lock.c ms->m_sbflags = lkb->lkb_sbflags; lkb 3607 fs/dlm/lock.c ms->m_flags = lkb->lkb_flags; lkb 3608 fs/dlm/lock.c ms->m_lvbseq = lkb->lkb_lvbseq; lkb 3609 fs/dlm/lock.c ms->m_status = lkb->lkb_status; lkb 3610 fs/dlm/lock.c ms->m_grmode = lkb->lkb_grmode; lkb 3611 fs/dlm/lock.c ms->m_rqmode = lkb->lkb_rqmode; lkb 3617 fs/dlm/lock.c if (lkb->lkb_bastfn) lkb 3619 fs/dlm/lock.c if (lkb->lkb_astfn) lkb 3635 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 3637 fs/dlm/lock.c memcpy(ms->m_extra, lkb->lkb_lvbptr, r->res_ls->ls_lvblen); lkb 3642 fs/dlm/lock.c static int send_common(struct dlm_rsb *r, struct dlm_lkb *lkb, int mstype) lkb 3650 fs/dlm/lock.c error = add_to_waiters(lkb, mstype, to_nodeid); lkb 3654 fs/dlm/lock.c error = create_message(r, lkb, to_nodeid, mstype, &ms, &mh); lkb 3658 fs/dlm/lock.c send_args(r, lkb, ms); lkb 3666 fs/dlm/lock.c remove_from_waiters(lkb, msg_reply_type(mstype)); lkb 3670 fs/dlm/lock.c static int send_request(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3672 fs/dlm/lock.c return send_common(r, lkb, DLM_MSG_REQUEST); lkb 3675 fs/dlm/lock.c static int send_convert(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3679 fs/dlm/lock.c error = send_common(r, lkb, DLM_MSG_CONVERT); lkb 3682 fs/dlm/lock.c if (!error && down_conversion(lkb)) { lkb 3683 fs/dlm/lock.c remove_from_waiters(lkb, DLM_MSG_CONVERT_REPLY); lkb 3687 fs/dlm/lock.c __receive_convert_reply(r, lkb, &r->res_ls->ls_stub_ms); lkb 3697 fs/dlm/lock.c static int send_unlock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3699 fs/dlm/lock.c return send_common(r, lkb, DLM_MSG_UNLOCK); lkb 3702 fs/dlm/lock.c static int send_cancel(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3704 fs/dlm/lock.c return send_common(r, lkb, DLM_MSG_CANCEL); lkb 3707 fs/dlm/lock.c static int send_grant(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3713 fs/dlm/lock.c to_nodeid = lkb->lkb_nodeid; lkb 3715 fs/dlm/lock.c error = create_message(r, lkb, to_nodeid, DLM_MSG_GRANT, &ms, &mh); lkb 3719 fs/dlm/lock.c send_args(r, lkb, ms); lkb 3728 fs/dlm/lock.c static int send_bast(struct dlm_rsb *r, struct dlm_lkb *lkb, int mode) lkb 3734 fs/dlm/lock.c to_nodeid = lkb->lkb_nodeid; lkb 3740 fs/dlm/lock.c send_args(r, lkb, ms); lkb 3749 fs/dlm/lock.c static int send_lookup(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 3757 fs/dlm/lock.c error = add_to_waiters(lkb, DLM_MSG_LOOKUP, to_nodeid); lkb 3765 fs/dlm/lock.c send_args(r, lkb, ms); lkb 3773 fs/dlm/lock.c remove_from_waiters(lkb, DLM_MSG_LOOKUP_REPLY); lkb 3797 fs/dlm/lock.c static int send_common_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 3804 fs/dlm/lock.c to_nodeid = lkb->lkb_nodeid; lkb 3806 fs/dlm/lock.c error = create_message(r, lkb, to_nodeid, mstype, &ms, &mh); lkb 3810 fs/dlm/lock.c send_args(r, lkb, ms); lkb 3819 fs/dlm/lock.c static int send_request_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv) lkb 3821 fs/dlm/lock.c return send_common_reply(r, lkb, DLM_MSG_REQUEST_REPLY, rv); lkb 3824 fs/dlm/lock.c static int send_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv) lkb 3826 fs/dlm/lock.c return send_common_reply(r, lkb, DLM_MSG_CONVERT_REPLY, rv); lkb 3829 fs/dlm/lock.c static int send_unlock_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv) lkb 3831 fs/dlm/lock.c return send_common_reply(r, lkb, DLM_MSG_UNLOCK_REPLY, rv); lkb 3834 fs/dlm/lock.c static int send_cancel_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, int rv) lkb 3836 fs/dlm/lock.c return send_common_reply(r, lkb, DLM_MSG_CANCEL_REPLY, rv); lkb 3864 fs/dlm/lock.c static void receive_flags(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 3866 fs/dlm/lock.c lkb->lkb_exflags = ms->m_exflags; lkb 3867 fs/dlm/lock.c lkb->lkb_sbflags = ms->m_sbflags; lkb 3868 fs/dlm/lock.c lkb->lkb_flags = (lkb->lkb_flags & 0xFFFF0000) | lkb 3872 fs/dlm/lock.c static void receive_flags_reply(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 3877 fs/dlm/lock.c lkb->lkb_sbflags = ms->m_sbflags; lkb 3878 fs/dlm/lock.c lkb->lkb_flags = (lkb->lkb_flags & 0xFFFF0000) | lkb 3887 fs/dlm/lock.c static int receive_lvb(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3892 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_VALBLK) { lkb 3893 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 3894 fs/dlm/lock.c lkb->lkb_lvbptr = dlm_allocate_lvb(ls); lkb 3895 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 3900 fs/dlm/lock.c memcpy(lkb->lkb_lvbptr, ms->m_extra, len); lkb 3915 fs/dlm/lock.c static int receive_request_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3918 fs/dlm/lock.c lkb->lkb_nodeid = ms->m_header.h_nodeid; lkb 3919 fs/dlm/lock.c lkb->lkb_ownpid = ms->m_pid; lkb 3920 fs/dlm/lock.c lkb->lkb_remid = ms->m_lkid; lkb 3921 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 3922 fs/dlm/lock.c lkb->lkb_rqmode = ms->m_rqmode; lkb 3924 fs/dlm/lock.c lkb->lkb_bastfn = (ms->m_asts & DLM_CB_BAST) ? &fake_bastfn : NULL; lkb 3925 fs/dlm/lock.c lkb->lkb_astfn = (ms->m_asts & DLM_CB_CAST) ? &fake_astfn : NULL; lkb 3927 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_VALBLK) { lkb 3929 fs/dlm/lock.c lkb->lkb_lvbptr = dlm_allocate_lvb(ls); lkb 3930 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 3937 fs/dlm/lock.c static int receive_convert_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3940 fs/dlm/lock.c if (lkb->lkb_status != DLM_LKSTS_GRANTED) lkb 3943 fs/dlm/lock.c if (receive_lvb(ls, lkb, ms)) lkb 3946 fs/dlm/lock.c lkb->lkb_rqmode = ms->m_rqmode; lkb 3947 fs/dlm/lock.c lkb->lkb_lvbseq = ms->m_lvbseq; lkb 3952 fs/dlm/lock.c static int receive_unlock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 3955 fs/dlm/lock.c if (receive_lvb(ls, lkb, ms)) lkb 3965 fs/dlm/lock.c struct dlm_lkb *lkb = &ls->ls_stub_lkb; lkb 3966 fs/dlm/lock.c lkb->lkb_nodeid = ms->m_header.h_nodeid; lkb 3967 fs/dlm/lock.c lkb->lkb_remid = ms->m_lkid; lkb 3973 fs/dlm/lock.c static int validate_message(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 3982 fs/dlm/lock.c if (!is_master_copy(lkb) || lkb->lkb_nodeid != from) lkb 3991 fs/dlm/lock.c if (!is_process_copy(lkb) || lkb->lkb_nodeid != from) lkb 3996 fs/dlm/lock.c if (!is_process_copy(lkb)) lkb 3998 fs/dlm/lock.c else if (lkb->lkb_nodeid != -1 && lkb->lkb_nodeid != from) lkb 4007 fs/dlm/lock.c log_error(lkb->lkb_resource->res_ls, lkb 4009 fs/dlm/lock.c ms->m_type, from, lkb->lkb_id, lkb->lkb_remid, lkb 4010 fs/dlm/lock.c lkb->lkb_flags, lkb->lkb_nodeid); lkb 4074 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4081 fs/dlm/lock.c error = create_lkb(ls, &lkb); lkb 4085 fs/dlm/lock.c receive_flags(lkb, ms); lkb 4086 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_MSTCPY; lkb 4087 fs/dlm/lock.c error = receive_request_args(ls, lkb, ms); lkb 4089 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 4104 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 4115 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 4120 fs/dlm/lock.c attach_lkb(r, lkb); lkb 4121 fs/dlm/lock.c error = do_request(r, lkb); lkb 4122 fs/dlm/lock.c send_request_reply(r, lkb, error); lkb 4123 fs/dlm/lock.c do_request_effects(r, lkb, error); lkb 4131 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4167 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4171 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4175 fs/dlm/lock.c if (lkb->lkb_remid != ms->m_lkid) { lkb 4177 fs/dlm/lock.c "remote %d %x", lkb->lkb_id, lkb->lkb_remid, lkb 4178 fs/dlm/lock.c (unsigned long long)lkb->lkb_recover_seq, lkb 4181 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4185 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4190 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4194 fs/dlm/lock.c receive_flags(lkb, ms); lkb 4196 fs/dlm/lock.c error = receive_convert_args(ls, lkb, ms); lkb 4198 fs/dlm/lock.c send_convert_reply(r, lkb, error); lkb 4202 fs/dlm/lock.c reply = !down_conversion(lkb); lkb 4204 fs/dlm/lock.c error = do_convert(r, lkb); lkb 4206 fs/dlm/lock.c send_convert_reply(r, lkb, error); lkb 4207 fs/dlm/lock.c do_convert_effects(r, lkb, error); lkb 4211 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4222 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4226 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4230 fs/dlm/lock.c if (lkb->lkb_remid != ms->m_lkid) { lkb 4232 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_remid, lkb 4235 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4239 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4244 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4248 fs/dlm/lock.c receive_flags(lkb, ms); lkb 4250 fs/dlm/lock.c error = receive_unlock_args(ls, lkb, ms); lkb 4252 fs/dlm/lock.c send_unlock_reply(r, lkb, error); lkb 4256 fs/dlm/lock.c error = do_unlock(r, lkb); lkb 4257 fs/dlm/lock.c send_unlock_reply(r, lkb, error); lkb 4258 fs/dlm/lock.c do_unlock_effects(r, lkb, error); lkb 4262 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4273 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4277 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4281 fs/dlm/lock.c receive_flags(lkb, ms); lkb 4283 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4288 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4292 fs/dlm/lock.c error = do_cancel(r, lkb); lkb 4293 fs/dlm/lock.c send_cancel_reply(r, lkb, error); lkb 4294 fs/dlm/lock.c do_cancel_effects(r, lkb, error); lkb 4298 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4309 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4313 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4317 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4322 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4326 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4327 fs/dlm/lock.c if (is_altmode(lkb)) lkb 4328 fs/dlm/lock.c munge_altmode(lkb, ms); lkb 4329 fs/dlm/lock.c grant_lock_pc(r, lkb, ms); lkb 4330 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 4334 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4340 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4344 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4348 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4353 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4357 fs/dlm/lock.c queue_bast(r, lkb, ms->m_bastmode); lkb 4358 fs/dlm/lock.c lkb->lkb_highbast = ms->m_bastmode; lkb 4362 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4481 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4486 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4490 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4494 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4498 fs/dlm/lock.c mstype = lkb->lkb_wait_type; lkb 4499 fs/dlm/lock.c error = remove_from_waiters(lkb, DLM_MSG_REQUEST_REPLY); lkb 4502 fs/dlm/lock.c lkb->lkb_id, from_nodeid, ms->m_lkid, ms->m_result); lkb 4512 fs/dlm/lock.c lkb->lkb_nodeid = from_nodeid; lkb 4521 fs/dlm/lock.c queue_cast(r, lkb, -EAGAIN); lkb 4523 fs/dlm/lock.c unhold_lkb(lkb); /* undoes create_lkb() */ lkb 4529 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4530 fs/dlm/lock.c lkb->lkb_remid = ms->m_lkid; lkb 4531 fs/dlm/lock.c if (is_altmode(lkb)) lkb 4532 fs/dlm/lock.c munge_altmode(lkb, ms); lkb 4534 fs/dlm/lock.c add_lkb(r, lkb, DLM_LKSTS_WAITING); lkb 4535 fs/dlm/lock.c add_timeout(lkb); lkb 4537 fs/dlm/lock.c grant_lock_pc(r, lkb, ms); lkb 4538 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 4547 fs/dlm/lock.c "master %d dir %d first %x %s", lkb->lkb_id, lkb 4556 fs/dlm/lock.c lkb->lkb_nodeid = -1; lkb 4559 fs/dlm/lock.c if (is_overlap(lkb)) { lkb 4561 fs/dlm/lock.c queue_cast_overlap(r, lkb); lkb 4563 fs/dlm/lock.c unhold_lkb(lkb); /* undoes create_lkb() */ lkb 4565 fs/dlm/lock.c _request_lock(r, lkb); lkb 4574 fs/dlm/lock.c lkb->lkb_id, result); lkb 4577 fs/dlm/lock.c if (is_overlap_unlock(lkb) && (result == 0 || result == -EINPROGRESS)) { lkb 4579 fs/dlm/lock.c lkb->lkb_id, result); lkb 4580 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK; lkb 4581 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 4582 fs/dlm/lock.c send_unlock(r, lkb); lkb 4583 fs/dlm/lock.c } else if (is_overlap_cancel(lkb) && (result == -EINPROGRESS)) { lkb 4584 fs/dlm/lock.c log_debug(ls, "receive_request_reply %x cancel", lkb->lkb_id); lkb 4585 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK; lkb 4586 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 4587 fs/dlm/lock.c send_cancel(r, lkb); lkb 4589 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 4590 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK; lkb 4595 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4599 fs/dlm/lock.c static void __receive_convert_reply(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 4606 fs/dlm/lock.c queue_cast(r, lkb, -EAGAIN); lkb 4610 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4611 fs/dlm/lock.c revert_lock_pc(r, lkb); lkb 4612 fs/dlm/lock.c queue_cast(r, lkb, -EDEADLK); lkb 4617 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4618 fs/dlm/lock.c if (is_demoted(lkb)) lkb 4619 fs/dlm/lock.c munge_demoted(lkb); lkb 4620 fs/dlm/lock.c del_lkb(r, lkb); lkb 4621 fs/dlm/lock.c add_lkb(r, lkb, DLM_LKSTS_CONVERT); lkb 4622 fs/dlm/lock.c add_timeout(lkb); lkb 4627 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4628 fs/dlm/lock.c if (is_demoted(lkb)) lkb 4629 fs/dlm/lock.c munge_demoted(lkb); lkb 4630 fs/dlm/lock.c grant_lock_pc(r, lkb, ms); lkb 4631 fs/dlm/lock.c queue_cast(r, lkb, 0); lkb 4636 fs/dlm/lock.c lkb->lkb_id, ms->m_header.h_nodeid, ms->m_lkid, lkb 4639 fs/dlm/lock.c dlm_print_lkb(lkb); lkb 4643 fs/dlm/lock.c static void _receive_convert_reply(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 4645 fs/dlm/lock.c struct dlm_rsb *r = lkb->lkb_resource; lkb 4651 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4656 fs/dlm/lock.c error = remove_from_waiters_ms(lkb, ms); lkb 4660 fs/dlm/lock.c __receive_convert_reply(r, lkb, ms); lkb 4668 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4671 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4675 fs/dlm/lock.c _receive_convert_reply(lkb, ms); lkb 4676 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4680 fs/dlm/lock.c static void _receive_unlock_reply(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 4682 fs/dlm/lock.c struct dlm_rsb *r = lkb->lkb_resource; lkb 4688 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4693 fs/dlm/lock.c error = remove_from_waiters_ms(lkb, ms); lkb 4701 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4702 fs/dlm/lock.c remove_lock_pc(r, lkb); lkb 4703 fs/dlm/lock.c queue_cast(r, lkb, -DLM_EUNLOCK); lkb 4709 fs/dlm/lock.c lkb->lkb_id, ms->m_result); lkb 4718 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4721 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4725 fs/dlm/lock.c _receive_unlock_reply(lkb, ms); lkb 4726 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4730 fs/dlm/lock.c static void _receive_cancel_reply(struct dlm_lkb *lkb, struct dlm_message *ms) lkb 4732 fs/dlm/lock.c struct dlm_rsb *r = lkb->lkb_resource; lkb 4738 fs/dlm/lock.c error = validate_message(lkb, ms); lkb 4743 fs/dlm/lock.c error = remove_from_waiters_ms(lkb, ms); lkb 4751 fs/dlm/lock.c receive_flags_reply(lkb, ms); lkb 4752 fs/dlm/lock.c revert_lock_pc(r, lkb); lkb 4753 fs/dlm/lock.c queue_cast(r, lkb, -DLM_ECANCEL); lkb 4759 fs/dlm/lock.c lkb->lkb_id, ms->m_result); lkb 4768 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4771 fs/dlm/lock.c error = find_lkb(ls, ms->m_remid, &lkb); lkb 4775 fs/dlm/lock.c _receive_cancel_reply(lkb, ms); lkb 4776 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 4782 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 4787 fs/dlm/lock.c error = find_lkb(ls, ms->m_lkid, &lkb); lkb 4796 fs/dlm/lock.c r = lkb->lkb_resource; lkb 4800 fs/dlm/lock.c error = remove_from_waiters(lkb, DLM_MSG_LOOKUP_REPLY); lkb 4816 fs/dlm/lock.c lkb->lkb_id, ms->m_header.h_nodeid, ret_nodeid, lkb 4829 fs/dlm/lock.c lkb->lkb_id, ms->m_header.h_nodeid); lkb 4832 fs/dlm/lock.c lkb->lkb_nodeid = -1; lkb 4839 fs/dlm/lock.c if (is_overlap(lkb)) { lkb 4841 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_flags); lkb 4842 fs/dlm/lock.c queue_cast_overlap(r, lkb); lkb 4843 fs/dlm/lock.c unhold_lkb(lkb); /* undoes create_lkb() */ lkb 4847 fs/dlm/lock.c _request_lock(r, lkb); lkb 4855 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5073 fs/dlm/lock.c static void recover_convert_waiter(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 5076 fs/dlm/lock.c if (middle_conversion(lkb)) { lkb 5077 fs/dlm/lock.c hold_lkb(lkb); lkb 5082 fs/dlm/lock.c ms_stub->m_header.h_nodeid = lkb->lkb_nodeid; lkb 5083 fs/dlm/lock.c _receive_convert_reply(lkb, ms_stub); lkb 5086 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 5087 fs/dlm/lock.c rsb_set_flag(lkb->lkb_resource, RSB_RECOVER_CONVERT); lkb 5088 fs/dlm/lock.c unhold_lkb(lkb); lkb 5090 fs/dlm/lock.c } else if (lkb->lkb_rqmode >= lkb->lkb_grmode) { lkb 5091 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_RESEND; lkb 5101 fs/dlm/lock.c static int waiter_needs_recovery(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 5107 fs/dlm/lock.c if (dlm_is_removed(ls, lkb->lkb_wait_nodeid)) lkb 5121 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 5132 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &ls->ls_waiters, lkb_wait_reply) { lkb 5134 fs/dlm/lock.c dir_nodeid = dlm_dir_nodeid(lkb->lkb_resource); lkb 5139 fs/dlm/lock.c if (lkb->lkb_wait_type != DLM_MSG_UNLOCK) { lkb 5142 fs/dlm/lock.c lkb->lkb_id, lkb 5143 fs/dlm/lock.c lkb->lkb_remid, lkb 5144 fs/dlm/lock.c lkb->lkb_wait_type, lkb 5145 fs/dlm/lock.c lkb->lkb_resource->res_nodeid, lkb 5146 fs/dlm/lock.c lkb->lkb_nodeid, lkb 5147 fs/dlm/lock.c lkb->lkb_wait_nodeid, lkb 5154 fs/dlm/lock.c if (lkb->lkb_wait_type == DLM_MSG_LOOKUP) { lkb 5155 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_RESEND; lkb 5159 fs/dlm/lock.c if (!waiter_needs_recovery(ls, lkb, dir_nodeid)) lkb 5162 fs/dlm/lock.c wait_type = lkb->lkb_wait_type; lkb 5172 fs/dlm/lock.c if (is_overlap_cancel(lkb)) { lkb 5174 fs/dlm/lock.c if (lkb->lkb_grmode == DLM_LOCK_IV) lkb 5177 fs/dlm/lock.c if (is_overlap_unlock(lkb)) { lkb 5179 fs/dlm/lock.c if (lkb->lkb_grmode == DLM_LOCK_IV) lkb 5184 fs/dlm/lock.c lkb->lkb_id, lkb->lkb_flags, wait_type, lkb 5191 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_RESEND; lkb 5195 fs/dlm/lock.c recover_convert_waiter(ls, lkb, ms_stub); lkb 5199 fs/dlm/lock.c hold_lkb(lkb); lkb 5204 fs/dlm/lock.c ms_stub->m_header.h_nodeid = lkb->lkb_nodeid; lkb 5205 fs/dlm/lock.c _receive_unlock_reply(lkb, ms_stub); lkb 5206 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5210 fs/dlm/lock.c hold_lkb(lkb); lkb 5215 fs/dlm/lock.c ms_stub->m_header.h_nodeid = lkb->lkb_nodeid; lkb 5216 fs/dlm/lock.c _receive_cancel_reply(lkb, ms_stub); lkb 5217 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5222 fs/dlm/lock.c lkb->lkb_wait_type, wait_type); lkb 5232 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5236 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_waiters, lkb_wait_reply) { lkb 5237 fs/dlm/lock.c if (lkb->lkb_flags & DLM_IFL_RESEND) { lkb 5238 fs/dlm/lock.c hold_lkb(lkb); lkb 5246 fs/dlm/lock.c lkb = NULL; lkb 5247 fs/dlm/lock.c return lkb; lkb 5268 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5279 fs/dlm/lock.c lkb = find_resend_waiter(ls); lkb 5280 fs/dlm/lock.c if (!lkb) lkb 5283 fs/dlm/lock.c r = lkb->lkb_resource; lkb 5287 fs/dlm/lock.c mstype = lkb->lkb_wait_type; lkb 5288 fs/dlm/lock.c oc = is_overlap_cancel(lkb); lkb 5289 fs/dlm/lock.c ou = is_overlap_unlock(lkb); lkb 5294 fs/dlm/lock.c "overlap %d %d", lkb->lkb_id, lkb->lkb_remid, mstype, lkb 5295 fs/dlm/lock.c r->res_nodeid, lkb->lkb_nodeid, lkb->lkb_wait_nodeid, lkb 5302 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_RESEND; lkb 5303 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_UNLOCK; lkb 5304 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_OVERLAP_CANCEL; lkb 5305 fs/dlm/lock.c lkb->lkb_wait_type = 0; lkb 5306 fs/dlm/lock.c lkb->lkb_wait_count = 0; lkb 5308 fs/dlm/lock.c list_del_init(&lkb->lkb_wait_reply); lkb 5310 fs/dlm/lock.c unhold_lkb(lkb); /* for waiters list */ lkb 5317 fs/dlm/lock.c queue_cast(r, lkb, ou ? -DLM_EUNLOCK : lkb 5319 fs/dlm/lock.c unhold_lkb(lkb); /* undoes create_lkb() */ lkb 5323 fs/dlm/lock.c queue_cast(r, lkb, -DLM_ECANCEL); lkb 5325 fs/dlm/lock.c lkb->lkb_exflags |= DLM_LKF_FORCEUNLOCK; lkb 5326 fs/dlm/lock.c _unlock_lock(r, lkb); lkb 5336 fs/dlm/lock.c _request_lock(r, lkb); lkb 5341 fs/dlm/lock.c _convert_lock(r, lkb); lkb 5351 fs/dlm/lock.c lkb->lkb_id, mstype, r->res_nodeid, lkb 5356 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5365 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 5367 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, list, lkb_statequeue) { lkb 5368 fs/dlm/lock.c if (!is_master_copy(lkb)) lkb 5374 fs/dlm/lock.c if (lkb->lkb_recover_seq == ls->ls_recover_seq) lkb 5377 fs/dlm/lock.c del_lkb(r, lkb); lkb 5380 fs/dlm/lock.c if (!dlm_put_lkb(lkb)) lkb 5398 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 5400 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, list, lkb_statequeue) { lkb 5401 fs/dlm/lock.c if (!is_master_copy(lkb)) lkb 5404 fs/dlm/lock.c if ((lkb->lkb_nodeid == nodeid_gone) || lkb 5405 fs/dlm/lock.c dlm_is_removed(ls, lkb->lkb_nodeid)) { lkb 5409 fs/dlm/lock.c if ((lkb->lkb_exflags & DLM_LKF_VALBLK) && lkb 5410 fs/dlm/lock.c (lkb->lkb_grmode >= DLM_LOCK_PW)) { lkb 5414 fs/dlm/lock.c del_lkb(r, lkb); lkb 5417 fs/dlm/lock.c if (!dlm_put_lkb(lkb)) lkb 5548 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5550 fs/dlm/lock.c list_for_each_entry(lkb, head, lkb_statequeue) { lkb 5551 fs/dlm/lock.c if (lkb->lkb_nodeid == nodeid && lkb->lkb_remid == remid) lkb 5552 fs/dlm/lock.c return lkb; lkb 5560 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5562 fs/dlm/lock.c lkb = search_remid_list(&r->res_grantqueue, nodeid, remid); lkb 5563 fs/dlm/lock.c if (lkb) lkb 5564 fs/dlm/lock.c return lkb; lkb 5565 fs/dlm/lock.c lkb = search_remid_list(&r->res_convertqueue, nodeid, remid); lkb 5566 fs/dlm/lock.c if (lkb) lkb 5567 fs/dlm/lock.c return lkb; lkb 5568 fs/dlm/lock.c lkb = search_remid_list(&r->res_waitqueue, nodeid, remid); lkb 5569 fs/dlm/lock.c if (lkb) lkb 5570 fs/dlm/lock.c return lkb; lkb 5575 fs/dlm/lock.c static int receive_rcom_lock_args(struct dlm_ls *ls, struct dlm_lkb *lkb, lkb 5580 fs/dlm/lock.c lkb->lkb_nodeid = rc->rc_header.h_nodeid; lkb 5581 fs/dlm/lock.c lkb->lkb_ownpid = le32_to_cpu(rl->rl_ownpid); lkb 5582 fs/dlm/lock.c lkb->lkb_remid = le32_to_cpu(rl->rl_lkid); lkb 5583 fs/dlm/lock.c lkb->lkb_exflags = le32_to_cpu(rl->rl_exflags); lkb 5584 fs/dlm/lock.c lkb->lkb_flags = le32_to_cpu(rl->rl_flags) & 0x0000FFFF; lkb 5585 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_MSTCPY; lkb 5586 fs/dlm/lock.c lkb->lkb_lvbseq = le32_to_cpu(rl->rl_lvbseq); lkb 5587 fs/dlm/lock.c lkb->lkb_rqmode = rl->rl_rqmode; lkb 5588 fs/dlm/lock.c lkb->lkb_grmode = rl->rl_grmode; lkb 5591 fs/dlm/lock.c lkb->lkb_bastfn = (rl->rl_asts & DLM_CB_BAST) ? &fake_bastfn : NULL; lkb 5592 fs/dlm/lock.c lkb->lkb_astfn = (rl->rl_asts & DLM_CB_CAST) ? &fake_astfn : NULL; lkb 5594 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_VALBLK) { lkb 5599 fs/dlm/lock.c lkb->lkb_lvbptr = dlm_allocate_lvb(ls); lkb 5600 fs/dlm/lock.c if (!lkb->lkb_lvbptr) lkb 5602 fs/dlm/lock.c memcpy(lkb->lkb_lvbptr, rl->rl_lvb, lvblen); lkb 5610 fs/dlm/lock.c middle_conversion(lkb)) { lkb 5612 fs/dlm/lock.c lkb->lkb_grmode = DLM_LOCK_IV; lkb 5630 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5664 fs/dlm/lock.c lkb = search_remid(r, from_nodeid, remid); lkb 5665 fs/dlm/lock.c if (lkb) { lkb 5670 fs/dlm/lock.c error = create_lkb(ls, &lkb); lkb 5674 fs/dlm/lock.c error = receive_rcom_lock_args(ls, lkb, r, rc); lkb 5676 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 5680 fs/dlm/lock.c attach_lkb(r, lkb); lkb 5681 fs/dlm/lock.c add_lkb(r, lkb, rl->rl_status); lkb 5691 fs/dlm/lock.c rl->rl_remid = cpu_to_le32(lkb->lkb_id); lkb 5693 fs/dlm/lock.c lkb->lkb_recover_seq = ls->ls_recover_seq; lkb 5711 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5719 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 5726 fs/dlm/lock.c r = lkb->lkb_resource; lkb 5730 fs/dlm/lock.c if (!is_process_copy(lkb)) { lkb 5736 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5749 fs/dlm/lock.c dlm_send_rcom_lock(r, lkb); lkb 5753 fs/dlm/lock.c lkb->lkb_remid = remid; lkb 5766 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5775 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5781 fs/dlm/lock.c error = create_lkb(ls, &lkb); lkb 5791 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 5802 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 5809 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_USER; lkb 5810 fs/dlm/lock.c error = request_lock(ls, lkb, name, namelen, &args); lkb 5822 fs/dlm/lock.c __put_lkb(ls, lkb); lkb 5828 fs/dlm/lock.c hold_lkb(lkb); lkb 5829 fs/dlm/lock.c list_add_tail(&lkb->lkb_ownqueue, &ua->proc->locks); lkb 5840 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5847 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 5854 fs/dlm/lock.c ua = lkb->lkb_ua; lkb 5878 fs/dlm/lock.c error = convert_lock(ls, lkb, &args); lkb 5883 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 5900 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5907 fs/dlm/lock.c list_for_each_entry(lkb, &ls->ls_orphans, lkb_ownqueue) { lkb 5908 fs/dlm/lock.c if (lkb->lkb_resource->res_length != namelen) lkb 5910 fs/dlm/lock.c if (memcmp(lkb->lkb_resource->res_name, name, namelen)) lkb 5912 fs/dlm/lock.c if (lkb->lkb_grmode != mode) { lkb 5918 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 5919 fs/dlm/lock.c lkb->lkb_flags &= ~DLM_IFL_ORPHAN; lkb 5920 fs/dlm/lock.c *lkid = lkb->lkb_id; lkb 5935 fs/dlm/lock.c lkb->lkb_exflags = flags; lkb 5936 fs/dlm/lock.c lkb->lkb_ownpid = (int) current->pid; lkb 5938 fs/dlm/lock.c ua = lkb->lkb_ua; lkb 5955 fs/dlm/lock.c list_add_tail(&lkb->lkb_ownqueue, &ua->proc->locks); lkb 5965 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 5972 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 5976 fs/dlm/lock.c ua = lkb->lkb_ua; lkb 5988 fs/dlm/lock.c error = unlock_lock(ls, lkb, &args); lkb 6000 fs/dlm/lock.c if (!list_empty(&lkb->lkb_ownqueue)) lkb 6001 fs/dlm/lock.c list_move(&lkb->lkb_ownqueue, &ua->proc->unlocking); lkb 6004 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6014 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 6021 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 6025 fs/dlm/lock.c ua = lkb->lkb_ua; lkb 6034 fs/dlm/lock.c error = cancel_lock(ls, lkb, &args); lkb 6042 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6051 fs/dlm/lock.c struct dlm_lkb *lkb; lkb 6059 fs/dlm/lock.c error = find_lkb(ls, lkid, &lkb); lkb 6063 fs/dlm/lock.c ua = lkb->lkb_ua; lkb 6071 fs/dlm/lock.c r = lkb->lkb_resource; lkb 6075 fs/dlm/lock.c error = validate_unlock_args(lkb, &args); lkb 6078 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_DEADLOCK_CANCEL; lkb 6080 fs/dlm/lock.c error = _cancel_lock(r, lkb); lkb 6091 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6100 fs/dlm/lock.c static int orphan_proc_lock(struct dlm_ls *ls, struct dlm_lkb *lkb) lkb 6105 fs/dlm/lock.c hold_lkb(lkb); /* reference for the ls_orphans list */ lkb 6107 fs/dlm/lock.c list_add_tail(&lkb->lkb_ownqueue, &ls->ls_orphans); lkb 6110 fs/dlm/lock.c set_unlock_args(0, lkb->lkb_ua, &args); lkb 6112 fs/dlm/lock.c error = cancel_lock(ls, lkb, &args); lkb 6123 fs/dlm/lock.c static int unlock_proc_lock(struct dlm_ls *ls, struct dlm_lkb *lkb) lkb 6129 fs/dlm/lock.c lkb->lkb_ua, &args); lkb 6131 fs/dlm/lock.c error = unlock_lock(ls, lkb, &args); lkb 6144 fs/dlm/lock.c struct dlm_lkb *lkb = NULL; lkb 6150 fs/dlm/lock.c lkb = list_entry(proc->locks.next, struct dlm_lkb, lkb_ownqueue); lkb 6151 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 6153 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_PERSISTENT) lkb 6154 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_ORPHAN; lkb 6156 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_DEAD; lkb 6159 fs/dlm/lock.c return lkb; lkb 6174 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 6179 fs/dlm/lock.c lkb = del_proc_lock(ls, proc); lkb 6180 fs/dlm/lock.c if (!lkb) lkb 6182 fs/dlm/lock.c del_timeout(lkb); lkb 6183 fs/dlm/lock.c if (lkb->lkb_exflags & DLM_LKF_PERSISTENT) lkb 6184 fs/dlm/lock.c orphan_proc_lock(ls, lkb); lkb 6186 fs/dlm/lock.c unlock_proc_lock(ls, lkb); lkb 6192 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6198 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &proc->unlocking, lkb_ownqueue) { lkb 6199 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 6200 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_DEAD; lkb 6201 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6204 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &proc->asts, lkb_cb_list) { lkb 6205 fs/dlm/lock.c memset(&lkb->lkb_callbacks, 0, lkb 6207 fs/dlm/lock.c list_del_init(&lkb->lkb_cb_list); lkb 6208 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6217 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 6220 fs/dlm/lock.c lkb = NULL; lkb 6223 fs/dlm/lock.c lkb = list_entry(proc->locks.next, struct dlm_lkb, lkb 6225 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 6229 fs/dlm/lock.c if (!lkb) lkb 6232 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_DEAD; lkb 6233 fs/dlm/lock.c unlock_proc_lock(ls, lkb); lkb 6234 fs/dlm/lock.c dlm_put_lkb(lkb); /* ref from proc->locks list */ lkb 6238 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &proc->unlocking, lkb_ownqueue) { lkb 6239 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 6240 fs/dlm/lock.c lkb->lkb_flags |= DLM_IFL_DEAD; lkb 6241 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6246 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &proc->asts, lkb_cb_list) { lkb 6247 fs/dlm/lock.c memset(&lkb->lkb_callbacks, 0, lkb 6249 fs/dlm/lock.c list_del_init(&lkb->lkb_cb_list); lkb 6250 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 6259 fs/dlm/lock.c struct dlm_lkb *lkb, *safe; lkb 6262 fs/dlm/lock.c list_for_each_entry_safe(lkb, safe, &ls->ls_orphans, lkb_ownqueue) { lkb 6263 fs/dlm/lock.c if (pid && lkb->lkb_ownpid != pid) lkb 6265 fs/dlm/lock.c unlock_proc_lock(ls, lkb); lkb 6266 fs/dlm/lock.c list_del_init(&lkb->lkb_ownqueue); lkb 6267 fs/dlm/lock.c dlm_put_lkb(lkb); lkb 16 fs/dlm/lock.h void dlm_print_lkb(struct dlm_lkb *lkb); lkb 23 fs/dlm/lock.h int dlm_put_lkb(struct dlm_lkb *lkb); lkb 724 fs/dlm/lockspace.c struct dlm_lkb *lkb = p; lkb 726 fs/dlm/lockspace.c return lkb->lkb_nodeid == 0 && lkb->lkb_grmode != DLM_LOCK_IV; lkb 736 fs/dlm/lockspace.c struct dlm_lkb *lkb = p; lkb 738 fs/dlm/lockspace.c if (lkb->lkb_lvbptr && lkb->lkb_flags & DLM_IFL_MSTCPY) lkb 739 fs/dlm/lockspace.c dlm_free_lvb(lkb->lkb_lvbptr); lkb 741 fs/dlm/lockspace.c dlm_free_lkb(lkb); lkb 73 fs/dlm/memory.c struct dlm_lkb *lkb; lkb 75 fs/dlm/memory.c lkb = kmem_cache_zalloc(lkb_cache, GFP_NOFS); lkb 76 fs/dlm/memory.c return lkb; lkb 79 fs/dlm/memory.c void dlm_free_lkb(struct dlm_lkb *lkb) lkb 81 fs/dlm/memory.c if (lkb->lkb_flags & DLM_IFL_USER) { lkb 83 fs/dlm/memory.c ua = lkb->lkb_ua; lkb 89 fs/dlm/memory.c kmem_cache_free(lkb_cache, lkb); lkb 91 fs/dlm/netlink.c static void fill_data(struct dlm_lock_data *data, struct dlm_lkb *lkb) lkb 93 fs/dlm/netlink.c struct dlm_rsb *r = lkb->lkb_resource; lkb 98 fs/dlm/netlink.c data->nodeid = lkb->lkb_nodeid; lkb 99 fs/dlm/netlink.c data->ownpid = lkb->lkb_ownpid; lkb 100 fs/dlm/netlink.c data->id = lkb->lkb_id; lkb 101 fs/dlm/netlink.c data->remid = lkb->lkb_remid; lkb 102 fs/dlm/netlink.c data->status = lkb->lkb_status; lkb 103 fs/dlm/netlink.c data->grmode = lkb->lkb_grmode; lkb 104 fs/dlm/netlink.c data->rqmode = lkb->lkb_rqmode; lkb 105 fs/dlm/netlink.c if (lkb->lkb_ua) lkb 106 fs/dlm/netlink.c data->xid = lkb->lkb_ua->xid; lkb 114 fs/dlm/netlink.c void dlm_timeout_warn(struct dlm_lkb *lkb) lkb 134 fs/dlm/netlink.c fill_data(data, lkb); lkb 373 fs/dlm/rcom.c static void pack_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb, lkb 378 fs/dlm/rcom.c rl->rl_ownpid = cpu_to_le32(lkb->lkb_ownpid); lkb 379 fs/dlm/rcom.c rl->rl_lkid = cpu_to_le32(lkb->lkb_id); lkb 380 fs/dlm/rcom.c rl->rl_exflags = cpu_to_le32(lkb->lkb_exflags); lkb 381 fs/dlm/rcom.c rl->rl_flags = cpu_to_le32(lkb->lkb_flags); lkb 382 fs/dlm/rcom.c rl->rl_lvbseq = cpu_to_le32(lkb->lkb_lvbseq); lkb 383 fs/dlm/rcom.c rl->rl_rqmode = lkb->lkb_rqmode; lkb 384 fs/dlm/rcom.c rl->rl_grmode = lkb->lkb_grmode; lkb 385 fs/dlm/rcom.c rl->rl_status = lkb->lkb_status; lkb 386 fs/dlm/rcom.c rl->rl_wait_type = cpu_to_le16(lkb->lkb_wait_type); lkb 388 fs/dlm/rcom.c if (lkb->lkb_bastfn) lkb 390 fs/dlm/rcom.c if (lkb->lkb_astfn) lkb 399 fs/dlm/rcom.c if (lkb->lkb_lvbptr) lkb 400 fs/dlm/rcom.c memcpy(rl->rl_lvb, lkb->lkb_lvbptr, r->res_ls->ls_lvblen); lkb 403 fs/dlm/rcom.c int dlm_send_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb) lkb 411 fs/dlm/rcom.c if (lkb->lkb_lvbptr) lkb 419 fs/dlm/rcom.c pack_rcom_lock(r, lkb, rl); lkb 18 fs/dlm/rcom.h int dlm_send_rcom_lock(struct dlm_rsb *r, struct dlm_lkb *lkb); lkb 403 fs/dlm/recover.c struct dlm_lkb *lkb; lkb 405 fs/dlm/recover.c list_for_each_entry(lkb, queue, lkb_statequeue) { lkb 406 fs/dlm/recover.c if (!(lkb->lkb_flags & DLM_IFL_MSTCPY)) { lkb 407 fs/dlm/recover.c lkb->lkb_nodeid = nodeid; lkb 408 fs/dlm/recover.c lkb->lkb_remid = 0; lkb 619 fs/dlm/recover.c struct dlm_lkb *lkb; lkb 622 fs/dlm/recover.c list_for_each_entry(lkb, head, lkb_statequeue) { lkb 623 fs/dlm/recover.c error = dlm_send_rcom_lock(r, lkb); lkb 735 fs/dlm/recover.c struct dlm_lkb *lkb, *high_lkb = NULL; lkb 754 fs/dlm/recover.c list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { lkb 755 fs/dlm/recover.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 760 fs/dlm/recover.c if (lkb->lkb_grmode > DLM_LOCK_CR) { lkb 765 fs/dlm/recover.c if (((int)lkb->lkb_lvbseq - (int)high_seq) >= 0) { lkb 766 fs/dlm/recover.c high_lkb = lkb; lkb 767 fs/dlm/recover.c high_seq = lkb->lkb_lvbseq; lkb 771 fs/dlm/recover.c list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { lkb 772 fs/dlm/recover.c if (!(lkb->lkb_exflags & DLM_LKF_VALBLK)) lkb 777 fs/dlm/recover.c if (lkb->lkb_grmode > DLM_LOCK_CR) { lkb 782 fs/dlm/recover.c if (((int)lkb->lkb_lvbseq - (int)high_seq) >= 0) { lkb 783 fs/dlm/recover.c high_lkb = lkb; lkb 784 fs/dlm/recover.c high_seq = lkb->lkb_lvbseq; lkb 803 fs/dlm/recover.c r->res_lvbseq = lkb->lkb_lvbseq; lkb 804 fs/dlm/recover.c memcpy(r->res_lvbptr, lkb->lkb_lvbptr, lvblen); lkb 822 fs/dlm/recover.c struct dlm_lkb *lkb; lkb 825 fs/dlm/recover.c list_for_each_entry(lkb, &r->res_grantqueue, lkb_statequeue) { lkb 826 fs/dlm/recover.c if (lkb->lkb_grmode == DLM_LOCK_PR || lkb 827 fs/dlm/recover.c lkb->lkb_grmode == DLM_LOCK_CW) { lkb 828 fs/dlm/recover.c grmode = lkb->lkb_grmode; lkb 833 fs/dlm/recover.c list_for_each_entry(lkb, &r->res_convertqueue, lkb_statequeue) { lkb 834 fs/dlm/recover.c if (lkb->lkb_grmode != DLM_LOCK_IV) lkb 838 fs/dlm/recover.c lkb->lkb_id, lkb->lkb_rqmode); lkb 839 fs/dlm/recover.c lkb->lkb_grmode = lkb->lkb_rqmode; lkb 842 fs/dlm/recover.c lkb->lkb_id, grmode); lkb 843 fs/dlm/recover.c lkb->lkb_grmode = grmode; lkb 175 fs/dlm/user.c void dlm_user_add_ast(struct dlm_lkb *lkb, uint32_t flags, int mode, lkb 183 fs/dlm/user.c if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD)) lkb 186 fs/dlm/user.c ls = lkb->lkb_resource->res_ls; lkb 195 fs/dlm/user.c if (lkb->lkb_flags & (DLM_IFL_ORPHAN | DLM_IFL_DEAD)) lkb 198 fs/dlm/user.c DLM_ASSERT(lkb->lkb_ua, dlm_print_lkb(lkb);); lkb 199 fs/dlm/user.c ua = lkb->lkb_ua; lkb 206 fs/dlm/user.c lkb->lkb_flags |= DLM_IFL_ENDOFLIFE; lkb 210 fs/dlm/user.c rv = dlm_add_lkb_callback(lkb, flags, mode, status, sbflags, seq); lkb 216 fs/dlm/user.c if (list_empty(&lkb->lkb_cb_list)) { lkb 217 fs/dlm/user.c kref_get(&lkb->lkb_ref); lkb 218 fs/dlm/user.c list_add_tail(&lkb->lkb_cb_list, &proc->asts); lkb 223 fs/dlm/user.c if (lkb->lkb_flags & DLM_IFL_ENDOFLIFE) { lkb 226 fs/dlm/user.c if (!list_empty(&lkb->lkb_ownqueue)) { lkb 227 fs/dlm/user.c list_del_init(&lkb->lkb_ownqueue); lkb 228 fs/dlm/user.c dlm_put_lkb(lkb); lkb 780 fs/dlm/user.c struct dlm_lkb *lkb; lkb 839 fs/dlm/user.c lkb = list_entry(proc->asts.next, struct dlm_lkb, lkb_cb_list); lkb 842 fs/dlm/user.c old_mode = lkb->lkb_last_cast.mode; lkb 844 fs/dlm/user.c rv = dlm_rem_lkb_callback(lkb->lkb_resource->res_ls, lkb, &cb, &resid); lkb 848 fs/dlm/user.c log_print("dlm_rem_lkb_callback empty %x", lkb->lkb_id); lkb 849 fs/dlm/user.c list_del_init(&lkb->lkb_cb_list); lkb 852 fs/dlm/user.c dlm_put_lkb(lkb); lkb 856 fs/dlm/user.c list_del_init(&lkb->lkb_cb_list); lkb 862 fs/dlm/user.c dlm_put_lkb(lkb); lkb 869 fs/dlm/user.c if (!cb.sb_status && lkb->lkb_lksb->sb_lvbptr && lkb 873 fs/dlm/user.c lkb->lkb_lksb->sb_status = cb.sb_status; lkb 874 fs/dlm/user.c lkb->lkb_lksb->sb_flags = cb.sb_flags; lkb 877 fs/dlm/user.c rv = copy_result_to_user(lkb->lkb_ua, lkb 883 fs/dlm/user.c dlm_put_lkb(lkb); lkb 9 fs/dlm/user.h void dlm_user_add_ast(struct dlm_lkb *lkb, uint32_t flags, int mode,