Lines Matching refs:ls
27 static int rcom_response(struct dlm_ls *ls) in rcom_response() argument
29 return test_bit(LSFL_RCOM_READY, &ls->ls_flags); in rcom_response()
32 static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len, in create_rcom() argument
51 rc->rc_header.h_lockspace = ls->ls_global_id; in create_rcom()
58 spin_lock(&ls->ls_recover_lock); in create_rcom()
59 rc->rc_seq = ls->ls_recover_seq; in create_rcom()
60 spin_unlock(&ls->ls_recover_lock); in create_rcom()
67 static void send_rcom(struct dlm_ls *ls, struct dlm_mhandle *mh, in send_rcom() argument
74 static void set_rcom_status(struct dlm_ls *ls, struct rcom_status *rs, in set_rcom_status() argument
84 static void set_rcom_config(struct dlm_ls *ls, struct rcom_config *rf, in set_rcom_config() argument
87 rf->rf_lvblen = cpu_to_le32(ls->ls_lvblen); in set_rcom_config()
88 rf->rf_lsflags = cpu_to_le32(ls->ls_exflags); in set_rcom_config()
90 rf->rf_our_slot = cpu_to_le16(ls->ls_slot); in set_rcom_config()
92 rf->rf_generation = cpu_to_le32(ls->ls_generation); in set_rcom_config()
95 static int check_rcom_config(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid) in check_rcom_config() argument
100 log_error(ls, "version mismatch: %x nodeid %d: %x", in check_rcom_config()
106 if (le32_to_cpu(rf->rf_lvblen) != ls->ls_lvblen || in check_rcom_config()
107 le32_to_cpu(rf->rf_lsflags) != ls->ls_exflags) { in check_rcom_config()
108 log_error(ls, "config mismatch: %d,%x nodeid %d: %d,%x", in check_rcom_config()
109 ls->ls_lvblen, ls->ls_exflags, nodeid, in check_rcom_config()
117 static void allow_sync_reply(struct dlm_ls *ls, uint64_t *new_seq) in allow_sync_reply() argument
119 spin_lock(&ls->ls_rcom_spin); in allow_sync_reply()
120 *new_seq = ++ls->ls_rcom_seq; in allow_sync_reply()
121 set_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in allow_sync_reply()
122 spin_unlock(&ls->ls_rcom_spin); in allow_sync_reply()
125 static void disallow_sync_reply(struct dlm_ls *ls) in disallow_sync_reply() argument
127 spin_lock(&ls->ls_rcom_spin); in disallow_sync_reply()
128 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in disallow_sync_reply()
129 clear_bit(LSFL_RCOM_READY, &ls->ls_flags); in disallow_sync_reply()
130 spin_unlock(&ls->ls_rcom_spin); in disallow_sync_reply()
144 int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags) in dlm_rcom_status() argument
150 ls->ls_recover_nodeid = nodeid; in dlm_rcom_status()
153 rc = ls->ls_recover_buf; in dlm_rcom_status()
154 rc->rc_result = dlm_recover_status(ls); in dlm_rcom_status()
158 error = create_rcom(ls, nodeid, DLM_RCOM_STATUS, in dlm_rcom_status()
163 set_rcom_status(ls, (struct rcom_status *)rc->rc_buf, status_flags); in dlm_rcom_status()
165 allow_sync_reply(ls, &rc->rc_id); in dlm_rcom_status()
166 memset(ls->ls_recover_buf, 0, dlm_config.ci_buffer_size); in dlm_rcom_status()
168 send_rcom(ls, mh, rc); in dlm_rcom_status()
170 error = dlm_wait_function(ls, &rcom_response); in dlm_rcom_status()
171 disallow_sync_reply(ls); in dlm_rcom_status()
175 rc = ls->ls_recover_buf; in dlm_rcom_status()
179 log_debug(ls, "remote node %d not ready", nodeid); in dlm_rcom_status()
183 error = check_rcom_config(ls, rc, nodeid); in dlm_rcom_status()
191 static void receive_rcom_status(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_rcom_status() argument
203 status = dlm_recover_status(ls); in receive_rcom_status()
210 status = dlm_recover_status(ls); in receive_rcom_status()
214 spin_lock(&ls->ls_recover_lock); in receive_rcom_status()
215 status = ls->ls_recover_status; in receive_rcom_status()
216 num_slots = ls->ls_num_slots; in receive_rcom_status()
217 spin_unlock(&ls->ls_recover_lock); in receive_rcom_status()
221 error = create_rcom(ls, nodeid, DLM_RCOM_STATUS_REPLY, in receive_rcom_status()
230 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, num_slots); in receive_rcom_status()
235 spin_lock(&ls->ls_recover_lock); in receive_rcom_status()
236 if (ls->ls_num_slots != num_slots) { in receive_rcom_status()
237 spin_unlock(&ls->ls_recover_lock); in receive_rcom_status()
238 log_debug(ls, "receive_rcom_status num_slots %d to %d", in receive_rcom_status()
239 num_slots, ls->ls_num_slots); in receive_rcom_status()
241 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, 0); in receive_rcom_status()
245 dlm_slots_copy_out(ls, rc); in receive_rcom_status()
246 spin_unlock(&ls->ls_recover_lock); in receive_rcom_status()
249 send_rcom(ls, mh, rc); in receive_rcom_status()
252 static void receive_sync_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_sync_reply() argument
254 spin_lock(&ls->ls_rcom_spin); in receive_sync_reply()
255 if (!test_bit(LSFL_RCOM_WAIT, &ls->ls_flags) || in receive_sync_reply()
256 rc_in->rc_id != ls->ls_rcom_seq) { in receive_sync_reply()
257 log_debug(ls, "reject reply %d from %d seq %llx expect %llx", in receive_sync_reply()
260 (unsigned long long)ls->ls_rcom_seq); in receive_sync_reply()
263 memcpy(ls->ls_recover_buf, rc_in, rc_in->rc_header.h_length); in receive_sync_reply()
264 set_bit(LSFL_RCOM_READY, &ls->ls_flags); in receive_sync_reply()
265 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in receive_sync_reply()
266 wake_up(&ls->ls_wait_general); in receive_sync_reply()
268 spin_unlock(&ls->ls_rcom_spin); in receive_sync_reply()
271 int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, int last_len) in dlm_rcom_names() argument
277 ls->ls_recover_nodeid = nodeid; in dlm_rcom_names()
279 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len, &rc, &mh); in dlm_rcom_names()
284 allow_sync_reply(ls, &rc->rc_id); in dlm_rcom_names()
285 memset(ls->ls_recover_buf, 0, dlm_config.ci_buffer_size); in dlm_rcom_names()
287 send_rcom(ls, mh, rc); in dlm_rcom_names()
289 error = dlm_wait_function(ls, &rcom_response); in dlm_rcom_names()
290 disallow_sync_reply(ls); in dlm_rcom_names()
295 static void receive_rcom_names(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_rcom_names() argument
305 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES_REPLY, outlen, &rc, &mh); in receive_rcom_names()
311 dlm_copy_master_names(ls, rc_in->rc_buf, inlen, rc->rc_buf, outlen, in receive_rcom_names()
313 send_rcom(ls, mh, rc); in receive_rcom_names()
320 struct dlm_ls *ls = r->res_ls; in dlm_send_rcom_lookup() local
323 error = create_rcom(ls, dir_nodeid, DLM_RCOM_LOOKUP, r->res_length, in dlm_send_rcom_lookup()
330 send_rcom(ls, mh, rc); in dlm_send_rcom_lookup()
339 struct dlm_ls *ls = r->res_ls; in dlm_send_rcom_lookup_dump() local
342 error = create_rcom(ls, to_nodeid, DLM_RCOM_LOOKUP, r->res_length, in dlm_send_rcom_lookup_dump()
349 send_rcom(ls, mh, rc); in dlm_send_rcom_lookup_dump()
354 static void receive_rcom_lookup(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_rcom_lookup() argument
361 error = create_rcom(ls, nodeid, DLM_RCOM_LOOKUP_REPLY, 0, &rc, &mh); in receive_rcom_lookup()
366 log_error(ls, "receive_rcom_lookup dump from %d", nodeid); in receive_rcom_lookup()
367 dlm_dump_rsb_name(ls, rc_in->rc_buf, len); in receive_rcom_lookup()
371 error = dlm_master_lookup(ls, nodeid, rc_in->rc_buf, len, in receive_rcom_lookup()
379 send_rcom(ls, mh, rc); in receive_rcom_lookup()
382 static void receive_rcom_lookup_reply(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_rcom_lookup_reply() argument
384 dlm_recover_master_reply(ls, rc_in); in receive_rcom_lookup_reply()
419 struct dlm_ls *ls = r->res_ls; in dlm_send_rcom_lock() local
426 len += ls->ls_lvblen; in dlm_send_rcom_lock()
428 error = create_rcom(ls, r->res_nodeid, DLM_RCOM_LOCK, len, &rc, &mh); in dlm_send_rcom_lock()
436 send_rcom(ls, mh, rc); in dlm_send_rcom_lock()
442 static void receive_rcom_lock(struct dlm_ls *ls, struct dlm_rcom *rc_in) in receive_rcom_lock() argument
448 dlm_recover_master_copy(ls, rc_in); in receive_rcom_lock()
450 error = create_rcom(ls, nodeid, DLM_RCOM_LOCK_REPLY, in receive_rcom_lock()
462 send_rcom(ls, mh, rc); in receive_rcom_lock()
548 void dlm_receive_rcom(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid) in dlm_receive_rcom() argument
582 spin_lock(&ls->ls_recover_lock); in dlm_receive_rcom()
583 status = ls->ls_recover_status; in dlm_receive_rcom()
584 stop = test_bit(LSFL_RECOVER_STOP, &ls->ls_flags); in dlm_receive_rcom()
585 seq = ls->ls_recover_seq; in dlm_receive_rcom()
586 spin_unlock(&ls->ls_recover_lock); in dlm_receive_rcom()
602 receive_rcom_status(ls, rc); in dlm_receive_rcom()
606 receive_rcom_names(ls, rc); in dlm_receive_rcom()
610 receive_rcom_lookup(ls, rc); in dlm_receive_rcom()
616 receive_rcom_lock(ls, rc); in dlm_receive_rcom()
620 receive_sync_reply(ls, rc); in dlm_receive_rcom()
624 receive_sync_reply(ls, rc); in dlm_receive_rcom()
628 receive_rcom_lookup_reply(ls, rc); in dlm_receive_rcom()
634 dlm_recover_process_copy(ls, rc); in dlm_receive_rcom()
638 log_error(ls, "receive_rcom bad type %d", rc->rc_type); in dlm_receive_rcom()
643 log_limit(ls, "dlm_receive_rcom ignore msg %d " in dlm_receive_rcom()
650 status, ls->ls_generation); in dlm_receive_rcom()
653 log_error(ls, "recovery message %d from %d is too short", in dlm_receive_rcom()