diff options
author | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2014-06-07 03:16:58 -0400 |
---|---|---|
committer | Goldwyn Rodrigues <rgoldwyn@suse.com> | 2015-02-23 10:59:06 -0500 |
commit | 965400eb615dfb32d62cb3319a895bd94eb9f3b4 (patch) | |
tree | 1ef0cf27a22f5bc2afa05f213f88c9fc0044b23f | |
parent | 1d7e3e96117a864fe2ab3d02a14e49855319fdde (diff) |
Send RESYNCING while performing resync start/stop
When a resync is initiated, RESYNCING message is sent to all active
nodes with the range (lo,hi). When the resync is over, a RESYNCING
message is sent with (0,0). A high sector value of zero indicates
that the resync is over.
Signed-off-by: Goldwyn Rodrigues <rgoldwyn@suse.com>
-rw-r--r-- | drivers/md/md-cluster.c | 32 | ||||
-rw-r--r-- | drivers/md/md-cluster.h | 2 | ||||
-rw-r--r-- | drivers/md/md.c | 4 |
3 files changed, 36 insertions, 2 deletions
diff --git a/drivers/md/md-cluster.c b/drivers/md/md-cluster.c index 7e419f05b568..6428cc3ce38d 100644 --- a/drivers/md/md-cluster.c +++ b/drivers/md/md-cluster.c | |||
@@ -647,11 +647,43 @@ static int metadata_update_cancel(struct mddev *mddev) | |||
647 | return dlm_unlock_sync(cinfo->token_lockres); | 647 | return dlm_unlock_sync(cinfo->token_lockres); |
648 | } | 648 | } |
649 | 649 | ||
650 | static int resync_send(struct mddev *mddev, enum msg_type type, | ||
651 | sector_t lo, sector_t hi) | ||
652 | { | ||
653 | struct md_cluster_info *cinfo = mddev->cluster_info; | ||
654 | struct cluster_msg cmsg; | ||
655 | int slot = cinfo->slot_number - 1; | ||
656 | |||
657 | pr_info("%s:%d lo: %llu hi: %llu\n", __func__, __LINE__, | ||
658 | (unsigned long long)lo, | ||
659 | (unsigned long long)hi); | ||
660 | resync_info_update(mddev, lo, hi); | ||
661 | cmsg.type = cpu_to_le32(type); | ||
662 | cmsg.slot = cpu_to_le32(slot); | ||
663 | cmsg.low = cpu_to_le64(lo); | ||
664 | cmsg.high = cpu_to_le64(hi); | ||
665 | return sendmsg(cinfo, &cmsg); | ||
666 | } | ||
667 | |||
668 | static int resync_start(struct mddev *mddev, sector_t lo, sector_t hi) | ||
669 | { | ||
670 | pr_info("%s:%d\n", __func__, __LINE__); | ||
671 | return resync_send(mddev, RESYNCING, lo, hi); | ||
672 | } | ||
673 | |||
674 | static void resync_finish(struct mddev *mddev) | ||
675 | { | ||
676 | pr_info("%s:%d\n", __func__, __LINE__); | ||
677 | resync_send(mddev, RESYNCING, 0, 0); | ||
678 | } | ||
679 | |||
650 | static struct md_cluster_operations cluster_ops = { | 680 | static struct md_cluster_operations cluster_ops = { |
651 | .join = join, | 681 | .join = join, |
652 | .leave = leave, | 682 | .leave = leave, |
653 | .slot_number = slot_number, | 683 | .slot_number = slot_number, |
654 | .resync_info_update = resync_info_update, | 684 | .resync_info_update = resync_info_update, |
685 | .resync_start = resync_start, | ||
686 | .resync_finish = resync_finish, | ||
655 | .metadata_update_start = metadata_update_start, | 687 | .metadata_update_start = metadata_update_start, |
656 | .metadata_update_finish = metadata_update_finish, | 688 | .metadata_update_finish = metadata_update_finish, |
657 | .metadata_update_cancel = metadata_update_cancel, | 689 | .metadata_update_cancel = metadata_update_cancel, |
diff --git a/drivers/md/md-cluster.h b/drivers/md/md-cluster.h index 658982afcf9b..054f9eafa065 100644 --- a/drivers/md/md-cluster.h +++ b/drivers/md/md-cluster.h | |||
@@ -12,6 +12,8 @@ struct md_cluster_operations { | |||
12 | int (*leave)(struct mddev *mddev); | 12 | int (*leave)(struct mddev *mddev); |
13 | int (*slot_number)(struct mddev *mddev); | 13 | int (*slot_number)(struct mddev *mddev); |
14 | void (*resync_info_update)(struct mddev *mddev, sector_t lo, sector_t hi); | 14 | void (*resync_info_update)(struct mddev *mddev, sector_t lo, sector_t hi); |
15 | int (*resync_start)(struct mddev *mddev, sector_t lo, sector_t hi); | ||
16 | void (*resync_finish)(struct mddev *mddev); | ||
15 | int (*metadata_update_start)(struct mddev *mddev); | 17 | int (*metadata_update_start)(struct mddev *mddev); |
16 | int (*metadata_update_finish)(struct mddev *mddev); | 18 | int (*metadata_update_finish)(struct mddev *mddev); |
17 | int (*metadata_update_cancel)(struct mddev *mddev); | 19 | int (*metadata_update_cancel)(struct mddev *mddev); |
diff --git a/drivers/md/md.c b/drivers/md/md.c index 3eb45dc0537f..a1af24d369fc 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -7692,7 +7692,7 @@ void md_do_sync(struct md_thread *thread) | |||
7692 | update_time = jiffies; | 7692 | update_time = jiffies; |
7693 | 7693 | ||
7694 | if (mddev_is_clustered(mddev)) | 7694 | if (mddev_is_clustered(mddev)) |
7695 | md_cluster_ops->resync_info_update(mddev, j, max_sectors); | 7695 | md_cluster_ops->resync_start(mddev, j, max_sectors); |
7696 | 7696 | ||
7697 | blk_start_plug(&plug); | 7697 | blk_start_plug(&plug); |
7698 | while (j < max_sectors) { | 7698 | while (j < max_sectors) { |
@@ -7817,7 +7817,7 @@ void md_do_sync(struct md_thread *thread) | |||
7817 | mddev->pers->sync_request(mddev, max_sectors, &skipped, 1); | 7817 | mddev->pers->sync_request(mddev, max_sectors, &skipped, 1); |
7818 | 7818 | ||
7819 | if (mddev_is_clustered(mddev)) | 7819 | if (mddev_is_clustered(mddev)) |
7820 | md_cluster_ops->resync_info_update(mddev, 0, 0); | 7820 | md_cluster_ops->resync_finish(mddev); |
7821 | 7821 | ||
7822 | if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) && | 7822 | if (!test_bit(MD_RECOVERY_CHECK, &mddev->recovery) && |
7823 | mddev->curr_resync > 2) { | 7823 | mddev->curr_resync > 2) { |