Re: git clone fsync error on FSx Ontap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi brian,
Thank you for your quick feedback! I was not thinking of the immutable
file aspect, that's new for me and makes sense. Your feedback enabled
us to press the storage team and we are discovering we had a single
nic ontap that works and a dual nic ontap storage that doesn't, so it
appears your assessment of it being a storage failure is right on the
money.

Thank you again for your detailed response. It was very helpful!
Tim

On Thu, Jul 24, 2025 at 7:14 PM brian m. carlson
<sandals@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> On 2025-07-24 at 21:49:41, Tim Cederquist wrote:
> > What did you expect to happen? (Expected behavior)
> >   git clone https://github.com/githubtraining/hellogitworld.git
> >   Command should have cloned a public repository the NFS hosted home folder
> >
> > What happened instead? (Actual behavior)
> >
> > Cloning into 'hellogitworld'...
> > remote: Enumerating objects: 306, done.
> > remote: Counting objects: 100% (32/32), done.
> > remote: Compressing objects: 100% (13/13), done.
> > remote: Total 306 (delta 22), reused 19 (delta 19), pack-reused 274 (from 1)
> > Receiving objects: 100% (306/306), 95.63 KiB | 1.84 MiB/s, done.
> > Resolving deltas: 100% (70/70), done.
> > fatal: fsync error on
> > '/mnt/home/tcederquist/hellogitworld/.git/objects/pack/tmp_idx_gpahXY':
> > Permission denied
>
> This is definitely a bug in your NFS server.  EACCES is only a code you
> should see before you have a file descriptor.  Once you have a file
> descriptor (e.g., open(2) succeeded), the proper status code if it is
> not suitable for your purpose is EBADF.  (For instance, if you attempt
> to write(2) to a file open only for reading.)
>
> However, fsync(2) should never return EBADF or EACCES on a file open for
> writing.
>
> > fatal: fetch-pack: invalid index-pack output
> >
> > What's different between what you expected and what actually happened?
> >   fsync error - permission denied
> >
> > Anything else you want to add:
> >   From Ontap storage host sectrace events command, it indicates the
> > failure is due to the user not having 'Append' permissions to the file
> > and generated the fsync error.
> >   Running an strace on the git clone command shows the process runs
> > "openat" with 444 file permission but with O_RDWR flag.
> >   Ontap creates the file with 444 (read only) posix permission
> >   git continues on to write() into the read only file - ontap rejects
> > it and fails the command due to read only status of the file
>
> Yup, this is explicitly allowed by POSIX.
>
> >   I've tested with linux "instruction" command to set permission and
> > copy a file in a similar fashion:
> >     strace -f -o trace_install install -m 444 src.txt test/a/test4.txt
> >     This command opens the file handle 600, writes into it, and then
> > chmods to 444 << not using 444 to start the file as git clone is
> > trying to do.
> >   Additionally, I've added an inherited non-intrinsic permission to
> > the user of A:FD:tcederquist@domain:wa << this appends the required
> > write + append attribute and the FD means it is inherited by all files
> > and not overridden by posix permissions. This is not a solution but a
> > testable method. With this permission added, the git clone works as
> > expected.
> >   Suggestion is to use 600 on the openat/fopen for the pack index file
> > instead of 444. This is how 'install' sets up the file. However, I
> > don't know if this was an attempt at a cross platform mutex? I cannot
> > imagine any other reason why 444 would have been used for a file that
> > would have content written after opening with read only permissions.
>
> The goal is to create a file which has permissions honoured by the umask
> but is not at all writable.  There is no reason to write to a pack file
> or loose object once it's written: the file is immutable until it's no
> longer useful, at which point it's removed (which does not require write
> permission on the file).  POSIX requires that the restrictions set by
> the file mode be ignored when determining whether the file is open for
> writing, so your NFS server is not following the POSIX spec correctly.
>
> Note this is possible to do correctly over NFS, and many servers do so,
> but there are also unfortunately a large number of servers which do not
> honour the POSIX standard correctly.  In addition, this problem not only
> affects Git, but a wide variety of other software as well, including zsh
> and Emacs, as well as every other Git implementation I'm aware of, so us
> trying to work around it would still leave you with a server that didn't
> work properly with lots of software.
> --
> brian m. carlson (they/them)
> Toronto, Ontario, CA





[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux