Lines Matching defs:ls

25 static int rcom_response(struct dlm_ls *ls)
27 return test_bit(LSFL_RCOM_READY, &ls->ls_flags);
30 static void _create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
39 rc->rc_header.u.h_lockspace = cpu_to_le32(ls->ls_global_id);
50 static int create_rcom(struct dlm_ls *ls, int to_nodeid, int type, int len,
65 _create_rcom(ls, to_nodeid, type, len, rc_ret, mb, mb_len, seq);
70 static int create_rcom_stateless(struct dlm_ls *ls, int to_nodeid, int type,
86 _create_rcom(ls, to_nodeid, type, len, rc_ret, mb, mb_len, seq);
102 static void set_rcom_status(struct dlm_ls *ls, struct rcom_status *rs,
112 static void set_rcom_config(struct dlm_ls *ls, struct rcom_config *rf,
115 rf->rf_lvblen = cpu_to_le32(ls->ls_lvblen);
116 rf->rf_lsflags = cpu_to_le32(ls->ls_exflags);
118 rf->rf_our_slot = cpu_to_le16(ls->ls_slot);
120 rf->rf_generation = cpu_to_le32(ls->ls_generation);
123 static int check_rcom_config(struct dlm_ls *ls, struct dlm_rcom *rc, int nodeid)
128 log_error(ls, "version mismatch: %x nodeid %d: %x",
134 if (le32_to_cpu(rf->rf_lvblen) != ls->ls_lvblen ||
135 le32_to_cpu(rf->rf_lsflags) != ls->ls_exflags) {
136 log_error(ls, "config mismatch: %d,%x nodeid %d: %d,%x",
137 ls->ls_lvblen, ls->ls_exflags, nodeid,
145 static void allow_sync_reply(struct dlm_ls *ls, __le64 *new_seq)
147 spin_lock(&ls->ls_rcom_spin);
148 *new_seq = cpu_to_le64(++ls->ls_rcom_seq);
149 set_bit(LSFL_RCOM_WAIT, &ls->ls_flags);
150 spin_unlock(&ls->ls_rcom_spin);
153 static void disallow_sync_reply(struct dlm_ls *ls)
155 spin_lock(&ls->ls_rcom_spin);
156 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags);
157 clear_bit(LSFL_RCOM_READY, &ls->ls_flags);
158 spin_unlock(&ls->ls_rcom_spin);
172 int dlm_rcom_status(struct dlm_ls *ls, int nodeid, uint32_t status_flags,
179 ls->ls_recover_nodeid = nodeid;
182 rc = ls->ls_recover_buf;
183 rc->rc_result = cpu_to_le32(dlm_recover_status(ls));
188 error = create_rcom_stateless(ls, nodeid, DLM_RCOM_STATUS,
194 set_rcom_status(ls, (struct rcom_status *)rc->rc_buf, status_flags);
196 allow_sync_reply(ls, &rc->rc_id);
197 memset(ls->ls_recover_buf, 0, DLM_MAX_SOCKET_BUFSIZE);
201 error = dlm_wait_function(ls, &rcom_response);
202 disallow_sync_reply(ls);
208 rc = ls->ls_recover_buf;
212 log_debug(ls, "remote node %d not ready", nodeid);
216 error = check_rcom_config(ls, rc, nodeid);
224 static void receive_rcom_status(struct dlm_ls *ls,
238 status = dlm_recover_status(ls);
245 status = dlm_recover_status(ls);
249 spin_lock(&ls->ls_recover_lock);
250 status = ls->ls_recover_status;
251 num_slots = ls->ls_num_slots;
252 spin_unlock(&ls->ls_recover_lock);
256 error = create_rcom_stateless(ls, nodeid, DLM_RCOM_STATUS_REPLY,
265 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, num_slots);
270 spin_lock(&ls->ls_recover_lock);
271 if (ls->ls_num_slots != num_slots) {
272 spin_unlock(&ls->ls_recover_lock);
273 log_debug(ls, "receive_rcom_status num_slots %d to %d",
274 num_slots, ls->ls_num_slots);
276 set_rcom_config(ls, (struct rcom_config *)rc->rc_buf, 0);
280 dlm_slots_copy_out(ls, rc);
281 spin_unlock(&ls->ls_recover_lock);
287 static void receive_sync_reply(struct dlm_ls *ls, const struct dlm_rcom *rc_in)
289 spin_lock(&ls->ls_rcom_spin);
290 if (!test_bit(LSFL_RCOM_WAIT, &ls->ls_flags) ||
291 le64_to_cpu(rc_in->rc_id) != ls->ls_rcom_seq) {
292 log_debug(ls, "reject reply %d from %d seq %llx expect %llx",
296 (unsigned long long)ls->ls_rcom_seq);
299 memcpy(ls->ls_recover_buf, rc_in,
301 set_bit(LSFL_RCOM_READY, &ls->ls_flags);
302 clear_bit(LSFL_RCOM_WAIT, &ls->ls_flags);
303 wake_up(&ls->ls_wait_general);
305 spin_unlock(&ls->ls_rcom_spin);
308 int dlm_rcom_names(struct dlm_ls *ls, int nodeid, char *last_name,
315 ls->ls_recover_nodeid = nodeid;
318 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES, last_len,
324 allow_sync_reply(ls, &rc->rc_id);
325 memset(ls->ls_recover_buf, 0, DLM_MAX_SOCKET_BUFSIZE);
329 error = dlm_wait_function(ls, &rcom_response);
330 disallow_sync_reply(ls);
337 static void receive_rcom_names(struct dlm_ls *ls, const struct dlm_rcom *rc_in,
349 error = create_rcom(ls, nodeid, DLM_RCOM_NAMES_REPLY, outlen,
356 dlm_copy_master_names(ls, rc_in->rc_buf, inlen, rc->rc_buf, outlen,
365 struct dlm_ls *ls = r->res_ls;
368 error = create_rcom(ls, dir_nodeid, DLM_RCOM_LOOKUP, r->res_length,
380 static void receive_rcom_lookup(struct dlm_ls *ls,
391 log_error(ls, "receive_rcom_lookup dump from %d", nodeid);
392 dlm_dump_rsb_name(ls, rc_in->rc_buf, len);
396 error = create_rcom(ls, nodeid, DLM_RCOM_LOOKUP_REPLY, 0, &rc, &mh,
401 error = dlm_master_lookup(ls, nodeid, rc_in->rc_buf, len,
412 static void receive_rcom_lookup_reply(struct dlm_ls *ls,
415 dlm_recover_master_reply(ls, rc_in);
450 struct dlm_ls *ls = r->res_ls;
457 len += ls->ls_lvblen;
459 error = create_rcom(ls, r->res_nodeid, DLM_RCOM_LOCK, len, &rc, &mh,
474 static void receive_rcom_lock(struct dlm_ls *ls, const struct dlm_rcom *rc_in,
483 dlm_recover_master_copy(ls, rc_in, &rl_remid, &rl_result);
485 error = create_rcom(ls, nodeid, DLM_RCOM_LOCK_REPLY,
583 void dlm_receive_rcom(struct dlm_ls *ls, const struct dlm_rcom *rc, int nodeid)
617 spin_lock(&ls->ls_recover_lock);
618 status = ls->ls_recover_status;
619 stop = dlm_recovery_stopped(ls);
620 seq = ls->ls_recover_seq;
621 spin_unlock(&ls->ls_recover_lock);
637 receive_rcom_status(ls, rc, seq);
641 receive_rcom_names(ls, rc, seq);
645 receive_rcom_lookup(ls, rc, seq);
651 receive_rcom_lock(ls, rc, seq);
655 receive_sync_reply(ls, rc);
659 receive_sync_reply(ls, rc);
663 receive_rcom_lookup_reply(ls, rc);
669 dlm_recover_process_copy(ls, rc, seq);
673 log_error(ls, "receive_rcom bad type %d",
679 log_limit(ls, "dlm_receive_rcom ignore msg %d "
686 status, ls->ls_generation);
689 log_error(ls, "recovery message %d from %d is too short",