On 11/6/24 6:04 PM, Ming Lei wrote: > On Wed, Nov 06, 2024 at 08:09:38AM -0700, Jens Axboe wrote: >> On 11/6/24 5:26 AM, Ming Lei wrote: >>> `struct io_mapped_buf` will be extended to cover kernel buffer which >>> may be in fast IO path, and `struct io_mapped_buf` needs to be per-IO. >>> >>> So shrink sizeof(struct io_mapped_buf) by the following ways: >>> >>> - folio_shift is < 64, so 6bits are enough to hold it, the remained bits >>> can be used for the coming kernel buffer >>> >>> - define `acct_pages` as 'unsigned int', which is big enough for >>> accounting pages in the buffer >>> >>> Signed-off-by: Ming Lei <ming.lei@xxxxxxxxxx> >>> --- >>> io_uring/rsrc.c | 2 ++ >>> io_uring/rsrc.h | 6 +++--- >>> 2 files changed, 5 insertions(+), 3 deletions(-) >>> >>> diff --git a/io_uring/rsrc.c b/io_uring/rsrc.c >>> index 9b8827c72230..16f5abe03d10 100644 >>> --- a/io_uring/rsrc.c >>> +++ b/io_uring/rsrc.c >>> @@ -685,6 +685,8 @@ static bool io_try_coalesce_buffer(struct page ***pages, int *nr_pages, >>> return false; >>> >>> data->folio_shift = folio_shift(folio); >>> + WARN_ON_ONCE(data->folio_shift >= 64); >> >> Since folio_shift is 6 bits, how can that be try? >> >> I think you'd want: >> >> WARN_ON_ONCE(folio_shift(folio) >= 64); >> >> instead. > > imu->folio_shift is 6 bits, and it is only copied from data->folio_shift(char), > that is why the warning is added for data->folio_shift. Ah yes that is fine then, for some reason I read that as 'data' being an io_mapped_buffer. -- Jens Axboe