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

Commit 985ca973 authored by NeilBrown's avatar NeilBrown
Browse files

md: close some races between setting and checking sync_action.



When checking sync_action in a script, we want to be sure it is
as accurate as possible.
As resync/reshape etc doesn't always start immediately (a separate
thread is scheduled to do it), it is best if 'action_show'
checks if MD_RECOVER_NEEDED is set (which it does) and in that
case reports what is likely to start soon (which it only sometimes
does).

So:
 - report 'reshape' if reshape_position suggests one might start.
 - set MD_RECOVERY_RECOVER in raid1_reshape(), because that is very
   likely to happen next.

Signed-off-by: default avatarNeilBrown <neilb@suse.com>
parent f7851be7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -4210,6 +4210,8 @@ action_show(struct mddev *mddev, char *page)
				type = "repair";
		} else if (test_bit(MD_RECOVERY_RECOVER, &recovery))
			type = "recover";
		else if (mddev->reshape_position != MaxSector)
			type = "reshape";
	}
	return sprintf(page, "%s\n", type);
}
+1 −0
Original line number Diff line number Diff line
@@ -3113,6 +3113,7 @@ static int raid1_reshape(struct mddev *mddev)

	unfreeze_array(conf);

	set_bit(MD_RECOVERY_RECOVER, &mddev->recovery);
	set_bit(MD_RECOVERY_NEEDED, &mddev->recovery);
	md_wakeup_thread(mddev->thread);