Thread (4 messages) 4 messages, 3 authors, 2021-08-05

Re: [PATCH] pipe: increase minimum default pipe size to 2 pages

flat view

From: Alex Xu (Hello71) <hidden>
Date: 2021-08-05 14:18:30
Also in: linux-fsdevel

Possibly related (same subject, not in this thread)

Excerpts from Greg KH's message of August 5, 2021 4:35 am:
On Wed, Aug 04, 2021 at 08:04:35PM -0400, Alex Xu (Hello71) wrote:
quoted
Before this patch, the following program prints 4096 and hangs.
Afterwards, it prints 8192 and exits successfully. Note that you may
need to increase your RLIMIT_NOFILE before running the program.

int main() {
    int pipefd[2];
    for (int i = 0; i < 1025; i++)
        if (pipe(pipefd) == -1)
            return 1;
    size_t bufsz = fcntl(pipefd[1], F_GETPIPE_SZ);
    printf("%zd\n", bufsz);
    char *buf = calloc(bufsz, 1);
    write(pipefd[1], buf, bufsz);
    read(pipefd[0], buf, bufsz-1);
    write(pipefd[1], buf, 1);
}

Signed-off-by: Alex Xu (Hello71) <redacted>
---
Is this due to the changes that happened in 5.5?  If so, a cc: stable
and a fixes tag would be nice to have :)
quoted
See discussion at https://lore.kernel.org/lkml/1628086770.5rn8p04n6j.none@localhost/ (local).
This can go up in the changelog text too.

thanks,

greg k-h
I tested 5.4 and it exhibits the same problem as master using this 
non-racy program. I think the problem goes back to v4.5, the first 
release with 759c01142a ("pipe: limit the per-user amount of pages 
allocated in pipes"). The issue likely become more apparent with the 
improvement in pipe performance from v5.5, whereas before that, pipes 
were too slow for the issue to manifest in racy environments.

I'll send a new patch with #include lines and a Fixes: 759c01142a. I'm 
not 100% sure that it actually goes back that far, but the worst thing 
that can plausibly happen is that applications opening very large 
numbers of pipes suddenly use slightly more memory. I certainly hope 
nobody is relying on pipes randomly blocking roughly 1/4096 of the 
time.

Regards,
Alex.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help