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>
This commit is contained in:
Родитель
828cbe989e
Коммит
bd18f6462f
|
@ -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);
|
||||
|
||||
|
|
|
@ -232,6 +232,7 @@ struct mddev {
|
|||
#define MD_STILL_CLOSED 4 /* If set, then array has not been opened since
|
||||
* md_ioctl checked on it.
|
||||
*/
|
||||
#define MD_JOURNAL_CLEAN 5 /* A raid with journal is already clean */
|
||||
|
||||
int suspended;
|
||||
atomic_t active_io;
|
||||
|
|
Загрузка…
Ссылка в новой задаче