Lines Matching full:ls
25 static int rcom_response(struct dlm_ls *ls) in rcom_response() argument
27 return test_bit(LSFL_RCOM_READY, &ls->ls_flags); in rcom_response()
30 static void _create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len, in _create_rcom() argument
39 rc->rc_header.u.h_lockspace = cpu_to_le32(ls->ls_global_id); in _create_rcom()
50 static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len, in create_rcom() argument
65 _create_rcom(ls, to_nodeid, type, len, rc_ret, mb, mb_len, seq); in create_rcom()
70 static int create_rcom_stateless(struct dlm_ls *ls, int to_nodeid, int type, in create_rcom_stateless() argument
85 _create_rcom(ls, to_nodeid, type, len, rc_ret, mb, mb_len, seq); in create_rcom_stateless()
101 static void set_rcom_status(struct dlm_ls *ls, struct rcom_status *rs, in set_rcom_status() argument
111 static void set_rcom_config(struct dlm_ls *ls, struct rcom_config *rf, in set_rcom_config() argument
114 rf->rf_lvblen = cpu_to_le32(ls->ls_lvblen); in set_rcom_config()
115 rf->rf_lsflags = cpu_to_le32(ls->ls_exflags); in set_rcom_config()
117 rf->rf_our_slot = cpu_to_le16(ls->ls_slot); in set_rcom_config()
119 rf->rf_generation = cpu_to_le32(ls->ls_generation); in set_rcom_config()
122 static int check_rcom_config(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid) in check_rcom_config() argument
127 log_error(ls, "version mismatch: %x nodeid %d: %x", in check_rcom_config()
133 if (le32_to_cpu(rf->rf_lvblen) != ls->ls_lvblen || in check_rcom_config()
134 le32_to_cpu(rf->rf_lsflags) != ls->ls_exflags) { in check_rcom_config()
135 log_error(ls, "config mismatch: %d,%x nodeid %d: %d,%x", in check_rcom_config()
136 ls->ls_lvblen, ls->ls_exflags, nodeid, in check_rcom_config()
144 static void allow_sync_reply(struct dlm_ls *ls, __le64 *new_seq) in allow_sync_reply() argument
146 spin_lock_bh(&ls->ls_rcom_spin); in allow_sync_reply()
147 *new_seq = cpu_to_le64(++ls->ls_rcom_seq); in allow_sync_reply()
148 set_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in allow_sync_reply()
149 spin_unlock_bh(&ls->ls_rcom_spin); in allow_sync_reply()
152 static void disallow_sync_reply(struct dlm_ls *ls) in disallow_sync_reply() argument
154 spin_lock_bh(&ls->ls_rcom_spin); in disallow_sync_reply()
155 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in disallow_sync_reply()
156 clear_bit(LSFL_RCOM_READY, &ls->ls_flags); in disallow_sync_reply()
157 spin_unlock_bh(&ls->ls_rcom_spin); in disallow_sync_reply()
171 int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags, in dlm_rcom_status() argument
178 ls->ls_recover_nodeid = nodeid; in dlm_rcom_status()
181 rc = ls->ls_recover_buf; in dlm_rcom_status()
182 rc->rc_result = cpu_to_le32(dlm_recover_status(ls)); in dlm_rcom_status()
187 error = create_rcom_stateless(ls, nodeid, DLM_RCOM_STATUS, in dlm_rcom_status()
193 set_rcom_status(ls, (struct rcom_status *)rc->rc_buf, status_flags); in dlm_rcom_status()
195 allow_sync_reply(ls, &rc->rc_id); in dlm_rcom_status()
196 memset(ls->ls_recover_buf, 0, DLM_MAX_SOCKET_BUFSIZE); in dlm_rcom_status()
200 error = dlm_wait_function(ls, &rcom_response); in dlm_rcom_status()
201 disallow_sync_reply(ls); in dlm_rcom_status()
207 rc = ls->ls_recover_buf; in dlm_rcom_status()
211 log_debug(ls, "remote node %d not ready", nodeid); in dlm_rcom_status()
215 error = check_rcom_config(ls, rc, nodeid); in dlm_rcom_status()
223 static void receive_rcom_status(struct dlm_ls *ls, in receive_rcom_status() argument
237 status = dlm_recover_status(ls); in receive_rcom_status()
244 status = dlm_recover_status(ls); in receive_rcom_status()
248 spin_lock_bh(&ls->ls_recover_lock); in receive_rcom_status()
249 status = ls->ls_recover_status; in receive_rcom_status()
250 num_slots = ls->ls_num_slots; in receive_rcom_status()
251 spin_unlock_bh(&ls->ls_recover_lock); in receive_rcom_status()
255 error = create_rcom_stateless(ls, nodeid, DLM_RCOM_STATUS_REPLY, in receive_rcom_status()
264 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, num_slots); in receive_rcom_status()
269 spin_lock_bh(&ls->ls_recover_lock); in receive_rcom_status()
270 if (ls->ls_num_slots != num_slots) { in receive_rcom_status()
271 spin_unlock_bh(&ls->ls_recover_lock); in receive_rcom_status()
272 log_debug(ls, "receive_rcom_status num_slots %d to %d", in receive_rcom_status()
273 num_slots, ls->ls_num_slots); in receive_rcom_status()
275 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, 0); in receive_rcom_status()
279 dlm_slots_copy_out(ls, rc); in receive_rcom_status()
280 spin_unlock_bh(&ls->ls_recover_lock); in receive_rcom_status()
286 static void receive_sync_reply(struct dlm_ls *ls, const struct dlm_rcom *rc_in) in receive_sync_reply() argument
288 spin_lock_bh(&ls->ls_rcom_spin); in receive_sync_reply()
289 if (!test_bit(LSFL_RCOM_WAIT, &ls->ls_flags) || in receive_sync_reply()
290 le64_to_cpu(rc_in->rc_id) != ls->ls_rcom_seq) { in receive_sync_reply()
291 log_debug(ls, "reject reply %d from %d seq %llx expect %llx", in receive_sync_reply()
295 (unsigned long long)ls->ls_rcom_seq); in receive_sync_reply()
298 memcpy(ls->ls_recover_buf, rc_in, in receive_sync_reply()
300 set_bit(LSFL_RCOM_READY, &ls->ls_flags); in receive_sync_reply()
301 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags); in receive_sync_reply()
302 wake_up(&ls->ls_wait_general); in receive_sync_reply()
304 spin_unlock_bh(&ls->ls_rcom_spin); in receive_sync_reply()
307 int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name, in dlm_rcom_names() argument
314 ls->ls_recover_nodeid = nodeid; in dlm_rcom_names()
317 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len, in dlm_rcom_names()
323 allow_sync_reply(ls, &rc->rc_id); in dlm_rcom_names()
324 memset(ls->ls_recover_buf, 0, DLM_MAX_SOCKET_BUFSIZE); in dlm_rcom_names()
328 error = dlm_wait_function(ls, &rcom_response); in dlm_rcom_names()
329 disallow_sync_reply(ls); in dlm_rcom_names()
336 static void receive_rcom_names(struct dlm_ls *ls, const struct dlm_rcom *rc_in, in receive_rcom_names() argument
348 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES_REPLY, outlen, in receive_rcom_names()
355 dlm_copy_master_names(ls, rc_in->rc_buf, inlen, rc->rc_buf, outlen, in receive_rcom_names()
364 struct dlm_ls *ls = r->res_ls; in dlm_send_rcom_lookup() local
367 error = create_rcom(ls, dir_nodeid, DLM_RCOM_LOOKUP, r->res_length, in dlm_send_rcom_lookup()
379 static void receive_rcom_lookup(struct dlm_ls *ls, in receive_rcom_lookup() argument
390 log_error(ls, "receive_rcom_lookup dump from %d", nodeid); in receive_rcom_lookup()
391 dlm_dump_rsb_name(ls, rc_in->rc_buf, len); in receive_rcom_lookup()
395 error = create_rcom(ls, nodeid, DLM_RCOM_LOOKUP_REPLY, 0, &rc, &mh, in receive_rcom_lookup()
400 error = dlm_master_lookup(ls, nodeid, rc_in->rc_buf, len, in receive_rcom_lookup()
411 static void receive_rcom_lookup_reply(struct dlm_ls *ls, in receive_rcom_lookup_reply() argument
414 dlm_recover_master_reply(ls, rc_in); in receive_rcom_lookup_reply()
449 struct dlm_ls *ls = r->res_ls; in dlm_send_rcom_lock() local
456 len += ls->ls_lvblen; in dlm_send_rcom_lock()
458 error = create_rcom(ls, r->res_nodeid, DLM_RCOM_LOCK, len, &rc, &mh, in dlm_send_rcom_lock()
473 static void receive_rcom_lock(struct dlm_ls *ls, const struct dlm_rcom *rc_in, in receive_rcom_lock() argument
482 dlm_recover_master_copy(ls, rc_in, &rl_remid, &rl_result); in receive_rcom_lock()
484 error = create_rcom(ls, nodeid, DLM_RCOM_LOCK_REPLY, in receive_rcom_lock()
582 void dlm_receive_rcom(struct dlm_ls *ls, const struct dlm_rcom *rc, int nodeid) in dlm_receive_rcom() argument
616 spin_lock_bh(&ls->ls_recover_lock); in dlm_receive_rcom()
617 status = ls->ls_recover_status; in dlm_receive_rcom()
618 stop = dlm_recovery_stopped(ls); in dlm_receive_rcom()
619 seq = ls->ls_recover_seq; in dlm_receive_rcom()
620 spin_unlock_bh(&ls->ls_recover_lock); in dlm_receive_rcom()
636 receive_rcom_status(ls, rc, seq); in dlm_receive_rcom()
640 receive_rcom_names(ls, rc, seq); in dlm_receive_rcom()
644 receive_rcom_lookup(ls, rc, seq); in dlm_receive_rcom()
650 receive_rcom_lock(ls, rc, seq); in dlm_receive_rcom()
654 receive_sync_reply(ls, rc); in dlm_receive_rcom()
658 receive_sync_reply(ls, rc); in dlm_receive_rcom()
662 receive_rcom_lookup_reply(ls, rc); in dlm_receive_rcom()
668 dlm_recover_process_copy(ls, rc, seq); in dlm_receive_rcom()
672 log_error(ls, "receive_rcom bad type %d", in dlm_receive_rcom()
678 log_limit(ls, "dlm_receive_rcom ignore msg %d " in dlm_receive_rcom()
685 status, ls->ls_generation); in dlm_receive_rcom()
688 log_error(ls, "recovery message %d from %d is too short", in dlm_receive_rcom()