Lines Matching refs:mddev
28 struct mddev *mddev; /* pointing back to mddev. */ member
63 struct mddev *mddev; /* the md device which md_cluster_info belongs to */ member
159 struct mddev *mddev) in dlm_lock_sync_interruptible() argument
171 || test_bit(MD_CLOSING, &mddev->flags)); in dlm_lock_sync_interruptible()
192 static struct dlm_lock_resource *lockres_init(struct mddev *mddev, in lockres_init() argument
197 struct md_cluster_info *cinfo = mddev->cluster_info; in lockres_init()
205 res->mddev = mddev; in lockres_init()
277 static int read_resync_info(struct mddev *mddev, in read_resync_info() argument
281 struct md_cluster_info *cinfo = mddev->cluster_info; in read_resync_info()
297 struct mddev *mddev = thread->mddev; in recover_bitmaps() local
298 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 = mddev->bitmap_ops->copy_from_slot(mddev, slot, &lo, &hi, true); in recover_bitmaps()
334 if (test_bit(MD_RESYNCING_REMOTE, &mddev->recovery) && in recover_bitmaps()
335 test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery) && in recover_bitmaps()
336 mddev->reshape_position != MaxSector) in recover_bitmaps()
337 md_wakeup_thread(mddev->sync_thread); in recover_bitmaps()
340 if (lo < mddev->resync_offset) in recover_bitmaps()
341 mddev->resync_offset = lo; in recover_bitmaps()
344 if (mddev->resync_offset != MaxSector) { in recover_bitmaps()
350 &mddev->recovery); in recover_bitmaps()
351 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in recover_bitmaps()
352 md_wakeup_thread(mddev->thread); in recover_bitmaps()
363 struct mddev *mddev = arg; in recover_prep() local
364 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_prep()
368 static void __recover_slot(struct mddev *mddev, int slot) in __recover_slot() argument
370 struct md_cluster_info *cinfo = mddev->cluster_info; in __recover_slot()
375 md_register_thread(recover_bitmaps, mddev, "recover")); in __recover_slot()
386 struct mddev *mddev = arg; in recover_slot() local
387 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_slot()
390 mddev->bitmap_info.cluster_name, in recover_slot()
395 __recover_slot(mddev, slot->slot - 1); in recover_slot()
402 struct mddev *mddev = arg; in recover_done() local
403 struct md_cluster_info *cinfo = mddev->cluster_info; in recover_done()
431 struct md_cluster_info *cinfo = res->mddev->cluster_info; in ack_bast()
441 static void remove_suspend_info(struct mddev *mddev, int slot) in remove_suspend_info() argument
443 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_suspend_info()
444 mddev->pers->quiesce(mddev, 1); in remove_suspend_info()
449 mddev->pers->quiesce(mddev, 0); in remove_suspend_info()
452 static void process_suspend_info(struct mddev *mddev, in process_suspend_info() argument
455 struct md_cluster_info *cinfo = mddev->cluster_info; in process_suspend_info()
464 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in process_suspend_info()
465 remove_suspend_info(mddev, slot); in process_suspend_info()
466 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in process_suspend_info()
468 md_wakeup_thread(mddev->thread); in process_suspend_info()
472 rdev_for_each(rdev, mddev) in process_suspend_info()
500 mddev->bitmap_ops->sync_with_cluster(mddev, cinfo->sync_low, 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 int 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()
530 kobject_uevent_env(&disk_to_dev(mddev->gendisk)->kobj, KOBJ_CHANGE, envp); in process_add_new_disk()
543 static void process_metadata_update(struct mddev *mddev, struct cluster_msg *msg) in process_metadata_update() argument
547 struct md_cluster_info *cinfo = mddev->cluster_info; in process_metadata_update()
548 mddev->good_device_nr = le32_to_cpu(msg->raid_slot); in process_metadata_update()
553 thread = rcu_dereference_protected(mddev->thread, true); in process_metadata_update()
555 (got_lock = mddev_trylock(mddev)) || in process_metadata_update()
557 md_reload_sb(mddev, mddev->good_device_nr); in process_metadata_update()
559 mddev_unlock(mddev); in process_metadata_update()
562 static void process_remove_disk(struct mddev *mddev, struct cluster_msg *msg) in process_remove_disk() argument
567 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot)); in process_remove_disk()
570 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in process_remove_disk()
571 md_wakeup_thread(mddev->thread); in process_remove_disk()
579 static void process_readd_disk(struct mddev *mddev, struct cluster_msg *msg) in process_readd_disk() argument
584 rdev = md_find_rdev_nr_rcu(mddev, le32_to_cpu(msg->raid_slot)); in process_readd_disk()
593 static int process_recvd_msg(struct mddev *mddev, struct cluster_msg *msg) in process_recvd_msg() argument
597 if (WARN(mddev->cluster_info->slot_number - 1 == le32_to_cpu(msg->slot), in process_recvd_msg()
602 process_metadata_update(mddev, msg); in process_recvd_msg()
605 set_capacity_and_notify(mddev->gendisk, mddev->array_sectors); in process_recvd_msg()
608 clear_bit(MD_CLUSTER_WAITING_FOR_SYNC, &mddev->cluster_info->state); in process_recvd_msg()
611 set_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in process_recvd_msg()
612 process_suspend_info(mddev, le32_to_cpu(msg->slot), in process_recvd_msg()
617 if (process_add_new_disk(mddev, msg)) in process_recvd_msg()
621 process_remove_disk(mddev, msg); in process_recvd_msg()
624 process_readd_disk(mddev, msg); in process_recvd_msg()
627 __recover_slot(mddev, le32_to_cpu(msg->slot)); in process_recvd_msg()
630 if (le64_to_cpu(msg->high) != mddev->pers->size(mddev, 0, 0)) in process_recvd_msg()
631 ret = mddev->bitmap_ops->resize(mddev, in process_recvd_msg()
648 struct md_cluster_info *cinfo = thread->mddev->cluster_info; in recv_daemon()
664 ret = process_recvd_msg(thread->mddev, &msg); in recv_daemon()
713 struct mddev *mddev = cinfo->mddev; in lock_comm() local
726 md_wakeup_thread(mddev->thread); in lock_comm()
819 static int gather_all_resync_info(struct mddev *mddev, int total_slots) in gather_all_resync_info() argument
821 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_all_resync_info()
831 bm_lockres = lockres_init(mddev, str, NULL, 1); in gather_all_resync_info()
842 if (read_resync_info(mddev, bm_lockres)) { in gather_all_resync_info()
860 ret = mddev->bitmap_ops->copy_from_slot(mddev, i, &lo, &hi, false); in gather_all_resync_info()
866 if ((hi > 0) && (lo < mddev->resync_offset)) { in gather_all_resync_info()
867 set_bit(MD_RECOVERY_NEEDED, &mddev->recovery); in gather_all_resync_info()
868 mddev->resync_offset = lo; in gather_all_resync_info()
869 md_check_recovery(mddev); in gather_all_resync_info()
878 static int join(struct mddev *mddev, int nodes) in join() argument
895 mddev->cluster_info = cinfo; in join()
896 cinfo->mddev = mddev; in join()
899 sprintf(str, "%pU", mddev->uuid); in join()
900 ret = dlm_new_lockspace(str, mddev->bitmap_info.cluster_name, in join()
901 DLM_LSFL_SOFTIRQ, LVB_SIZE, &md_ls_ops, mddev, in join()
915 md_register_thread(recv_daemon, mddev, "cluster_recv")); in join()
920 cinfo->message_lockres = lockres_init(mddev, "message", NULL, 1); in join()
923 cinfo->token_lockres = lockres_init(mddev, "token", NULL, 0); in join()
926 cinfo->no_new_dev_lockres = lockres_init(mddev, "no-new-dev", NULL, 0); in join()
936 cinfo->ack_lockres = lockres_init(mddev, "ack", ack_bast, 0); in join()
953 cinfo->bitmap_lockres = lockres_init(mddev, str, NULL, 1); in join()
964 cinfo->resync_lockres = lockres_init(mddev, "resync", NULL, 0); in join()
973 md_unregister_thread(mddev, &cinfo->recovery_thread); in join()
974 md_unregister_thread(mddev, &cinfo->recv_thread); in join()
983 mddev->cluster_info = NULL; in join()
988 static void load_bitmaps(struct mddev *mddev, int total_slots) in load_bitmaps() argument
990 struct md_cluster_info *cinfo = mddev->cluster_info; in load_bitmaps()
993 if (gather_all_resync_info(mddev, total_slots)) in load_bitmaps()
1001 static void resync_bitmap(struct mddev *mddev) in resync_bitmap() argument
1003 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_bitmap()
1014 static void unlock_all_bitmaps(struct mddev *mddev);
1015 static int leave(struct mddev *mddev) in leave() argument
1017 struct md_cluster_info *cinfo = mddev->cluster_info; in leave()
1030 if ((cinfo->slot_number > 0 && mddev->resync_offset != MaxSector) || in leave()
1031 (mddev->reshape_position != MaxSector && in leave()
1032 test_bit(MD_CLOSING, &mddev->flags))) in leave()
1033 resync_bitmap(mddev); in leave()
1036 md_unregister_thread(mddev, &cinfo->recovery_thread); in leave()
1037 md_unregister_thread(mddev, &cinfo->recv_thread); in leave()
1044 unlock_all_bitmaps(mddev); in leave()
1054 static int slot_number(struct mddev *mddev) in slot_number() argument
1056 struct md_cluster_info *cinfo = mddev->cluster_info; in slot_number()
1067 static int metadata_update_start(struct mddev *mddev) in metadata_update_start() argument
1069 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_start()
1079 md_wakeup_thread(mddev->thread); in metadata_update_start()
1096 static int metadata_update_finish(struct mddev *mddev) in metadata_update_finish() argument
1098 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_finish()
1108 rdev_for_each(rdev, mddev) in metadata_update_finish()
1123 static void metadata_update_cancel(struct mddev *mddev) in metadata_update_cancel() argument
1125 struct md_cluster_info *cinfo = mddev->cluster_info; in metadata_update_cancel()
1130 static int update_bitmap_size(struct mddev *mddev, sector_t size) in update_bitmap_size() argument
1132 struct md_cluster_info *cinfo = mddev->cluster_info; in update_bitmap_size()
1145 static int resize_bitmaps(struct mddev *mddev, sector_t newsize, sector_t oldsize) in resize_bitmaps() argument
1147 void *bitmap = mddev->bitmap; in resize_bitmaps()
1152 rv = mddev->bitmap_ops->get_stats(bitmap, &stats); in resize_bitmaps()
1161 rv = update_bitmap_size(mddev, newsize); in resize_bitmaps()
1165 for (i = 0; i < mddev->bitmap_info.nodes; i++) { in resize_bitmaps()
1169 if (i == slot_number(mddev)) in resize_bitmaps()
1172 bitmap = mddev->bitmap_ops->get_from_slot(mddev, i); in resize_bitmaps()
1179 rv = mddev->bitmap_ops->get_stats(bitmap, &stats); in resize_bitmaps()
1187 bm_lockres = lockres_init(mddev, str, NULL, 1); in resize_bitmaps()
1195 mddev->bitmap_ops->set_pages(bitmap, my_pages); in resize_bitmaps()
1204 mddev->bitmap_ops->free(bitmap); in resize_bitmaps()
1209 mddev->bitmap_ops->free(bitmap); in resize_bitmaps()
1210 update_bitmap_size(mddev, oldsize); in resize_bitmaps()
1217 static int cluster_check_sync_size(struct mddev *mddev) in cluster_check_sync_size() argument
1219 int current_slot = slot_number(mddev); in cluster_check_sync_size()
1220 int node_num = mddev->bitmap_info.nodes; in cluster_check_sync_size()
1223 void *bitmap = mddev->bitmap; in cluster_check_sync_size()
1229 rv = mddev->bitmap_ops->get_stats(bitmap, &stats); in cluster_check_sync_size()
1239 bitmap = mddev->bitmap_ops->get_from_slot(mddev, i); in cluster_check_sync_size()
1250 bm_lockres = lockres_init(mddev, str, NULL, 1); in cluster_check_sync_size()
1253 mddev->bitmap_ops->free(bitmap); in cluster_check_sync_size()
1259 mddev->bitmap_ops->update_sb(bitmap); in cluster_check_sync_size()
1262 rv = mddev->bitmap_ops->get_stats(bitmap, &stats); in cluster_check_sync_size()
1264 mddev->bitmap_ops->free(bitmap); in cluster_check_sync_size()
1271 mddev->bitmap_ops->free(bitmap); in cluster_check_sync_size()
1274 mddev->bitmap_ops->free(bitmap); in cluster_check_sync_size()
1290 static void update_size(struct mddev *mddev, sector_t old_dev_sectors) in update_size() argument
1292 struct md_cluster_info *cinfo = mddev->cluster_info; in update_size()
1298 md_update_sb(mddev, 1); in update_size()
1306 rdev_for_each(rdev, mddev) in update_size()
1336 if (cluster_check_sync_size(mddev) == 0) { in update_size()
1343 set_capacity_and_notify(mddev->gendisk, mddev->array_sectors); in update_size()
1346 ret = mddev->pers->resize(mddev, old_dev_sectors); in update_size()
1355 static int resync_start(struct mddev *mddev) in resync_start() argument
1357 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_start()
1358 return dlm_lock_sync_interruptible(cinfo->resync_lockres, DLM_LOCK_EX, mddev); in resync_start()
1361 static void resync_info_get(struct mddev *mddev, sector_t *lo, sector_t *hi) in resync_info_get() argument
1363 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_info_get()
1371 static int resync_status_get(struct mddev *mddev) in resync_status_get() argument
1373 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_status_get()
1378 static int resync_start_notify(struct mddev *mddev) in resync_start_notify() argument
1380 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_start_notify()
1388 static int resync_info_update(struct mddev *mddev, sector_t lo, sector_t hi) in resync_info_update() argument
1390 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_info_update()
1418 static int resync_finish(struct mddev *mddev) in resync_finish() argument
1420 struct md_cluster_info *cinfo = mddev->cluster_info; in resync_finish()
1423 clear_bit(MD_RESYNCING_REMOTE, &mddev->recovery); in resync_finish()
1429 if (!test_bit(MD_CLOSING, &mddev->flags)) in resync_finish()
1430 ret = resync_info_update(mddev, 0, 0); in resync_finish()
1435 static int area_resyncing(struct mddev *mddev, int direction, in area_resyncing() argument
1438 struct md_cluster_info *cinfo = mddev->cluster_info; in area_resyncing()
1456 static int add_new_disk(struct mddev *mddev, struct md_rdev *rdev) in add_new_disk() argument
1458 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk()
1503 static void add_new_disk_cancel(struct mddev *mddev) in add_new_disk_cancel() argument
1505 struct md_cluster_info *cinfo = mddev->cluster_info; in add_new_disk_cancel()
1510 static int new_disk_ack(struct mddev *mddev, bool ack) in new_disk_ack() argument
1512 struct md_cluster_info *cinfo = mddev->cluster_info; in new_disk_ack()
1515 pr_warn("md-cluster(%s): Spurious cluster confirmation\n", mdname(mddev)); in new_disk_ack()
1525 static int remove_disk(struct mddev *mddev, struct md_rdev *rdev) in remove_disk() argument
1528 struct md_cluster_info *cinfo = mddev->cluster_info; in remove_disk()
1534 static int lock_all_bitmaps(struct mddev *mddev) in lock_all_bitmaps() argument
1538 struct md_cluster_info *cinfo = mddev->cluster_info; in lock_all_bitmaps()
1541 kcalloc(mddev->bitmap_info.nodes - 1, in lock_all_bitmaps()
1548 my_slot = slot_number(mddev); in lock_all_bitmaps()
1549 for (slot = 0; slot < mddev->bitmap_info.nodes; slot++) { in lock_all_bitmaps()
1555 cinfo->other_bitmap_lockres[i] = lockres_init(mddev, str, NULL, 1); in lock_all_bitmaps()
1569 static void unlock_all_bitmaps(struct mddev *mddev) in unlock_all_bitmaps() argument
1571 struct md_cluster_info *cinfo = mddev->cluster_info; in unlock_all_bitmaps()
1576 for (i = 0; i < mddev->bitmap_info.nodes - 1; i++) { in unlock_all_bitmaps()
1591 struct mddev *mddev = rdev->mddev; in gather_bitmaps() local
1592 struct md_cluster_info *cinfo = mddev->cluster_info; in gather_bitmaps()
1600 for (sn = 0; sn < mddev->bitmap_info.nodes; sn++) { in gather_bitmaps()
1603 err = mddev->bitmap_ops->copy_from_slot(mddev, sn, &lo, &hi, false); in gather_bitmaps()
1608 if ((hi > 0) && (lo < mddev->resync_offset)) in gather_bitmaps()
1609 mddev->resync_offset = lo; in gather_bitmaps()