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. And agree that acct_pages doesn't need to be an unsigned long. -- Jens Axboe