GNU bug report logs - #47940
tests/tail-2/inotify-dir-recreate.sh FAILs for remote filesystems that passes is_local_dir_

Previous Next

Package: coreutils;

Reported by: Carl Dong <contact <at> carldong.me>

Date: Wed, 21 Apr 2021 20:06:02 UTC

Severity: normal

To reply to this bug, email your comments to 47940 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-coreutils <at> gnu.org:
bug#47940; Package coreutils. (Wed, 21 Apr 2021 20:06:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Carl Dong <contact <at> carldong.me>:
New bug report received and forwarded. Copy sent to bug-coreutils <at> gnu.org. (Wed, 21 Apr 2021 20:06:02 GMT) Full text and rfc822 format available.

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

From: Carl Dong <contact <at> carldong.me>
To: bug-coreutils <at> gnu.org
Subject: tests/tail-2/inotify-dir-recreate.sh FAILs for remote filesystems
 that passes is_local_dir_
Date: Wed, 21 Apr 2021 16:05:02 -0400
Hi all,

I am debugging a reproducible test failure in tests/tail-2/inotify-dir-recreate.sh for coreutils 8.32.

Logs: https://gist.githubusercontent.com/dongcarl/d24bfe853cc5bd9402bba82c36513c07/raw/19b9a15c4b12edf601dd1504cdf4ec0ee0d9344c/inotify-dir-recreate.log

Looking at the non-‘+’ lines, and the final compare diff, we can see that the “out” file only contained the string “inotify” and nothing else.

From my understanding, it has to do with the fact that I’m running this test in a directory which is on overlayfs, which is considered “remote” by tail (see `fremote(int, const char*)`). The filesystem being “remote” should ordinarily trigger one of the 2 SKIP checks in this test, however, neither check triggered a SKIP.


Check 1: is_local_dir_

At the top of inotify-dir-recreate.sh, we invoke is_local_dir_ to make sure that we’re in a “local” filesystem. However, is_local_dir_ invokes `df --local`, which does not use “‌fremote” to determine filesystem locality, but rather “read_file_system_list” from gnulib. The “me_remote” field of the returned “mount_entry" struct is then used to filter out entries which are non-local. However, in the case of overlayfs, the “me_remote” field will be false, and it will be considered “local” by `df --local`

TL;DR: is_local_dir_ = “is possibly local”, but we really want to check if “is possibly remote”


Check 2: Grepping for 'inotify (resources exhausted|cannot be used)'

Here, we expect that if inotify cannot be used, tail will print an indication to stderr and we can skip this test. However, this message is not printed when inotify is disabled in the fast-failing codepath: https://github.com/coreutils/coreutils/blob/v8.32/src/tail.c#L2490-L2512


I think the easiest fix might be to have tail output ‘inotify cannot be used’ to stderr in the fast-failing disable case: https://github.com/coreutils/coreutils/blob/v8.32/src/tail.c#L2490-L2496.


It seems like this bug has been encountered by others as well:
1. https://dnsglk.github.io/lfs/2018/06/28/lfs-coreutils-test-issue.html#inotify-dir-recreate
2. https://github.com/containers/podman/issues/5493#issuecomment-598851397

Carl Dong
contact <at> carldong.me
"I fight for the users”

P.S. I believe the comment line for ‌`is_local_fs_type` in the generated `src/fs-is-local.h` needs to be fixed.





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

Previous Next


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