Lines Matching defs:mddev

27 	struct mddev *mddev; /* pointing back to mddev. */
61 struct mddev *mddev; /* the md device which md_cluster_info belongs to */
150 struct mddev *mddev)
162 || test_bit(MD_CLOSING, &mddev->flags));
183 static struct dlm_lock_resource *lockres_init(struct mddev *mddev,
188 struct md_cluster_info *cinfo = mddev->cluster_info;
196 res->mddev = mddev;
268 static int read_resync_info(struct mddev *mddev,
272 struct md_cluster_info *cinfo = mddev->cluster_info;
288 struct mddev *mddev = thread->mddev;
289 struct md_cluster_info *cinfo = mddev->cluster_info;
299 bm_lockres = lockres_init(mddev, str, NULL, 1);
305 ret = dlm_lock_sync_interruptible(bm_lockres, DLM_LOCK_PW, mddev);
311 ret = md_bitmap_copy_from_slot(mddev, slot, &lo, &hi, true);
325 if (test_bit(MD_RESYNCING_REMOTE, &mddev->recovery) &&
326 test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) &&
327 mddev->reshape_position != MaxSector)
328 md_wakeup_thread(mddev->sync_thread);
331 if (lo < mddev->recovery_cp)
332 mddev->recovery_cp = lo;
335 if (mddev->recovery_cp != MaxSector) {
341 &mddev->recovery);
342 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
343 md_wakeup_thread(mddev->thread);
354 struct mddev *mddev = arg;
355 struct md_cluster_info *cinfo = mddev->cluster_info;
359 static void __recover_slot(struct mddev *mddev, int slot)
361 struct md_cluster_info *cinfo = mddev->cluster_info;
366 mddev, "recover");
377 struct mddev *mddev = arg;
378 struct md_cluster_info *cinfo = mddev->cluster_info;
381 mddev->bitmap_info.cluster_name,
386 __recover_slot(mddev, slot->slot - 1);
393 struct mddev *mddev = arg;
394 struct md_cluster_info *cinfo = mddev->cluster_info;
422 struct md_cluster_info *cinfo = res->mddev->cluster_info;
432 static void remove_suspend_info(struct mddev *mddev, int slot)
434 struct md_cluster_info *cinfo = mddev->cluster_info;
435 mddev->pers->quiesce(mddev, 1);
440 mddev->pers->quiesce(mddev, 0);
443 static void process_suspend_info(struct mddev *mddev,
446 struct md_cluster_info *cinfo = mddev->cluster_info;
455 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery);
456 remove_suspend_info(mddev, slot);
457 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
458 md_wakeup_thread(mddev->thread);
462 rdev_for_each(rdev, mddev)
490 md_bitmap_sync_with_cluster(mddev, cinfo->sync_low,
495 mddev->pers->quiesce(mddev, 1);
501 mddev->pers->quiesce(mddev, 0);
504 static void process_add_new_disk(struct mddev *mddev, struct cluster_msg *cmsg)
507 struct md_cluster_info *cinfo = mddev->cluster_info;
519 kobject_uevent_env(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE, envp);
526 static void process_metadata_update(struct mddev *mddev, struct cluster_msg *msg)
529 struct md_cluster_info *cinfo = mddev->cluster_info;
530 mddev->good_device_nr = le32_to_cpu(msg->raid_slot);
533 wait_event(mddev->thread->wqueue,
534 (got_lock = mddev_trylock(mddev)) ||
536 md_reload_sb(mddev, mddev->good_device_nr);
538 mddev_unlock(mddev);
541 static void process_remove_disk(struct mddev *mddev, struct cluster_msg *msg)
546 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot));
549 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
550 md_wakeup_thread(mddev->thread);
558 static void process_readd_disk(struct mddev *mddev, struct cluster_msg *msg)
563 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot));
572 static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg)
576 if (WARN(mddev->cluster_info->slot_number - 1 == le32_to_cpu(msg->slot),
581 process_metadata_update(mddev, msg);
584 set_capacity(mddev->gendisk, mddev->array_sectors);
585 revalidate_disk_size(mddev->gendisk, true);
588 set_bit(MD_RESYNCING_REMOTE, &mddev->recovery);
589 process_suspend_info(mddev, le32_to_cpu(msg->slot),
594 process_add_new_disk(mddev, msg);
597 process_remove_disk(mddev, msg);
600 process_readd_disk(mddev, msg);
603 __recover_slot(mddev, le32_to_cpu(msg->slot));
606 if (le64_to_cpu(msg->high) != mddev->pers->size(mddev, 0, 0))
607 ret = md_bitmap_resize(mddev->bitmap,
623 struct md_cluster_info *cinfo = thread->mddev->cluster_info;
639 ret = process_recvd_msg(thread->mddev, &msg);
688 struct mddev *mddev = cinfo->mddev;
701 md_wakeup_thread(mddev->thread);
798 static int gather_all_resync_info(struct mddev *mddev, int total_slots)
800 struct md_cluster_info *cinfo = mddev->cluster_info;
810 bm_lockres = lockres_init(mddev, str, NULL, 1);
821 if (read_resync_info(mddev, bm_lockres)) {
839 ret = md_bitmap_copy_from_slot(mddev, i, &lo, &hi, false);
845 if ((hi > 0) && (lo < mddev->recovery_cp)) {
846 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
847 mddev->recovery_cp = lo;
848 md_check_recovery(mddev);
857 static int join(struct mddev *mddev, int nodes)
874 mddev->cluster_info = cinfo;
875 cinfo->mddev = mddev;
878 sprintf(str, "%pU", mddev->uuid);
879 ret = dlm_new_lockspace(str, mddev->bitmap_info.cluster_name,
881 &md_ls_ops, mddev, &ops_rv, &cinfo->lockspace);
893 cinfo->recv_thread = md_register_thread(recv_daemon, mddev, "cluster_recv");
898 cinfo->message_lockres = lockres_init(mddev, "message", NULL, 1);
901 cinfo->token_lockres = lockres_init(mddev, "token", NULL, 0);
904 cinfo->no_new_dev_lockres = lockres_init(mddev, "no-new-dev", NULL, 0);
914 cinfo->ack_lockres = lockres_init(mddev, "ack", ack_bast, 0);
931 cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1);
942 cinfo->resync_lockres = lockres_init(mddev, "resync", NULL, 0);
961 mddev->cluster_info = NULL;
966 static void load_bitmaps(struct mddev *mddev, int total_slots)
968 struct md_cluster_info *cinfo = mddev->cluster_info;
971 if (gather_all_resync_info(mddev, total_slots))
979 static void resync_bitmap(struct mddev *mddev)
981 struct md_cluster_info *cinfo = mddev->cluster_info;
992 static void unlock_all_bitmaps(struct mddev *mddev);
993 static int leave(struct mddev *mddev)
995 struct md_cluster_info *cinfo = mddev->cluster_info;
1008 if ((cinfo->slot_number > 0 && mddev->recovery_cp != MaxSector) ||
1009 (mddev->reshape_position != MaxSector &&
1010 test_bit(MD_CLOSING, &mddev->flags)))
1011 resync_bitmap(mddev);
1022 unlock_all_bitmaps(mddev);
1032 static int slot_number(struct mddev *mddev)
1034 struct md_cluster_info *cinfo = mddev->cluster_info;
1045 static int metadata_update_start(struct mddev *mddev)
1047 struct md_cluster_info *cinfo = mddev->cluster_info;
1057 md_wakeup_thread(mddev->thread);
1074 static int metadata_update_finish(struct mddev *mddev)
1076 struct md_cluster_info *cinfo = mddev->cluster_info;
1086 rdev_for_each(rdev, mddev)
1101 static void metadata_update_cancel(struct mddev *mddev)
1103 struct md_cluster_info *cinfo = mddev->cluster_info;
1108 static int update_bitmap_size(struct mddev *mddev, sector_t size)
1110 struct md_cluster_info *cinfo = mddev->cluster_info;
1123 static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsize)
1128 struct bitmap *bitmap = mddev->bitmap;
1136 rv = update_bitmap_size(mddev, newsize);
1140 for (i = 0; i < mddev->bitmap_info.nodes; i++) {
1141 if (i == md_cluster_ops->slot_number(mddev))
1144 bitmap = get_bitmap_from_slot(mddev, i);
1157 bm_lockres = lockres_init(mddev, str, NULL, 1);
1180 update_bitmap_size(mddev, oldsize);
1187 static int cluster_check_sync_size(struct mddev *mddev)
1192 int node_num = mddev->bitmap_info.nodes;
1193 int current_slot = md_cluster_ops->slot_number(mddev);
1194 struct bitmap *bitmap = mddev->bitmap;
1206 bitmap = get_bitmap_from_slot(mddev, i);
1217 bm_lockres = lockres_init(mddev, str, NULL, 1);
1254 static void update_size(struct mddev *mddev, sector_t old_dev_sectors)
1256 struct md_cluster_info *cinfo = mddev->cluster_info;
1262 md_update_sb(mddev, 1);
1270 rdev_for_each(rdev, mddev)
1300 if (cluster_check_sync_size(mddev) == 0) {
1307 set_capacity(mddev->gendisk, mddev->array_sectors);
1308 revalidate_disk_size(mddev->gendisk, true);
1311 ret = mddev->pers->resize(mddev, old_dev_sectors);
1313 revalidate_disk_size(mddev->gendisk, true);
1322 static int resync_start(struct mddev *mddev)
1324 struct md_cluster_info *cinfo = mddev->cluster_info;
1325 return dlm_lock_sync_interruptible(cinfo->resync_lockres, DLM_LOCK_EX, mddev);
1328 static void resync_info_get(struct mddev *mddev, sector_t *lo, sector_t *hi)
1330 struct md_cluster_info *cinfo = mddev->cluster_info;
1338 static int resync_info_update(struct mddev *mddev, sector_t lo, sector_t hi)
1340 struct md_cluster_info *cinfo = mddev->cluster_info;
1368 static int resync_finish(struct mddev *mddev)
1370 struct md_cluster_info *cinfo = mddev->cluster_info;
1373 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery);
1379 if (!test_bit(MD_CLOSING, &mddev->flags))
1380 ret = resync_info_update(mddev, 0, 0);
1385 static int area_resyncing(struct mddev *mddev, int direction,
1388 struct md_cluster_info *cinfo = mddev->cluster_info;
1406 static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev)
1408 struct md_cluster_info *cinfo = mddev->cluster_info;
1438 * md_wakeup_thread(mddev->thread)
1453 static void add_new_disk_cancel(struct mddev *mddev)
1455 struct md_cluster_info *cinfo = mddev->cluster_info;
1460 static int new_disk_ack(struct mddev *mddev, bool ack)
1462 struct md_cluster_info *cinfo = mddev->cluster_info;
1465 pr_warn("md-cluster(%s): Spurious cluster confirmation\n", mdname(mddev));
1475 static int remove_disk(struct mddev *mddev, struct md_rdev *rdev)
1478 struct md_cluster_info *cinfo = mddev->cluster_info;
1484 static int lock_all_bitmaps(struct mddev *mddev)
1488 struct md_cluster_info *cinfo = mddev->cluster_info;
1491 kcalloc(mddev->bitmap_info.nodes - 1,
1498 my_slot = slot_number(mddev);
1499 for (slot = 0; slot < mddev->bitmap_info.nodes; slot++) {
1505 cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1);
1519 static void unlock_all_bitmaps(struct mddev *mddev)
1521 struct md_cluster_info *cinfo = mddev->cluster_info;
1526 for (i = 0; i < mddev->bitmap_info.nodes - 1; i++) {
1541 struct mddev *mddev = rdev->mddev;
1542 struct md_cluster_info *cinfo = mddev->cluster_info;
1550 for (sn = 0; sn < mddev->bitmap_info.nodes; sn++) {
1553 err = md_bitmap_copy_from_slot(mddev, sn, &lo, &hi, false);
1558 if ((hi > 0) && (lo < mddev->recovery_cp))
1559 mddev->recovery_cp = lo;