On Mon, Nov 6, 2023 at 2:46 PM Jens Axboe <axboe@xxxxxxxxx> wrote: > > On 11/5/23 3:30 PM, Dylan Yudaken wrote: > > When doing a multishot read, the code path reuses the old read > > paths. However this breaks an assumption built into those paths, > > namely that struct io_rw::len is available for reuse by __io_import_iovec. > > > > For multishot this results in len being set for the first receive > > call, and then subsequent calls are clamped to that buffer length incorrectly. > > Should we just reset this to 0 always in io_read_mshot()? And preferably > with a comment added as well as to why that is necessary to avoid > repeated clamping. Unfortunately I don't think (without testing) that will work. Sometimes the request comes into io_read_mshot with the buffer already selected, and the length cannot be touched in that case. We could check if the buffer is set, and if not clear the length I guess. I'm a bit unsure which is better - both seem equally ugly to be honest.