• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500v2-V1.0.0.60_1.0.38/src/linux/linux-2.6/fs/dlm/

Lines Matching refs:ls

28 int dlm_create_debug_file(struct dlm_ls *ls);
29 void dlm_delete_debug_file(struct dlm_ls *ls);
31 static inline int dlm_create_debug_file(struct dlm_ls *ls) { return 0; }
32 static inline void dlm_delete_debug_file(struct dlm_ls *ls) { }
42 static ssize_t dlm_control_store(struct dlm_ls *ls, const char *buf, size_t len)
47 ls = dlm_find_lockspace_local(ls->ls_local_handle);
48 if (!ls)
53 dlm_ls_stop(ls);
56 dlm_ls_start(ls);
61 dlm_put_lockspace(ls);
65 static ssize_t dlm_event_store(struct dlm_ls *ls, const char *buf, size_t len)
67 ls->ls_uevent_result = simple_strtol(buf, NULL, 0);
68 set_bit(LSFL_UEVENT_WAIT, &ls->ls_flags);
69 wake_up(&ls->ls_uevent_wait);
73 static ssize_t dlm_id_show(struct dlm_ls *ls, char *buf)
75 return snprintf(buf, PAGE_SIZE, "%u\n", ls->ls_global_id);
78 static ssize_t dlm_id_store(struct dlm_ls *ls, const char *buf, size_t len)
80 ls->ls_global_id = simple_strtoul(buf, NULL, 0);
84 static ssize_t dlm_recover_status_show(struct dlm_ls *ls, char *buf)
86 uint32_t status = dlm_recover_status(ls);
90 static ssize_t dlm_recover_nodeid_show(struct dlm_ls *ls, char *buf)
92 return snprintf(buf, PAGE_SIZE, "%d\n", ls->ls_recover_nodeid);
139 struct dlm_ls *ls = container_of(kobj, struct dlm_ls, ls_kobj);
141 return a->show ? a->show(ls, buf) : 0;
147 struct dlm_ls *ls = container_of(kobj, struct dlm_ls, ls_kobj);
149 return a->store ? a->store(ls, buf, len) : len;
154 struct dlm_ls *ls = container_of(k, struct dlm_ls, ls_kobj);
155 kfree(ls);
174 static int kobject_setup(struct dlm_ls *ls)
180 snprintf(lsname, DLM_LOCKSPACE_LEN, "%s", ls->ls_name);
182 error = kobject_set_name(&ls->ls_kobj, "%s", lsname);
186 ls->ls_kobj.kset = &dlm_kset;
187 ls->ls_kobj.ktype = &dlm_ktype;
191 static int do_uevent(struct dlm_ls *ls, int in)
196 kobject_uevent(&ls->ls_kobj, KOBJ_ONLINE);
198 kobject_uevent(&ls->ls_kobj, KOBJ_OFFLINE);
200 error = wait_event_interruptible(ls->ls_uevent_wait,
201 test_and_clear_bit(LSFL_UEVENT_WAIT, &ls->ls_flags));
205 error = ls->ls_uevent_result;
234 struct dlm_ls *ls;
237 list_for_each_entry(ls, &lslist, ls_list)
238 dlm_scan_rsbs(ls);
264 struct dlm_ls *ls;
268 list_for_each_entry(ls, &lslist, ls_list) {
269 if (ls->ls_namelen == namelen &&
270 memcmp(ls->ls_name, name, namelen) == 0)
273 ls = NULL;
276 return ls;
281 struct dlm_ls *ls;
285 list_for_each_entry(ls, &lslist, ls_list) {
286 if (ls->ls_global_id == id) {
287 ls->ls_count++;
291 ls = NULL;
294 return ls;
299 struct dlm_ls *ls;
302 list_for_each_entry(ls, &lslist, ls_list) {
303 if (ls->ls_local_handle == lockspace) {
304 ls->ls_count++;
308 ls = NULL;
311 return ls;
316 struct dlm_ls *ls;
319 list_for_each_entry(ls, &lslist, ls_list) {
320 if (ls->ls_device.minor == minor) {
321 ls->ls_count++;
325 ls = NULL;
328 return ls;
331 void dlm_put_lockspace(struct dlm_ls *ls)
334 ls->ls_count--;
338 static void remove_lockspace(struct dlm_ls *ls)
342 if (ls->ls_count == 0) {
343 list_del(&ls->ls_list);
396 struct dlm_ls *ls;
408 ls = dlm_find_lockspace_name(name, namelen);
409 if (ls) {
410 *lockspace = ls;
415 ls = kzalloc(sizeof(struct dlm_ls) + namelen, GFP_KERNEL);
416 if (!ls)
418 memcpy(ls->ls_name, name, namelen);
419 ls->ls_namelen = namelen;
420 ls->ls_exflags = flags;
421 ls->ls_lvblen = lvblen;
422 ls->ls_count = 0;
423 ls->ls_flags = 0;
426 ls->ls_rsbtbl_size = size;
428 ls->ls_rsbtbl = kmalloc(sizeof(struct dlm_rsbtable) * size, GFP_KERNEL);
429 if (!ls->ls_rsbtbl)
432 INIT_LIST_HEAD(&ls->ls_rsbtbl[i].list);
433 INIT_LIST_HEAD(&ls->ls_rsbtbl[i].toss);
434 rwlock_init(&ls->ls_rsbtbl[i].lock);
438 ls->ls_lkbtbl_size = size;
440 ls->ls_lkbtbl = kmalloc(sizeof(struct dlm_lkbtable) * size, GFP_KERNEL);
441 if (!ls->ls_lkbtbl)
444 INIT_LIST_HEAD(&ls->ls_lkbtbl[i].list);
445 rwlock_init(&ls->ls_lkbtbl[i].lock);
446 ls->ls_lkbtbl[i].counter = 1;
450 ls->ls_dirtbl_size = size;
452 ls->ls_dirtbl = kmalloc(sizeof(struct dlm_dirtable) * size, GFP_KERNEL);
453 if (!ls->ls_dirtbl)
456 INIT_LIST_HEAD(&ls->ls_dirtbl[i].list);
457 rwlock_init(&ls->ls_dirtbl[i].lock);
460 INIT_LIST_HEAD(&ls->ls_waiters);
461 mutex_init(&ls->ls_waiters_mutex);
462 INIT_LIST_HEAD(&ls->ls_orphans);
463 mutex_init(&ls->ls_orphans_mutex);
465 INIT_LIST_HEAD(&ls->ls_nodes);
466 INIT_LIST_HEAD(&ls->ls_nodes_gone);
467 ls->ls_num_nodes = 0;
468 ls->ls_low_nodeid = 0;
469 ls->ls_total_weight = 0;
470 ls->ls_node_array = NULL;
472 memset(&ls->ls_stub_rsb, 0, sizeof(struct dlm_rsb));
473 ls->ls_stub_rsb.res_ls = ls;
475 ls->ls_debug_rsb_dentry = NULL;
476 ls->ls_debug_waiters_dentry = NULL;
478 init_waitqueue_head(&ls->ls_uevent_wait);
479 ls->ls_uevent_result = 0;
481 ls->ls_recoverd_task = NULL;
482 mutex_init(&ls->ls_recoverd_active);
483 spin_lock_init(&ls->ls_recover_lock);
484 spin_lock_init(&ls->ls_rcom_spin);
485 get_random_bytes(&ls->ls_rcom_seq, sizeof(uint64_t));
486 ls->ls_recover_status = 0;
487 ls->ls_recover_seq = 0;
488 ls->ls_recover_args = NULL;
489 init_rwsem(&ls->ls_in_recovery);
490 INIT_LIST_HEAD(&ls->ls_requestqueue);
491 mutex_init(&ls->ls_requestqueue_mutex);
492 mutex_init(&ls->ls_clear_proc_locks);
494 ls->ls_recover_buf = kmalloc(dlm_config.ci_buffer_size, GFP_KERNEL);
495 if (!ls->ls_recover_buf)
498 INIT_LIST_HEAD(&ls->ls_recover_list);
499 spin_lock_init(&ls->ls_recover_list_lock);
500 ls->ls_recover_list_count = 0;
501 ls->ls_local_handle = ls;
502 init_waitqueue_head(&ls->ls_wait_general);
503 INIT_LIST_HEAD(&ls->ls_root_list);
504 init_rwsem(&ls->ls_root_sem);
506 down_write(&ls->ls_in_recovery);
509 list_add(&ls->ls_list, &lslist);
512 /* needs to find ls in lslist */
513 error = dlm_recoverd_start(ls);
515 log_error(ls, "can't start dlm_recoverd %d", error);
519 dlm_create_debug_file(ls);
521 error = kobject_setup(ls);
525 error = kobject_register(&ls->ls_kobj);
529 error = do_uevent(ls, 1);
533 *lockspace = ls;
537 kobject_unregister(&ls->ls_kobj);
539 dlm_delete_debug_file(ls);
540 dlm_recoverd_stop(ls);
543 list_del(&ls->ls_list);
545 kfree(ls->ls_recover_buf);
547 kfree(ls->ls_dirtbl);
549 kfree(ls->ls_lkbtbl);
551 kfree(ls->ls_rsbtbl);
553 kfree(ls);
581 static int lockspace_busy(struct dlm_ls *ls)
591 for (i = 0; i < ls->ls_lkbtbl_size; i++) {
592 read_lock(&ls->ls_lkbtbl[i].lock);
593 if (!list_empty(&ls->ls_lkbtbl[i].list)) {
595 list_for_each_entry(lkb, &ls->ls_lkbtbl[i].list,
598 read_unlock(&ls->ls_lkbtbl[i].lock);
603 read_unlock(&ls->ls_lkbtbl[i].lock);
608 static int release_lockspace(struct dlm_ls *ls, int force)
614 int busy = lockspace_busy(ls);
620 do_uevent(ls, 0);
622 dlm_recoverd_stop(ls);
624 remove_lockspace(ls);
626 dlm_delete_debug_file(ls);
630 kfree(ls->ls_recover_buf);
636 dlm_dir_clear(ls);
637 kfree(ls->ls_dirtbl);
643 for (i = 0; i < ls->ls_lkbtbl_size; i++) {
644 head = &ls->ls_lkbtbl[i].list;
661 kfree(ls->ls_lkbtbl);
667 for (i = 0; i < ls->ls_rsbtbl_size; i++) {
668 head = &ls->ls_rsbtbl[i].list;
677 head = &ls->ls_rsbtbl[i].toss;
686 kfree(ls->ls_rsbtbl);
692 dlm_purge_requestqueue(ls);
693 kfree(ls->ls_recover_args);
694 dlm_clear_free_entries(ls);
695 dlm_clear_members(ls);
696 dlm_clear_members_gone(ls);
697 kfree(ls->ls_node_array);
698 kobject_unregister(&ls->ls_kobj);
699 /* The ls structure will be freed when the kobject is done with */
727 struct dlm_ls *ls;
729 ls = dlm_find_lockspace_local(lockspace);
730 if (!ls)
732 dlm_put_lockspace(ls);
733 return release_lockspace(ls, force);