diff options
author | Shaohua Li <shli@fb.com> | 2015-09-02 13:49:50 -0700 |
---|---|---|
committer | NeilBrown <neilb@suse.com> | 2015-11-01 13:48:26 +1100 |
commit | bd18f6462f3d167a9b3ec27851c98f82694b2adf (patch) | |
tree | 8c844bcfd5985c9f2f27183f38eca68dbef8318e /drivers/md/md.c | |
parent | 828cbe989e4f5c8666cb3d99918b03666ccde0a0 (diff) | |
download | op-kernel-dev-bd18f6462f3d167a9b3ec27851c98f82694b2adf.zip op-kernel-dev-bd18f6462f3d167a9b3ec27851c98f82694b2adf.tar.gz |
md: skip resync for raid array with journal
If a raid array has journal, the journal can guarantee the consistency,
we can skip resync after a unclean shutdown. The exception is raid
creation or user initiated resync, which we still do a raid resync.
Signed-off-by: Shaohua Li <shli@fb.com>
Signed-off-by: NeilBrown <neilb@suse.com>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 3592beb..89149ac 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c @@ -1647,6 +1647,8 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) } set_bit(Journal, &rdev->flags); rdev->journal_tail = le64_to_cpu(sb->journal_tail); + if (mddev->recovery_cp == MaxSector) + set_bit(MD_JOURNAL_CLEAN, &mddev->flags); break; default: rdev->saved_raid_disk = role; @@ -1689,6 +1691,8 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) sb->events = cpu_to_le64(mddev->events); if (mddev->in_sync) sb->resync_offset = cpu_to_le64(mddev->recovery_cp); + else if (test_bit(MD_JOURNAL_CLEAN, &mddev->flags)) + sb->resync_offset = cpu_to_le64(MaxSector); else sb->resync_offset = cpu_to_le64(0); |