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

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
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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);

+1 −0
Original line number Diff line number Diff line
@@ -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;