Message ID | 20231008094801.354312-2-shikemeng@huaweicloud.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Two cleanups to pipe | expand |
diff --git a/fs/pipe.c b/fs/pipe.c index 2d88f73f585a..b19875720ff1 100644 --- a/fs/pipe.c +++ b/fs/pipe.c @@ -542,10 +542,9 @@ pipe_write(struct kiocb *iocb, struct iov_iter *from) if (!iov_iter_count(from)) break; - } - if (!pipe_full(head, pipe->tail, pipe->max_usage)) continue; + } /* Wait for buffer space to become available. */ if ((filp->f_flags & O_NONBLOCK) ||
In pipe_write we have: head = pipe->head; if (!pipe_full(head, pipe->tail, pipe->max_usage)) pipe->head = head + 1; /* write data to buffer at head */ /* supposed to check if pipe is full after write */ if (!pipe_full(head, pipe->tail, pipe->max_usage)) continue The second pipe_full expects head after write but head before write is used. Luckily, we will call pipe_full with correct reloaded pipe->head in new loop cycle and stop writing correctly. Remove wrong pipe_full check and simply continue to first pipe_full check after write done to avoid unnecessary check. Fixes: a194dfe6e6f6 ("pipe: Rearrange sequence in pipe_write() to preallocate slot") Signed-off-by: Kemeng Shi <shikemeng@huaweicloud.com> --- fs/pipe.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)