Lines Matching refs:mddev
32 struct mddev *mddev; /* pointing back to mddev. */ member
73 struct mddev *mddev; /* the md device which md_cluster_info belongs to */ member
155 struct mddev *mddev) in dlm_lock_sync_interruptible() argument
167 || test_bit(MD_CLOSING, &mddev->flags)); in dlm_lock_sync_interruptible()
188 static struct dlm_lock_resource *lockres_init(struct mddev *mddev, in lockres_init() argument
193 struct md_cluster_info *cinfo = mddev->cluster_info; in lockres_init()
201 res->mddev = mddev; in lockres_init()
273 static struct suspend_info *read_resync_info(struct mddev *mddev, struct dlm_lock_resource *lockres) in read_resync_info() argument
296 struct mddev *mddev = thread->mddev; in recover_bitmaps() local
297 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_bitmaps()
308 bm_lockres = lockres_init(mddev, str, NULL, 1); in recover_bitmaps()
314 ret = dlm_lock_sync_interruptible(bm_lockres, DLM_LOCK_PW, mddev); in recover_bitmaps()
320 ret = md_bitmap_copy_from_slot(mddev, slot, &lo, &hi, true); in recover_bitmaps()
336 if (lo < mddev->recovery_cp) in recover_bitmaps()
337 mddev->recovery_cp = lo; in recover_bitmaps()
340 if (mddev->recovery_cp != MaxSector) { in recover_bitmaps()
346 &mddev->recovery); in recover_bitmaps()
347 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in recover_bitmaps()
348 md_wakeup_thread(mddev->thread); in recover_bitmaps()
359 struct mddev *mddev = arg; in recover_prep() local
360 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_prep()
364 static void __recover_slot(struct mddev *mddev, int slot) in __recover_slot() argument
366 struct md_cluster_info *cinfo = mddev->cluster_info; in __recover_slot()
371 mddev, "recover"); in __recover_slot()
382 struct mddev *mddev = arg; in recover_slot() local
383 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_slot()
386 mddev->bitmap_info.cluster_name, in recover_slot()
391 __recover_slot(mddev, slot->slot - 1); in recover_slot()
398 struct mddev *mddev = arg; in recover_done() local
399 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_done()
427 struct md_cluster_info *cinfo = res->mddev->cluster_info; in ack_bast()
449 static void remove_suspend_info(struct mddev *mddev, int slot) in remove_suspend_info() argument
451 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_suspend_info()
452 mddev->pers->quiesce(mddev, 1); in remove_suspend_info()
456 mddev->pers->quiesce(mddev, 0); in remove_suspend_info()
460 static void process_suspend_info(struct mddev *mddev, in process_suspend_info() argument
463 struct md_cluster_info *cinfo = mddev->cluster_info; in process_suspend_info()
471 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in process_suspend_info()
472 remove_suspend_info(mddev, slot); in process_suspend_info()
473 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in process_suspend_info()
474 md_wakeup_thread(mddev->thread); in process_suspend_info()
495 md_bitmap_sync_with_cluster(mddev, cinfo->sync_low, cinfo->sync_hi, lo, hi); in process_suspend_info()
505 mddev->pers->quiesce(mddev, 1); in process_suspend_info()
511 mddev->pers->quiesce(mddev, 0); in process_suspend_info()
514 static void process_add_new_disk(struct mddev *mddev, struct cluster_msg *cmsg) in process_add_new_disk() argument
517 struct md_cluster_info *cinfo = mddev->cluster_info; in process_add_new_disk()
529 kobject_uevent_env(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE, envp); in process_add_new_disk()
536 static void process_metadata_update(struct mddev *mddev, struct cluster_msg *msg) in process_metadata_update() argument
539 struct md_cluster_info *cinfo = mddev->cluster_info; in process_metadata_update()
540 mddev->good_device_nr = le32_to_cpu(msg->raid_slot); in process_metadata_update()
543 wait_event(mddev->thread->wqueue, in process_metadata_update()
544 (got_lock = mddev_trylock(mddev)) || in process_metadata_update()
546 md_reload_sb(mddev, mddev->good_device_nr); in process_metadata_update()
548 mddev_unlock(mddev); in process_metadata_update()
551 static void process_remove_disk(struct mddev *mddev, struct cluster_msg *msg) in process_remove_disk() argument
556 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot)); in process_remove_disk()
559 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in process_remove_disk()
560 md_wakeup_thread(mddev->thread); in process_remove_disk()
568 static void process_readd_disk(struct mddev *mddev, struct cluster_msg *msg) in process_readd_disk() argument
573 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot)); in process_readd_disk()
582 static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) in process_recvd_msg() argument
586 if (WARN(mddev->cluster_info->slot_number - 1 == le32_to_cpu(msg->slot), in process_recvd_msg()
591 process_metadata_update(mddev, msg); in process_recvd_msg()
594 set_capacity(mddev->gendisk, mddev->array_sectors); in process_recvd_msg()
595 revalidate_disk(mddev->gendisk); in process_recvd_msg()
598 set_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in process_recvd_msg()
599 process_suspend_info(mddev, le32_to_cpu(msg->slot), in process_recvd_msg()
604 process_add_new_disk(mddev, msg); in process_recvd_msg()
607 process_remove_disk(mddev, msg); in process_recvd_msg()
610 process_readd_disk(mddev, msg); in process_recvd_msg()
613 __recover_slot(mddev, le32_to_cpu(msg->slot)); in process_recvd_msg()
628 struct md_cluster_info *cinfo = thread->mddev->cluster_info; in recv_daemon()
644 ret = process_recvd_msg(thread->mddev, &msg); in recv_daemon()
675 struct mddev *mddev = cinfo->mddev; in lock_token() local
688 md_wakeup_thread(mddev->thread); in lock_token()
798 static int gather_all_resync_info(struct mddev *mddev, int total_slots) in gather_all_resync_info() argument
800 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_all_resync_info()
811 bm_lockres = lockres_init(mddev, str, NULL, 1); in gather_all_resync_info()
822 s = read_resync_info(mddev, bm_lockres); in gather_all_resync_info()
843 ret = md_bitmap_copy_from_slot(mddev, i, &lo, &hi, false); in gather_all_resync_info()
849 if ((hi > 0) && (lo < mddev->recovery_cp)) { in gather_all_resync_info()
850 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in gather_all_resync_info()
851 mddev->recovery_cp = lo; in gather_all_resync_info()
852 md_check_recovery(mddev); in gather_all_resync_info()
861 static int join(struct mddev *mddev, int nodes) in join() argument
878 mddev->cluster_info = cinfo; in join()
879 cinfo->mddev = mddev; in join()
882 sprintf(str, "%pU", mddev->uuid); in join()
883 ret = dlm_new_lockspace(str, mddev->bitmap_info.cluster_name, in join()
885 &md_ls_ops, mddev, &ops_rv, &cinfo->lockspace); in join()
897 cinfo->recv_thread = md_register_thread(recv_daemon, mddev, "cluster_recv"); in join()
902 cinfo->message_lockres = lockres_init(mddev, "message", NULL, 1); in join()
905 cinfo->token_lockres = lockres_init(mddev, "token", NULL, 0); in join()
908 cinfo->no_new_dev_lockres = lockres_init(mddev, "no-new-dev", NULL, 0); in join()
918 cinfo->ack_lockres = lockres_init(mddev, "ack", ack_bast, 0); in join()
935 cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1); in join()
946 cinfo->resync_lockres = lockres_init(mddev, "resync", NULL, 0); in join()
965 mddev->cluster_info = NULL; in join()
970 static void load_bitmaps(struct mddev *mddev, int total_slots) in load_bitmaps() argument
972 struct md_cluster_info *cinfo = mddev->cluster_info; in load_bitmaps()
975 if (gather_all_resync_info(mddev, total_slots)) in load_bitmaps()
983 static void resync_bitmap(struct mddev *mddev) in resync_bitmap() argument
985 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_bitmap()
996 static void unlock_all_bitmaps(struct mddev *mddev);
997 static int leave(struct mddev *mddev) in leave() argument
999 struct md_cluster_info *cinfo = mddev->cluster_info; in leave()
1007 if (cinfo->slot_number > 0 && mddev->recovery_cp != MaxSector) in leave()
1008 resync_bitmap(mddev); in leave()
1019 unlock_all_bitmaps(mddev); in leave()
1029 static int slot_number(struct mddev *mddev) in slot_number() argument
1031 struct md_cluster_info *cinfo = mddev->cluster_info; in slot_number()
1042 static int metadata_update_start(struct mddev *mddev) in metadata_update_start() argument
1044 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_start()
1054 md_wakeup_thread(mddev->thread); in metadata_update_start()
1071 static int metadata_update_finish(struct mddev *mddev) in metadata_update_finish() argument
1073 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_finish()
1083 rdev_for_each(rdev, mddev) in metadata_update_finish()
1098 static void metadata_update_cancel(struct mddev *mddev) in metadata_update_cancel() argument
1100 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_cancel()
1108 static int cluster_check_sync_size(struct mddev *mddev) in cluster_check_sync_size() argument
1113 int node_num = mddev->bitmap_info.nodes; in cluster_check_sync_size()
1114 int current_slot = md_cluster_ops->slot_number(mddev); in cluster_check_sync_size()
1115 struct bitmap *bitmap = mddev->bitmap; in cluster_check_sync_size()
1127 bitmap = get_bitmap_from_slot(mddev, i); in cluster_check_sync_size()
1138 bm_lockres = lockres_init(mddev, str, NULL, 1); in cluster_check_sync_size()
1175 static void update_size(struct mddev *mddev, sector_t old_dev_sectors) in update_size() argument
1177 struct md_cluster_info *cinfo = mddev->cluster_info; in update_size()
1183 md_update_sb(mddev, 1); in update_size()
1188 rdev_for_each(rdev, mddev) in update_size()
1218 if (cluster_check_sync_size(mddev) == 0) { in update_size()
1225 set_capacity(mddev->gendisk, mddev->array_sectors); in update_size()
1226 revalidate_disk(mddev->gendisk); in update_size()
1229 ret = mddev->pers->resize(mddev, old_dev_sectors); in update_size()
1231 revalidate_disk(mddev->gendisk); in update_size()
1240 static int resync_start(struct mddev *mddev) in resync_start() argument
1242 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_start()
1243 return dlm_lock_sync_interruptible(cinfo->resync_lockres, DLM_LOCK_EX, mddev); in resync_start()
1246 static int resync_info_update(struct mddev *mddev, sector_t lo, sector_t hi) in resync_info_update() argument
1248 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_info_update()
1276 static int resync_finish(struct mddev *mddev) in resync_finish() argument
1278 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_finish()
1281 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in resync_finish()
1287 if (!test_bit(MD_CLOSING, &mddev->flags)) in resync_finish()
1288 ret = resync_info_update(mddev, 0, 0); in resync_finish()
1293 static int area_resyncing(struct mddev *mddev, int direction, in area_resyncing() argument
1296 struct md_cluster_info *cinfo = mddev->cluster_info; in area_resyncing()
1321 static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev) in add_new_disk() argument
1323 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk()
1367 static void add_new_disk_cancel(struct mddev *mddev) in add_new_disk_cancel() argument
1369 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk_cancel()
1374 static int new_disk_ack(struct mddev *mddev, bool ack) in new_disk_ack() argument
1376 struct md_cluster_info *cinfo = mddev->cluster_info; in new_disk_ack()
1379 pr_warn("md-cluster(%s): Spurious cluster confirmation\n", mdname(mddev)); in new_disk_ack()
1389 static int remove_disk(struct mddev *mddev, struct md_rdev *rdev) in remove_disk() argument
1392 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_disk()
1398 static int lock_all_bitmaps(struct mddev *mddev) in lock_all_bitmaps() argument
1402 struct md_cluster_info *cinfo = mddev->cluster_info; in lock_all_bitmaps()
1405 kcalloc(mddev->bitmap_info.nodes - 1, in lock_all_bitmaps()
1412 my_slot = slot_number(mddev); in lock_all_bitmaps()
1413 for (slot = 0; slot < mddev->bitmap_info.nodes; slot++) { in lock_all_bitmaps()
1419 cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1); in lock_all_bitmaps()
1433 static void unlock_all_bitmaps(struct mddev *mddev) in unlock_all_bitmaps() argument
1435 struct md_cluster_info *cinfo = mddev->cluster_info; in unlock_all_bitmaps()
1440 for (i = 0; i < mddev->bitmap_info.nodes - 1; i++) { in unlock_all_bitmaps()
1454 struct mddev *mddev = rdev->mddev; in gather_bitmaps() local
1455 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_bitmaps()
1463 for (sn = 0; sn < mddev->bitmap_info.nodes; sn++) { in gather_bitmaps()
1466 err = md_bitmap_copy_from_slot(mddev, sn, &lo, &hi, false); in gather_bitmaps()
1471 if ((hi > 0) && (lo < mddev->recovery_cp)) in gather_bitmaps()
1472 mddev->recovery_cp = lo; in gather_bitmaps()