Lines Matching refs:cinfo

188 	struct md_cluster_info *cinfo = mddev->cluster_info;  in lockres_init()  local
195 res->ls = cinfo->lockspace; in lockres_init()
272 struct md_cluster_info *cinfo = mddev->cluster_info; in read_resync_info() local
278 cinfo->suspend_hi = le64_to_cpu(ri.hi); in read_resync_info()
279 cinfo->suspend_lo = le64_to_cpu(ri.lo); in read_resync_info()
289 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_bitmaps() local
295 while (cinfo->recovery_map) { in recover_bitmaps()
296 slot = fls64((u64)cinfo->recovery_map) - 1; in recover_bitmaps()
318 spin_lock_irq(&cinfo->suspend_lock); in recover_bitmaps()
319 cinfo->suspend_hi = 0; in recover_bitmaps()
320 cinfo->suspend_lo = 0; in recover_bitmaps()
321 cinfo->suspend_from = -1; in recover_bitmaps()
322 spin_unlock_irq(&cinfo->suspend_lock); in recover_bitmaps()
348 clear_bit(slot, &cinfo->recovery_map); in recover_bitmaps()
355 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_prep() local
356 set_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state); in recover_prep()
361 struct md_cluster_info *cinfo = mddev->cluster_info; in __recover_slot() local
363 set_bit(slot, &cinfo->recovery_map); in __recover_slot()
364 if (!cinfo->recovery_thread) { in __recover_slot()
365 cinfo->recovery_thread = md_register_thread(recover_bitmaps, in __recover_slot()
367 if (!cinfo->recovery_thread) { in __recover_slot()
372 md_wakeup_thread(cinfo->recovery_thread); in __recover_slot()
378 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_slot() local
383 cinfo->slot_number); in recover_slot()
394 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_done() local
396 cinfo->slot_number = our_slot; in recover_done()
399 if (test_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state)) { in recover_done()
400 complete(&cinfo->completion); in recover_done()
401 clear_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state); in recover_done()
403 clear_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state); in recover_done()
422 struct md_cluster_info *cinfo = res->mddev->cluster_info; in ack_bast() local
425 if (test_bit(MD_CLUSTER_ALREADY_IN_CLUSTER, &cinfo->state)) in ack_bast()
426 md_wakeup_thread(cinfo->recv_thread); in ack_bast()
428 set_bit(MD_CLUSTER_PENDING_RECV_EVENT, &cinfo->state); in ack_bast()
434 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_suspend_info() local
436 spin_lock_irq(&cinfo->suspend_lock); in remove_suspend_info()
437 cinfo->suspend_hi = 0; in remove_suspend_info()
438 cinfo->suspend_lo = 0; in remove_suspend_info()
439 spin_unlock_irq(&cinfo->suspend_lock); in remove_suspend_info()
446 struct md_cluster_info *cinfo = mddev->cluster_info; in process_suspend_info() local
490 md_bitmap_sync_with_cluster(mddev, cinfo->sync_low, in process_suspend_info()
491 cinfo->sync_hi, lo, hi); in process_suspend_info()
492 cinfo->sync_low = lo; in process_suspend_info()
493 cinfo->sync_hi = hi; in process_suspend_info()
496 spin_lock_irq(&cinfo->suspend_lock); in process_suspend_info()
497 cinfo->suspend_from = slot; in process_suspend_info()
498 cinfo->suspend_lo = lo; in process_suspend_info()
499 cinfo->suspend_hi = hi; in process_suspend_info()
500 spin_unlock_irq(&cinfo->suspend_lock); in process_suspend_info()
507 struct md_cluster_info *cinfo = mddev->cluster_info; in process_add_new_disk() local
517 init_completion(&cinfo->newdisk_completion); in process_add_new_disk()
518 set_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state); in process_add_new_disk()
520 wait_for_completion_timeout(&cinfo->newdisk_completion, in process_add_new_disk()
522 clear_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state); in process_add_new_disk()
529 struct md_cluster_info *cinfo = mddev->cluster_info; in process_metadata_update() local
532 dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR); in process_metadata_update()
535 test_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state)); in process_metadata_update()
623 struct md_cluster_info *cinfo = thread->mddev->cluster_info; in recv_daemon() local
624 struct dlm_lock_resource *ack_lockres = cinfo->ack_lockres; in recv_daemon()
625 struct dlm_lock_resource *message_lockres = cinfo->message_lockres; in recv_daemon()
629 mutex_lock(&cinfo->recv_mutex); in recv_daemon()
633 mutex_unlock(&cinfo->recv_mutex); in recv_daemon()
660 mutex_unlock(&cinfo->recv_mutex); in recv_daemon()
667 static int lock_token(struct md_cluster_info *cinfo) in lock_token() argument
671 error = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX); in lock_token()
677 mutex_lock(&cinfo->recv_mutex); in lock_token()
685 static int lock_comm(struct md_cluster_info *cinfo, bool mddev_locked) in lock_comm() argument
688 struct mddev *mddev = cinfo->mddev; in lock_comm()
697 &cinfo->state)) { in lock_comm()
699 &cinfo->state); in lock_comm()
705 wait_event(cinfo->wait, in lock_comm()
706 !test_and_set_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state)); in lock_comm()
707 rv = lock_token(cinfo); in lock_comm()
709 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); in lock_comm()
713 static void unlock_comm(struct md_cluster_info *cinfo) in unlock_comm() argument
715 WARN_ON(cinfo->token_lockres->mode != DLM_LOCK_EX); in unlock_comm()
716 mutex_unlock(&cinfo->recv_mutex); in unlock_comm()
717 dlm_unlock_sync(cinfo->token_lockres); in unlock_comm()
718 clear_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state); in unlock_comm()
719 wake_up(&cinfo->wait); in unlock_comm()
734 static int __sendmsg(struct md_cluster_info *cinfo, struct cluster_msg *cmsg) in __sendmsg() argument
737 int slot = cinfo->slot_number - 1; in __sendmsg()
741 error = dlm_lock_sync(cinfo->message_lockres, DLM_LOCK_EX); in __sendmsg()
747 memcpy(cinfo->message_lockres->lksb.sb_lvbptr, (void *)cmsg, in __sendmsg()
750 error = dlm_lock_sync(cinfo->message_lockres, DLM_LOCK_CW); in __sendmsg()
758 error = dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_EX); in __sendmsg()
766 error = dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_CR); in __sendmsg()
774 error = dlm_unlock_sync(cinfo->message_lockres); in __sendmsg()
785 static int sendmsg(struct md_cluster_info *cinfo, struct cluster_msg *cmsg, in sendmsg() argument
790 ret = lock_comm(cinfo, mddev_locked); in sendmsg()
792 ret = __sendmsg(cinfo, cmsg); in sendmsg()
793 unlock_comm(cinfo); in sendmsg()
800 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_all_resync_info() local
813 if (i == (cinfo->slot_number - 1)) { in gather_all_resync_info()
824 (unsigned long long) cinfo->suspend_lo, in gather_all_resync_info()
825 (unsigned long long) cinfo->suspend_hi, in gather_all_resync_info()
827 cinfo->suspend_from = i; in gather_all_resync_info()
859 struct md_cluster_info *cinfo; in join() local
863 cinfo = kzalloc(sizeof(struct md_cluster_info), GFP_KERNEL); in join()
864 if (!cinfo) in join()
867 INIT_LIST_HEAD(&cinfo->suspend_list); in join()
868 spin_lock_init(&cinfo->suspend_lock); in join()
869 init_completion(&cinfo->completion); in join()
870 set_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state); in join()
871 init_waitqueue_head(&cinfo->wait); in join()
872 mutex_init(&cinfo->recv_mutex); in join()
874 mddev->cluster_info = cinfo; in join()
875 cinfo->mddev = mddev; in join()
881 &md_ls_ops, mddev, &ops_rv, &cinfo->lockspace); in join()
884 wait_for_completion(&cinfo->completion); in join()
885 if (nodes < cinfo->slot_number) { in join()
887 cinfo->slot_number, nodes); in join()
893 cinfo->recv_thread = md_register_thread(recv_daemon, mddev, "cluster_recv"); in join()
894 if (!cinfo->recv_thread) { in join()
898 cinfo->message_lockres = lockres_init(mddev, "message", NULL, 1); in join()
899 if (!cinfo->message_lockres) in join()
901 cinfo->token_lockres = lockres_init(mddev, "token", NULL, 0); in join()
902 if (!cinfo->token_lockres) in join()
904 cinfo->no_new_dev_lockres = lockres_init(mddev, "no-new-dev", NULL, 0); in join()
905 if (!cinfo->no_new_dev_lockres) in join()
908 ret = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX); in join()
914 cinfo->ack_lockres = lockres_init(mddev, "ack", ack_bast, 0); in join()
915 if (!cinfo->ack_lockres) { in join()
920 if (dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_CR)) in join()
923 dlm_unlock_sync(cinfo->token_lockres); in join()
925 if (dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR)) in join()
929 pr_info("md-cluster: Joined cluster %s slot %d\n", str, cinfo->slot_number); in join()
930 snprintf(str, 64, "bitmap%04d", cinfo->slot_number - 1); in join()
931 cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1); in join()
932 if (!cinfo->bitmap_lockres) { in join()
936 if (dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW)) { in join()
942 cinfo->resync_lockres = lockres_init(mddev, "resync", NULL, 0); in join()
943 if (!cinfo->resync_lockres) { in join()
950 set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); in join()
951 md_unregister_thread(&cinfo->recovery_thread); in join()
952 md_unregister_thread(&cinfo->recv_thread); in join()
953 lockres_free(cinfo->message_lockres); in join()
954 lockres_free(cinfo->token_lockres); in join()
955 lockres_free(cinfo->ack_lockres); in join()
956 lockres_free(cinfo->no_new_dev_lockres); in join()
957 lockres_free(cinfo->resync_lockres); in join()
958 lockres_free(cinfo->bitmap_lockres); in join()
959 if (cinfo->lockspace) in join()
960 dlm_release_lockspace(cinfo->lockspace, 2); in join()
962 kfree(cinfo); in join()
968 struct md_cluster_info *cinfo = mddev->cluster_info; in load_bitmaps() local
973 set_bit(MD_CLUSTER_ALREADY_IN_CLUSTER, &cinfo->state); in load_bitmaps()
975 if (test_and_clear_bit(MD_CLUSTER_PENDING_RECV_EVENT, &cinfo->state)) in load_bitmaps()
976 md_wakeup_thread(cinfo->recv_thread); in load_bitmaps()
981 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_bitmap() local
986 err = sendmsg(cinfo, &cmsg, 1); in resync_bitmap()
995 struct md_cluster_info *cinfo = mddev->cluster_info; in leave() local
997 if (!cinfo) in leave()
1008 if ((cinfo->slot_number > 0 && mddev->recovery_cp != MaxSector) || in leave()
1013 set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); in leave()
1014 md_unregister_thread(&cinfo->recovery_thread); in leave()
1015 md_unregister_thread(&cinfo->recv_thread); in leave()
1016 lockres_free(cinfo->message_lockres); in leave()
1017 lockres_free(cinfo->token_lockres); in leave()
1018 lockres_free(cinfo->ack_lockres); in leave()
1019 lockres_free(cinfo->no_new_dev_lockres); in leave()
1020 lockres_free(cinfo->resync_lockres); in leave()
1021 lockres_free(cinfo->bitmap_lockres); in leave()
1023 dlm_release_lockspace(cinfo->lockspace, 2); in leave()
1024 kfree(cinfo); in leave()
1034 struct md_cluster_info *cinfo = mddev->cluster_info; in slot_number() local
1036 return cinfo->slot_number - 1; in slot_number()
1047 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_start() local
1055 &cinfo->state); in metadata_update_start()
1059 wait_event(cinfo->wait, in metadata_update_start()
1060 !test_and_set_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state) || in metadata_update_start()
1061 test_and_clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state)); in metadata_update_start()
1064 if (cinfo->token_lockres->mode == DLM_LOCK_EX) { in metadata_update_start()
1065 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); in metadata_update_start()
1069 ret = lock_token(cinfo); in metadata_update_start()
1070 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state); in metadata_update_start()
1076 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_finish() local
1093 ret = __sendmsg(cinfo, &cmsg); in metadata_update_finish()
1096 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state); in metadata_update_finish()
1097 unlock_comm(cinfo); in metadata_update_finish()
1103 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_cancel() local
1104 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state); in metadata_update_cancel()
1105 unlock_comm(cinfo); in metadata_update_cancel()
1110 struct md_cluster_info *cinfo = mddev->cluster_info; in update_bitmap_size() local
1116 ret = sendmsg(cinfo, &cmsg, 0); in update_bitmap_size()
1256 struct md_cluster_info *cinfo = mddev->cluster_info; in update_size() local
1263 if (lock_comm(cinfo, 1)) { in update_size()
1282 ret = __sendmsg(cinfo, &cmsg); in update_size()
1286 unlock_comm(cinfo); in update_size()
1291 unlock_comm(cinfo); in update_size()
1303 ret = __sendmsg(cinfo, &cmsg); in update_size()
1314 ret = __sendmsg(cinfo, &cmsg); in update_size()
1319 unlock_comm(cinfo); in update_size()
1324 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_start() local
1325 return dlm_lock_sync_interruptible(cinfo->resync_lockres, DLM_LOCK_EX, mddev); in resync_start()
1330 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_info_get() local
1332 spin_lock_irq(&cinfo->suspend_lock); in resync_info_get()
1333 *lo = cinfo->suspend_lo; in resync_info_get()
1334 *hi = cinfo->suspend_hi; in resync_info_get()
1335 spin_unlock_irq(&cinfo->suspend_lock); in resync_info_get()
1340 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_info_update() local
1346 memcpy(&ri, cinfo->bitmap_lockres->lksb.sb_lvbptr, sizeof(struct resync_info)); in resync_info_update()
1351 add_resync_info(cinfo->bitmap_lockres, lo, hi); in resync_info_update()
1353 dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW); in resync_info_update()
1363 return sendmsg(cinfo, &cmsg, 1); in resync_info_update()
1365 return sendmsg(cinfo, &cmsg, 0); in resync_info_update()
1370 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_finish() local
1381 dlm_unlock_sync(cinfo->resync_lockres); in resync_finish()
1388 struct md_cluster_info *cinfo = mddev->cluster_info; in area_resyncing() local
1392 test_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state)) in area_resyncing()
1395 spin_lock_irq(&cinfo->suspend_lock); in area_resyncing()
1396 if (hi > cinfo->suspend_lo && lo < cinfo->suspend_hi) in area_resyncing()
1398 spin_unlock_irq(&cinfo->suspend_lock); in area_resyncing()
1408 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk() local
1418 if (lock_comm(cinfo, 1)) in add_new_disk()
1420 ret = __sendmsg(cinfo, &cmsg); in add_new_disk()
1422 unlock_comm(cinfo); in add_new_disk()
1425 cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE; in add_new_disk()
1426 ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX); in add_new_disk()
1427 cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE; in add_new_disk()
1432 unlock_comm(cinfo); in add_new_disk()
1434 dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR); in add_new_disk()
1447 set_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state); in add_new_disk()
1448 wake_up(&cinfo->wait); in add_new_disk()
1455 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk_cancel() local
1456 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state); in add_new_disk_cancel()
1457 unlock_comm(cinfo); in add_new_disk_cancel()
1462 struct md_cluster_info *cinfo = mddev->cluster_info; in new_disk_ack() local
1464 if (!test_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state)) { in new_disk_ack()
1470 dlm_unlock_sync(cinfo->no_new_dev_lockres); in new_disk_ack()
1471 complete(&cinfo->newdisk_completion); in new_disk_ack()
1478 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_disk() local
1481 return sendmsg(cinfo, &cmsg, 1); in remove_disk()
1488 struct md_cluster_info *cinfo = mddev->cluster_info; in lock_all_bitmaps() local
1490 cinfo->other_bitmap_lockres = in lock_all_bitmaps()
1493 if (!cinfo->other_bitmap_lockres) { in lock_all_bitmaps()
1505 cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1); in lock_all_bitmaps()
1506 if (!cinfo->other_bitmap_lockres[i]) in lock_all_bitmaps()
1509 cinfo->other_bitmap_lockres[i]->flags |= DLM_LKF_NOQUEUE; in lock_all_bitmaps()
1510 ret = dlm_lock_sync(cinfo->other_bitmap_lockres[i], DLM_LOCK_PW); in lock_all_bitmaps()
1521 struct md_cluster_info *cinfo = mddev->cluster_info; in unlock_all_bitmaps() local
1525 if (cinfo->other_bitmap_lockres) { in unlock_all_bitmaps()
1527 if (cinfo->other_bitmap_lockres[i]) { in unlock_all_bitmaps()
1528 lockres_free(cinfo->other_bitmap_lockres[i]); in unlock_all_bitmaps()
1531 kfree(cinfo->other_bitmap_lockres); in unlock_all_bitmaps()
1532 cinfo->other_bitmap_lockres = NULL; in unlock_all_bitmaps()
1542 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_bitmaps() local
1546 err = sendmsg(cinfo, &cmsg, 1); in gather_bitmaps()
1551 if (sn == (cinfo->slot_number - 1)) in gather_bitmaps()