On 10/21/21 4:57 AM, Christoph Hellwig wrote: > On Thu, Oct 21, 2021 at 01:32:19AM -0700, Christoph Hellwig wrote: >>> @@ -1436,8 +1436,8 @@ static void aio_complete_rw(struct kiocb *kiocb, long res, long res2) >>> file_end_write(kiocb->ki_filp); >>> } >>> >>> - iocb->ki_res.res = res; >>> - iocb->ki_res.res2 = res2; >>> + iocb->ki_res.res = res & 0xffffffff; >>> + iocb->ki_res.res2 = res >> 32; >> >> This needs a big fat comments explaining the historic context. > > Oh, and please use the upper_32_bits / lower_32_bits helpers. Incremental, are you happy with that comment? diff --git a/fs/aio.c b/fs/aio.c index e39c61dccf37..3674abc43788 100644 --- a/fs/aio.c +++ b/fs/aio.c @@ -1436,8 +1436,14 @@ static void aio_complete_rw(struct kiocb *kiocb, u64 res) file_end_write(kiocb->ki_filp); } - iocb->ki_res.res = res & 0xffffffff; - iocb->ki_res.res2 = res >> 32; + /* + * Historically we've only had one real user of res2, the USB + * gadget code, everybody else just passes back zero. As we pass + * 32-bits of value at most for either value, bundle these up and + * pass them in one u64 value. + */ + iocb->ki_res.res = lower_32_bits(res); + iocb->ki_res.res2 = upper_32_bits(res); iocb_put(iocb); } -- Jens Axboe