Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d460c65a authored by Jonathan Brassow's avatar Jonathan Brassow Committed by Alasdair G Kergon
Browse files

dm raid1: fix error count



Always increase the error count when I/O on a leg of a mirror fails.

The error count is used to decide whether to select an alternative
mirror leg.  If the target doesn't use the "handle_errors" feature, the
error count is not updated and the bio can get requeued forever by the
read callback.

Fix it by increasing error_count before the handle_errors feature
checking.

Cc: stable@kernel.org
Signed-off-by: default avatarMilan Broz <mbroz@redhat.com>
Signed-off-by: default avatarJonathan Brassow <jbrassow@redhat.com>
Signed-off-by: default avatarAlasdair G Kergon <agk@redhat.com>
parent c7a2bd19
Loading
Loading
Loading
Loading
+3 −3
Original line number Original line Diff line number Diff line
@@ -197,9 +197,6 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
	struct mirror_set *ms = m->ms;
	struct mirror_set *ms = m->ms;
	struct mirror *new;
	struct mirror *new;


	if (!errors_handled(ms))
		return;

	/*
	/*
	 * error_count is used for nothing more than a
	 * error_count is used for nothing more than a
	 * simple way to tell if a device has encountered
	 * simple way to tell if a device has encountered
@@ -210,6 +207,9 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type)
	if (test_and_set_bit(error_type, &m->error_type))
	if (test_and_set_bit(error_type, &m->error_type))
		return;
		return;


	if (!errors_handled(ms))
		return;

	if (m != get_default_mirror(ms))
	if (m != get_default_mirror(ms))
		goto out;
		goto out;