Lines Matching refs:ls

33 int dlm_hash2nodeid(struct dlm_ls *ls, uint32_t hash)
37 if (ls->ls_num_nodes == 1)
40 node = (hash >> 16) % ls->ls_total_weight;
41 return ls->ls_node_array[node];
50 void dlm_recover_dir_nodeid(struct dlm_ls *ls, const struct list_head *root_list)
55 r->res_dir_nodeid = dlm_hash2nodeid(ls, r->res_hash);
59 int dlm_recover_directory(struct dlm_ls *ls, uint64_t seq)
67 log_rinfo(ls, "dlm_recover_directory");
69 if (dlm_no_directory(ls))
76 list_for_each_entry(memb, &ls->ls_nodes, list) {
85 if (dlm_recovery_stopped(ls)) {
90 error = dlm_rcom_names(ls, memb->nodeid,
101 b = ls->ls_recover_buf->rc_buf;
102 left = le16_to_cpu(ls->ls_recover_buf->rc_header.h_length);
132 error = dlm_master_lookup(ls, memb->nodeid,
137 log_error(ls, "recover_dir lookup %d",
150 log_error(ls, "recover_dir lookup %d "
187 dlm_set_recover_status(ls, DLM_RS_DIR);
189 log_rinfo(ls, "dlm_recover_directory %u in %u new",
197 static struct dlm_rsb *find_rsb_root(struct dlm_ls *ls, const char *name,
203 read_lock_bh(&ls->ls_rsbtbl_lock);
204 rv = dlm_search_rsb_tree(&ls->ls_rsbtbl, name, len, &r);
205 read_unlock_bh(&ls->ls_rsbtbl_lock);
209 list_for_each_entry(r, &ls->ls_masters_list, res_masters_list) {
211 log_debug(ls, "find_rsb_root revert to root_list %s",
236 static void drop_dir_ctx(struct dlm_ls *ls, int nodeid)
240 write_lock_bh(&ls->ls_dir_dump_lock);
241 list_for_each_entry_safe(dd, safe, &ls->ls_dir_dump_list, list) {
243 log_error(ls, "drop dump seq %llu",
249 write_unlock_bh(&ls->ls_dir_dump_lock);
252 static struct dlm_dir_dump *lookup_dir_dump(struct dlm_ls *ls, int nodeid)
256 read_lock_bh(&ls->ls_dir_dump_lock);
257 list_for_each_entry(iter, &ls->ls_dir_dump_list, list) {
263 read_unlock_bh(&ls->ls_dir_dump_lock);
268 static struct dlm_dir_dump *init_dir_dump(struct dlm_ls *ls, int nodeid)
272 dd = lookup_dir_dump(ls, nodeid);
274 log_error(ls, "found ongoing dir dump for node %d, will drop it",
276 drop_dir_ctx(ls, nodeid);
283 dd->seq_init = ls->ls_recover_seq;
286 write_lock_bh(&ls->ls_dir_dump_lock);
287 list_add(&dd->list, &ls->ls_dir_dump_list);
288 write_unlock_bh(&ls->ls_dir_dump_lock);
297 void dlm_copy_master_names(struct dlm_ls *ls, const char *inbuf, int inlen,
306 read_lock_bh(&ls->ls_masters_lock);
309 dd = lookup_dir_dump(ls, nodeid);
311 log_error(ls, "failed to lookup dir dump context nodeid: %d",
317 r = find_rsb_root(ls, inbuf, inlen);
319 log_error(ls, "copy_master_names from %d start %d %.*s",
327 dd->seq_init != ls->ls_recover_seq) {
328 log_error(ls, "failed dir dump sanity check seq_init: %llu seq: %llu",
330 (unsigned long long)ls->ls_recover_seq);
334 dd = init_dir_dump(ls, nodeid);
336 log_error(ls, "failed to allocate dir dump context");
341 list = ls->ls_masters_list.next;
345 for (offset = 0; list != &ls->ls_masters_list; list = list->next) {
382 if ((list == &ls->ls_masters_list) &&
389 log_rinfo(ls, "dlm_recover_directory nodeid %d sent %u res out %u messages",
392 write_lock_bh(&ls->ls_dir_dump_lock);
394 write_unlock_bh(&ls->ls_dir_dump_lock);
398 read_unlock_bh(&ls->ls_masters_lock);