Lines Matching refs:cinfo

188 	struct md_cluster_info *cinfo = mddev->cluster_info;
195 res->ls = cinfo->lockspace;
272 struct md_cluster_info *cinfo = mddev->cluster_info;
278 cinfo->suspend_hi = le64_to_cpu(ri.hi);
279 cinfo->suspend_lo = le64_to_cpu(ri.lo);
289 struct md_cluster_info *cinfo = mddev->cluster_info;
295 while (cinfo->recovery_map) {
296 slot = fls64((u64)cinfo->recovery_map) - 1;
318 spin_lock_irq(&cinfo->suspend_lock);
319 cinfo->suspend_hi = 0;
320 cinfo->suspend_lo = 0;
321 cinfo->suspend_from = -1;
322 spin_unlock_irq(&cinfo->suspend_lock);
348 clear_bit(slot, &cinfo->recovery_map);
355 struct md_cluster_info *cinfo = mddev->cluster_info;
356 set_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state);
361 struct md_cluster_info *cinfo = mddev->cluster_info;
363 set_bit(slot, &cinfo->recovery_map);
364 if (!cinfo->recovery_thread) {
365 rcu_assign_pointer(cinfo->recovery_thread,
367 if (!cinfo->recovery_thread) {
372 md_wakeup_thread(cinfo->recovery_thread);
378 struct md_cluster_info *cinfo = mddev->cluster_info;
383 cinfo->slot_number);
394 struct md_cluster_info *cinfo = mddev->cluster_info;
396 cinfo->slot_number = our_slot;
399 if (test_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state)) {
400 complete(&cinfo->completion);
401 clear_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state);
403 clear_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state);
422 struct md_cluster_info *cinfo = res->mddev->cluster_info;
425 if (test_bit(MD_CLUSTER_ALREADY_IN_CLUSTER, &cinfo->state))
426 md_wakeup_thread(cinfo->recv_thread);
428 set_bit(MD_CLUSTER_PENDING_RECV_EVENT, &cinfo->state);
434 struct md_cluster_info *cinfo = mddev->cluster_info;
436 spin_lock_irq(&cinfo->suspend_lock);
437 cinfo->suspend_hi = 0;
438 cinfo->suspend_lo = 0;
439 spin_unlock_irq(&cinfo->suspend_lock);
446 struct md_cluster_info *cinfo = mddev->cluster_info;
490 md_bitmap_sync_with_cluster(mddev, cinfo->sync_low,
491 cinfo->sync_hi, lo, hi);
492 cinfo->sync_low = lo;
493 cinfo->sync_hi = hi;
496 spin_lock_irq(&cinfo->suspend_lock);
497 cinfo->suspend_from = slot;
498 cinfo->suspend_lo = lo;
499 cinfo->suspend_hi = hi;
500 spin_unlock_irq(&cinfo->suspend_lock);
507 struct md_cluster_info *cinfo = mddev->cluster_info;
517 init_completion(&cinfo->newdisk_completion);
518 set_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state);
520 wait_for_completion_timeout(&cinfo->newdisk_completion,
522 clear_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state);
530 struct md_cluster_info *cinfo = mddev->cluster_info;
533 dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR);
539 test_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state));
626 struct md_cluster_info *cinfo = thread->mddev->cluster_info;
627 struct dlm_lock_resource *ack_lockres = cinfo->ack_lockres;
628 struct dlm_lock_resource *message_lockres = cinfo->message_lockres;
632 mutex_lock(&cinfo->recv_mutex);
636 mutex_unlock(&cinfo->recv_mutex);
663 mutex_unlock(&cinfo->recv_mutex);
670 static int lock_token(struct md_cluster_info *cinfo)
674 error = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX);
680 mutex_lock(&cinfo->recv_mutex);
688 static int lock_comm(struct md_cluster_info *cinfo, bool mddev_locked)
691 struct mddev *mddev = cinfo->mddev;
700 &cinfo->state)) {
702 &cinfo->state);
708 wait_event(cinfo->wait,
709 !test_and_set_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state));
710 rv = lock_token(cinfo);
712 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
716 static void unlock_comm(struct md_cluster_info *cinfo)
718 WARN_ON(cinfo->token_lockres->mode != DLM_LOCK_EX);
719 mutex_unlock(&cinfo->recv_mutex);
720 dlm_unlock_sync(cinfo->token_lockres);
721 clear_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state);
722 wake_up(&cinfo->wait);
737 static int __sendmsg(struct md_cluster_info *cinfo, struct cluster_msg *cmsg)
740 int slot = cinfo->slot_number - 1;
744 error = dlm_lock_sync(cinfo->message_lockres, DLM_LOCK_EX);
750 memcpy(cinfo->message_lockres->lksb.sb_lvbptr, (void *)cmsg,
753 error = dlm_lock_sync(cinfo->message_lockres, DLM_LOCK_CW);
761 error = dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_EX);
769 error = dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_CR);
777 error = dlm_unlock_sync(cinfo->message_lockres);
788 static int sendmsg(struct md_cluster_info *cinfo, struct cluster_msg *cmsg,
793 ret = lock_comm(cinfo, mddev_locked);
795 ret = __sendmsg(cinfo, cmsg);
796 unlock_comm(cinfo);
803 struct md_cluster_info *cinfo = mddev->cluster_info;
816 if (i == (cinfo->slot_number - 1)) {
827 (unsigned long long) cinfo->suspend_lo,
828 (unsigned long long) cinfo->suspend_hi,
830 cinfo->suspend_from = i;
862 struct md_cluster_info *cinfo;
866 cinfo = kzalloc(sizeof(struct md_cluster_info), GFP_KERNEL);
867 if (!cinfo)
870 INIT_LIST_HEAD(&cinfo->suspend_list);
871 spin_lock_init(&cinfo->suspend_lock);
872 init_completion(&cinfo->completion);
873 set_bit(MD_CLUSTER_BEGIN_JOIN_CLUSTER, &cinfo->state);
874 init_waitqueue_head(&cinfo->wait);
875 mutex_init(&cinfo->recv_mutex);
877 mddev->cluster_info = cinfo;
878 cinfo->mddev = mddev;
884 &ops_rv, &cinfo->lockspace);
887 wait_for_completion(&cinfo->completion);
888 if (nodes < cinfo->slot_number) {
890 cinfo->slot_number, nodes);
896 rcu_assign_pointer(cinfo->recv_thread,
898 if (!cinfo->recv_thread) {
902 cinfo->message_lockres = lockres_init(mddev, "message", NULL, 1);
903 if (!cinfo->message_lockres)
905 cinfo->token_lockres = lockres_init(mddev, "token", NULL, 0);
906 if (!cinfo->token_lockres)
908 cinfo->no_new_dev_lockres = lockres_init(mddev, "no-new-dev", NULL, 0);
909 if (!cinfo->no_new_dev_lockres)
912 ret = dlm_lock_sync(cinfo->token_lockres, DLM_LOCK_EX);
918 cinfo->ack_lockres = lockres_init(mddev, "ack", ack_bast, 0);
919 if (!cinfo->ack_lockres) {
924 if (dlm_lock_sync(cinfo->ack_lockres, DLM_LOCK_CR))
927 dlm_unlock_sync(cinfo->token_lockres);
929 if (dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR))
933 pr_info("md-cluster: Joined cluster %s slot %d\n", str, cinfo->slot_number);
934 snprintf(str, 64, "bitmap%04d", cinfo->slot_number - 1);
935 cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1);
936 if (!cinfo->bitmap_lockres) {
940 if (dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW)) {
946 cinfo->resync_lockres = lockres_init(mddev, "resync", NULL, 0);
947 if (!cinfo->resync_lockres) {
954 set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
955 md_unregister_thread(mddev, &cinfo->recovery_thread);
956 md_unregister_thread(mddev, &cinfo->recv_thread);
957 lockres_free(cinfo->message_lockres);
958 lockres_free(cinfo->token_lockres);
959 lockres_free(cinfo->ack_lockres);
960 lockres_free(cinfo->no_new_dev_lockres);
961 lockres_free(cinfo->resync_lockres);
962 lockres_free(cinfo->bitmap_lockres);
963 if (cinfo->lockspace)
964 dlm_release_lockspace(cinfo->lockspace, 2);
966 kfree(cinfo);
972 struct md_cluster_info *cinfo = mddev->cluster_info;
977 set_bit(MD_CLUSTER_ALREADY_IN_CLUSTER, &cinfo->state);
979 if (test_and_clear_bit(MD_CLUSTER_PENDING_RECV_EVENT, &cinfo->state))
980 md_wakeup_thread(cinfo->recv_thread);
985 struct md_cluster_info *cinfo = mddev->cluster_info;
990 err = sendmsg(cinfo, &cmsg, 1);
999 struct md_cluster_info *cinfo = mddev->cluster_info;
1001 if (!cinfo)
1012 if ((cinfo->slot_number > 0 && mddev->recovery_cp != MaxSector) ||
1017 set_bit(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
1018 md_unregister_thread(mddev, &cinfo->recovery_thread);
1019 md_unregister_thread(mddev, &cinfo->recv_thread);
1020 lockres_free(cinfo->message_lockres);
1021 lockres_free(cinfo->token_lockres);
1022 lockres_free(cinfo->ack_lockres);
1023 lockres_free(cinfo->no_new_dev_lockres);
1024 lockres_free(cinfo->resync_lockres);
1025 lockres_free(cinfo->bitmap_lockres);
1027 dlm_release_lockspace(cinfo->lockspace, 2);
1028 kfree(cinfo);
1038 struct md_cluster_info *cinfo = mddev->cluster_info;
1040 return cinfo->slot_number - 1;
1051 struct md_cluster_info *cinfo = mddev->cluster_info;
1059 &cinfo->state);
1063 wait_event(cinfo->wait,
1064 !test_and_set_bit(MD_CLUSTER_SEND_LOCK, &cinfo->state) ||
1065 test_and_clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state));
1068 if (cinfo->token_lockres->mode == DLM_LOCK_EX) {
1069 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
1073 ret = lock_token(cinfo);
1074 clear_bit_unlock(MD_CLUSTER_HOLDING_MUTEX_FOR_RECVD, &cinfo->state);
1080 struct md_cluster_info *cinfo = mddev->cluster_info;
1097 ret = __sendmsg(cinfo, &cmsg);
1100 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state);
1101 unlock_comm(cinfo);
1107 struct md_cluster_info *cinfo = mddev->cluster_info;
1108 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state);
1109 unlock_comm(cinfo);
1114 struct md_cluster_info *cinfo = mddev->cluster_info;
1120 ret = sendmsg(cinfo, &cmsg, 0);
1260 struct md_cluster_info *cinfo = mddev->cluster_info;
1267 if (lock_comm(cinfo, 1)) {
1286 ret = __sendmsg(cinfo, &cmsg);
1290 unlock_comm(cinfo);
1295 unlock_comm(cinfo);
1307 ret = __sendmsg(cinfo, &cmsg);
1315 ret = __sendmsg(cinfo, &cmsg);
1320 unlock_comm(cinfo);
1325 struct md_cluster_info *cinfo = mddev->cluster_info;
1326 return dlm_lock_sync_interruptible(cinfo->resync_lockres, DLM_LOCK_EX, mddev);
1331 struct md_cluster_info *cinfo = mddev->cluster_info;
1333 spin_lock_irq(&cinfo->suspend_lock);
1334 *lo = cinfo->suspend_lo;
1335 *hi = cinfo->suspend_hi;
1336 spin_unlock_irq(&cinfo->suspend_lock);
1341 struct md_cluster_info *cinfo = mddev->cluster_info;
1347 memcpy(&ri, cinfo->bitmap_lockres->lksb.sb_lvbptr, sizeof(struct resync_info));
1352 add_resync_info(cinfo->bitmap_lockres, lo, hi);
1354 dlm_lock_sync(cinfo->bitmap_lockres, DLM_LOCK_PW);
1364 return sendmsg(cinfo, &cmsg, 1);
1366 return sendmsg(cinfo, &cmsg, 0);
1371 struct md_cluster_info *cinfo = mddev->cluster_info;
1382 dlm_unlock_sync(cinfo->resync_lockres);
1389 struct md_cluster_info *cinfo = mddev->cluster_info;
1393 test_bit(MD_CLUSTER_SUSPEND_READ_BALANCING, &cinfo->state))
1396 spin_lock_irq(&cinfo->suspend_lock);
1397 if (hi > cinfo->suspend_lo && lo < cinfo->suspend_hi)
1399 spin_unlock_irq(&cinfo->suspend_lock);
1409 struct md_cluster_info *cinfo = mddev->cluster_info;
1419 if (lock_comm(cinfo, 1))
1421 ret = __sendmsg(cinfo, &cmsg);
1423 unlock_comm(cinfo);
1426 cinfo->no_new_dev_lockres->flags |= DLM_LKF_NOQUEUE;
1427 ret = dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_EX);
1428 cinfo->no_new_dev_lockres->flags &= ~DLM_LKF_NOQUEUE;
1433 unlock_comm(cinfo);
1435 dlm_lock_sync(cinfo->no_new_dev_lockres, DLM_LOCK_CR);
1448 set_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state);
1449 wake_up(&cinfo->wait);
1456 struct md_cluster_info *cinfo = mddev->cluster_info;
1457 clear_bit(MD_CLUSTER_SEND_LOCKED_ALREADY, &cinfo->state);
1458 unlock_comm(cinfo);
1463 struct md_cluster_info *cinfo = mddev->cluster_info;
1465 if (!test_bit(MD_CLUSTER_WAITING_FOR_NEWDISK, &cinfo->state)) {
1471 dlm_unlock_sync(cinfo->no_new_dev_lockres);
1472 complete(&cinfo->newdisk_completion);
1479 struct md_cluster_info *cinfo = mddev->cluster_info;
1482 return sendmsg(cinfo, &cmsg, 1);
1489 struct md_cluster_info *cinfo = mddev->cluster_info;
1491 cinfo->other_bitmap_lockres =
1494 if (!cinfo->other_bitmap_lockres) {
1506 cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1);
1507 if (!cinfo->other_bitmap_lockres[i])
1510 cinfo->other_bitmap_lockres[i]->flags |= DLM_LKF_NOQUEUE;
1511 ret = dlm_lock_sync(cinfo->other_bitmap_lockres[i], DLM_LOCK_PW);
1522 struct md_cluster_info *cinfo = mddev->cluster_info;
1526 if (cinfo->other_bitmap_lockres) {
1528 if (cinfo->other_bitmap_lockres[i]) {
1529 lockres_free(cinfo->other_bitmap_lockres[i]);
1532 kfree(cinfo->other_bitmap_lockres);
1533 cinfo->other_bitmap_lockres = NULL;
1543 struct md_cluster_info *cinfo = mddev->cluster_info;
1547 err = sendmsg(cinfo, &cmsg, 1);
1552 if (sn == (cinfo->slot_number - 1))