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

Commit 50c37b13 authored by NeilBrown's avatar NeilBrown
Browse files

md: don't require sync_min to be a multiple of chunk_size.



There is really no need for sync_min to be a multiple of
chunk_size, and values read from here often aren't.
That means you cannot read a value and expect to be able
to write it back later.

So remove the chunk_size check, and round down to a multiple
of 4K, to be sure everything works with 4K-sector devices.

Signed-off-by: default avatarNeilBrown <neilb@suse.de>
parent d51e4fe6
Loading
Loading
Loading
Loading
+2 −11
Original line number Diff line number Diff line
@@ -4427,7 +4427,6 @@ min_sync_store(struct mddev *mddev, const char *buf, size_t len)
{
	unsigned long long min;
	int err;
	int chunk;

	if (kstrtoull(buf, 10, &min))
		return -EINVAL;
@@ -4441,16 +4440,8 @@ min_sync_store(struct mddev *mddev, const char *buf, size_t len)
	if (test_bit(MD_RECOVERY_RUNNING, &mddev->recovery))
		goto out_unlock;

	/* Must be a multiple of chunk_size */
	chunk = mddev->chunk_sectors;
	if (chunk) {
		sector_t temp = min;

		err = -EINVAL;
		if (sector_div(temp, chunk))
			goto out_unlock;
	}
	mddev->resync_min = min;
	/* Round down to multiple of 4K for safety */
	mddev->resync_min = round_down(min, 8);
	err = 0;

out_unlock: