diff options
author | Guoqing Jiang <gqjiang@suse.com> | 2018-10-18 16:37:47 +0800 |
---|---|---|
committer | Shaohua Li <shli@fb.com> | 2018-10-18 09:40:48 -0700 |
commit | cb9ee154317b084a96a7c2b771d1688f39fc714c (patch) | |
tree | d6388ae05edc17fde448963052bb3b0edd61fb7d /drivers/md/md.c | |
parent | cbce6863b6d04f6eac6b144bcfaaf11a189d6533 (diff) | |
download | lwn-cb9ee154317b084a96a7c2b771d1688f39fc714c.tar.gz lwn-cb9ee154317b084a96a7c2b771d1688f39fc714c.zip |
md-cluster: send BITMAP_NEEDS_SYNC message if reshaping is interrupted
We need to continue the reshaping if it was interrupted in
original node. So original node should call resync_bitmap
in case reshaping is aborted.
Then BITMAP_NEEDS_SYNC message is broadcasted to other nodes,
node which continues the reshaping should restart reshape from
mddev->reshape_position instead of from the first beginning.
Reviewed-by: NeilBrown <neilb@suse.com>
Signed-off-by: Guoqing Jiang <gqjiang@suse.com>
Signed-off-by: Shaohua Li <shli@fb.com>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index fa2bbdec9955..390f410e51dd 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -8370,9 +8370,17 @@ void md_do_sync(struct md_thread *thread) else if (!mddev->bitmap) j = mddev->recovery_cp; - } else if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) + } else if (test_bit(MD_RECOVERY_RESHAPE, &mddev->recovery)) { max_sectors = mddev->resync_max_sectors; - else { + /* + * If the original node aborts reshaping then we continue the + * reshaping, so set j again to avoid restart reshape from the + * first beginning + */ + if (mddev_is_clustered(mddev) && + mddev->reshape_position != MaxSector) + j = mddev->reshape_position; + } else { /* recovery follows the physical size of devices */ max_sectors = mddev->dev_sectors; j = MaxSector; |