Commit bd18f646 authored by Shaohua Li's avatar Shaohua Li Committed by NeilBrown

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: default avatarShaohua Li <shli@fb.com>
Signed-off-by: default avatarNeilBrown <neilb@suse.com>
parent 828cbe98
...@@ -1647,6 +1647,8 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev) ...@@ -1647,6 +1647,8 @@ static int super_1_validate(struct mddev *mddev, struct md_rdev *rdev)
} }
set_bit(Journal, &rdev->flags); set_bit(Journal, &rdev->flags);
rdev->journal_tail = le64_to_cpu(sb->journal_tail); rdev->journal_tail = le64_to_cpu(sb->journal_tail);
if (mddev->recovery_cp == MaxSector)
set_bit(MD_JOURNAL_CLEAN, &mddev->flags);
break; break;
default: default:
rdev->saved_raid_disk = role; rdev->saved_raid_disk = role;
...@@ -1689,6 +1691,8 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev) ...@@ -1689,6 +1691,8 @@ static void super_1_sync(struct mddev *mddev, struct md_rdev *rdev)
sb->events = cpu_to_le64(mddev->events); sb->events = cpu_to_le64(mddev->events);
if (mddev->in_sync) if (mddev->in_sync)
sb->resync_offset = cpu_to_le64(mddev->recovery_cp); 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 else
sb->resync_offset = cpu_to_le64(0); sb->resync_offset = cpu_to_le64(0);
......
...@@ -232,6 +232,7 @@ struct mddev { ...@@ -232,6 +232,7 @@ struct mddev {
#define MD_STILL_CLOSED 4 /* If set, then array has not been opened since #define MD_STILL_CLOSED 4 /* If set, then array has not been opened since
* md_ioctl checked on it. * md_ioctl checked on it.
*/ */
#define MD_JOURNAL_CLEAN 5 /* A raid with journal is already clean */
int suspended; int suspended;
atomic_t active_io; atomic_t active_io;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment