Lines Matching full:ls

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