Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date: Fri, 27 Apr 2018 16:01:40 -0400
From: John Mudd <johnbmudd@...il.com>
To: Rich Felker <dalias@...c.org>
Cc: musl <musl@...ts.openwall.com>
Subject: Re: posix_fallocate() fails on some machines

I replaced the file system on my build VM with ext3. Now the test program
returns 95, not supported.

For now my plan is to change the Postgres source code to call ftruncate(fd,
size) in place of posix_fallocate(fd, 0, size). That seems to work.



On Thu, Apr 26, 2018 at 4:52 PM, Rich Felker <dalias@...c.org> wrote:

> On Thu, Apr 26, 2018 at 04:21:07PM -0400, John Mudd wrote:
> > Thanks. It seems my mistake was to build on a VM with ext4 file system.
> My
> > intention was for the build VM to be the lowest common denominator of my
> > production PCs. That's why I use 32-bit. I'll change to ext3 on the build
> > VM.
>
> ext3 (and even ext2 I think) should support it fine. The problem is
> wacky stuff like btrfs or xfs or whatnot (not sure which one(s)).
>
> Rich
>
>
> > On Thu, Apr 26, 2018 at 4:08 PM, Rich Felker <dalias@...c.org> wrote:
> >
> > > On Thu, Apr 26, 2018 at 03:54:19PM -0400, John Mudd wrote:
> > > > I built a 32-bit dynamically linked Postgres using musl but I can't
> run
> > > on
> > > > some machines because posix_fallocate() returns 95, "not supported".
> > > >
> > > > Here's a sample program that reproduces the issue even when compiled
> > > > statically. Any suggestions?
> > > >
> > > > # Build a 32-bit static executable. Works.
> > > > $ cat test_posix_fallocate.c
> > > > #include <stdio.h>
> > > > #include <fcntl.h>
> > > > int main() {
> > > >     int fd = open("foo", O_RDWR|O_CREAT, 0666);
> > > >     if (fd < 0) return 1;
> > > >     printf("posix_fallocate() returned %d\n", posix_fallocate(fd, 0,
> > > > 400000));
> > > > }
> > > > $
> > > > $ uname -mrs
> > > > Linux 4.4.0-116-generic i686
> > > > $ musl-gcc -static -o test_posix_fallocate test_posix_fallocate.c
> > > > $ test_posix_fallocate
> > > > posix_fallocate() returned 0
> > > > $
> > > >
> > > > # Copy it to an older OS. Fails.
> > > > $ uname -mrs
> > > > Linux 2.6.32-358.14.1.el6.x86_64 x86_64
> > > > $ test_posix_fallocate
> > > > posix_fallocate() returned 95
> > > > $
> > >
> > > This is a bug in postgresql. It must accept that some underlying
> > > filesystems do not support posix_fallocate. The reason it doesn't is
> > > that glibc implements a buggy and dangerous fallback when it's not
> > > supported, resolved WONTFIX:
> > >
> > > https://sourceware.org/bugzilla/show_bug.cgi?id=6865
> > >
> > > Simply patch postgresql not to consider this a fatal error, or use a
> > > filesystem where posix_fallocate is supported (e.g. ext3/4).
> > >
> > > Rich
> > >
>

Content of type "text/html" skipped

Powered by blists - more mailing lists

Your e-mail address:

Powered by Openwall GNU/*/Linux - Powered by OpenVZ