Re: [PATCH] net: 9p: free what was emitted when read count is 0
From: Jisheng Zhang <hidden>
Date: 2021-03-01 03:03:43
Also in:
lkml
On Mon, 1 Mar 2021 11:51:24 +0900 Dominique Martinet wrote:
Jisheng Zhang wrote on Mon, Mar 01, 2021 at 10:33:36AM +0800:quoted
I met below warning when cating a small size(about 80bytes) txt file on 9pfs(msize=2097152 is passed to 9p mount option), the reason is we miss iov_iter_advance() if the read count is 0, so we didn't truncate the pipe, then iov_iter_pipe() thinks the pipe is full. Fix it by calling iov_iter_advance() on the iov_iter "to" even if read count is 0Hm, there are plenty of other error cases that don't call iov_iter_advance() and shouldn't trigger this warning ; I'm not sure just adding one particular call to this is a good solution.
Per my understanding of iov_iter, we need to call iov_iter_advance() even when the read out count is 0. I believe we can see this common style in other fs.
How reproducible is this? From the description it should happen
100%
everytime you cat a small file? (I'm surprised cat uses sendfile, what
it happened every time when catting a small file.
cat version? coreutils' doesn't seem to do that on their git)
busybox cat
What kernel version do you get this on? Bonus points if you can confirm
5.11 and the latest linus tree
this didn't use to happen, and full points for a bisect. (cat on a small file is something I do all the time in my tests, I'd like to be able to reproduce to understand the issue better as I'm not familiar with that part of the code)
Per my check, it can be 100% reproduced with busybox cat + "msize=2097152" mount option. NOTE: msize=2097152 isn't a magic number it can be other numbers which can ensure zerocopy code path is executed: p9_client_read_once ->p9_client_zc_rpc() Thanks