diff --git a/drivers/md/md.c b/drivers/md/md.c index 3592beb6931e16c653d019838a80d6e1578e4fb8..89149acd8a5e847b0d66460b8881bbb0c5c03a59 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); diff --git a/drivers/md/md.h b/drivers/md/md.h index 2b0f62fb61463edce7e6a559286ed662c8996578..e14e667a20e97bb196397c7b4cd1d734f1fcb35c 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h @@ -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;