GNU bug report logs - #60455
Missing fallback if copy_file_range returns ENOENT?

Previous Next

Package: coreutils;

Reported by: Sam James <sam <at> gentoo.org>

Date: Sat, 31 Dec 2022 17:02:02 UTC

Severity: normal

Done: Pádraig Brady <P <at> draigBrady.com>

Bug is archived. No further changes may be made.

Full log


Message #14 received at 60455 <at> debbugs.gnu.org (full text, mbox):

From: Pádraig Brady <P <at> draigBrady.com>
To: Sam James <sam <at> gentoo.org>
Cc: 60455 <at> debbugs.gnu.org
Subject: Re: bug#60455: Missing fallback if copy_file_range returns ENOENT?
Date: Sat, 7 Jan 2023 16:25:07 +0000
[Message part 1 (text/plain, inline)]
On 07/01/2023 07:34, Sam James wrote:
> 
> 
>> On 31 Dec 2022, at 18:51, Pádraig Brady <P <at> draigBrady.com> wrote:
>>
>> On 31/12/2022 17:00, Sam James wrote:
>>> Hi folks,
>>> Originally reported in Gentoo at https://bugs.gentoo.org/885793.
>>> Frank Limpert reported that when copying large files across CIFS shares,
>>> cp may abort because copy_file_range returns ENOENT sometimes.
>>> This sounds like a suspicious kernel bug if CIFS interactions are sometimes
>>> spuriously giving ENOENT, but I'm wondering if coreutils needs to do
>>> anything to handle this as well.
>>> strace output from his cp invocation: https://bugs.gentoo.org/attachment.cgi?id=842497
>>
>> We may be able to fallback, but it depends if the errno
>> is possible to be returned at a partial copy or not.
>> If partial then there is not much we can do.
>> Now ENOENT is not a documented errno for copy_file_range()
>> so I'm not sure what we should do with it.
>> I didn't see on the bug above if any data was copied.
>> Could we get more info about that?
> 
> Frank got back to me and said an empty file gets created:
> ```
> # cp /mnt/Backup/EAV/data-eav-eav-aktiv-20221207.dump.xz /mnt/OldBackup/EAV/1
> cp: error copying '/mnt/Backup/EAV/data-eav-eav-aktiv-20221207.dump.xz' to '/mnt/OldBackup/EAV/1/data-eav-eav-aktiv-20221207.dump.xz': No such file or directory
> # stat /mnt/OldBackup/EAV/1/data-eav-eav-aktiv-20221207.dump.xz
> File: /mnt/OldBackup/EAV/1/data-eav-eav-aktiv-20221207.dump.xz
> Size: 0 Blocks: 8 IO Block: 1048576 regular empty file

OK then it's probably worth handling in coreutils then.
Note I still get the feeling this is a race in CIFS
that is only being made more apparent with copy_file_range(),
but fair enough that this is a regressions for users and
we should be able to cater for it easy enough.

The attached does that for ENOENT.

cheers,
Pádraig
[copy-range-cifs.patch (text/x-patch, attachment)]

This bug report was last modified 2 years and 131 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.