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. Thanks, Ming