Messages in this thread | | | Date | Sun, 1 Nov 2020 19:30:56 -0500 | From | Sasha Levin <> | Subject | Re: [PATCH AUTOSEL 5.9 089/147] dm: change max_io_len() to use blk_max_size_offset() |
| |
On Tue, Oct 27, 2020 at 08:19:59AM -0400, Mike Snitzer wrote: >On Mon, Oct 26 2020 at 7:48pm -0400, >Sasha Levin <sashal@kernel.org> wrote: > >> From: Mike Snitzer <snitzer@redhat.com> >> >> [ Upstream commit 5091cdec56faeaefa79de4b6cb3c3c55e50d1ac3 ] >> >> Using blk_max_size_offset() enables DM core's splitting to impose >> ti->max_io_len (via q->limits.chunk_sectors) and also fallback to >> respecting q->limits.max_sectors if chunk_sectors isn't set. >> >> Signed-off-by: Mike Snitzer <snitzer@redhat.com> >> Signed-off-by: Sasha Levin <sashal@kernel.org> > >Not sure why this commit elevated to stable@ picking it up, please >explain.
I misread the series this patch was in as being a fix rather than only the first patch, sorry :(
>But you cannot take this commit standalone. These commits are prereqs: > >22ada802ede8 block: use lcm_not_zero() when stacking chunk_sectors >07d098e6bbad block: allow 'chunk_sectors' to be non-power-of-2 >882ec4e609c1 dm table: stack 'chunk_sectors' limit to account for target-specific splitting > >This goes for all stable@ trees you AUTOSEL'd commit 5091cdec56f for. > >Mike > >> --- >> drivers/md/dm.c | 20 ++++++++------------ >> 1 file changed, 8 insertions(+), 12 deletions(-) >> >> diff --git a/drivers/md/dm.c b/drivers/md/dm.c >> index 6ed05ca65a0f8..3982012b1309c 100644 >> --- a/drivers/md/dm.c >> +++ b/drivers/md/dm.c >> @@ -1051,22 +1051,18 @@ static sector_t max_io_len_target_boundary(sector_t sector, struct dm_target *ti >> static sector_t max_io_len(sector_t sector, struct dm_target *ti) >> { >> sector_t len = max_io_len_target_boundary(sector, ti); >> - sector_t offset, max_len; >> + sector_t max_len; >> >> /* >> * Does the target need to split even further? >> + * - q->limits.chunk_sectors reflects ti->max_io_len so >> + * blk_max_size_offset() provides required splitting. >> + * - blk_max_size_offset() also respects q->limits.max_sectors >> */ >> - if (ti->max_io_len) { >> - offset = dm_target_offset(ti, sector); >> - if (unlikely(ti->max_io_len & (ti->max_io_len - 1))) >> - max_len = sector_div(offset, ti->max_io_len); >> - else >> - max_len = offset & (ti->max_io_len - 1); >> - max_len = ti->max_io_len - max_len; >> - >> - if (len > max_len) >> - len = max_len; >> - } >> + max_len = blk_max_size_offset(dm_table_get_md(ti->table)->queue, >> + dm_target_offset(ti, sector)); >> + if (len > max_len) >> + len = max_len; >> >> return len; >> } >> -- >> 2.25.1 >> >
-- Thanks, Sasha
| |