tail: fix checking of currently unavailable directories
authorPádraig Brady <P@draigBrady.com>
Tue, 12 Oct 2010 00:39:58 +0000 (01:39 +0100)
committerPádraig Brady <P@draigBrady.com>
Tue, 12 Oct 2010 10:41:17 +0000 (11:41 +0100)
commit61b77891c2d9af299063850a0c4d1d721340cfff
tree53d70fd61a8c64ab6be607a0f9083ff6583f0886
parent9f4744534f1de87b9630dfbde91b9ebd9592d056
tail: fix checking of currently unavailable directories

* src/tail.c (tail_forever_inotify): Handle the case where
tail --follow=name with inotify, is not able to add a watch on
a specified directory.  This may happen due to inotify resource
limits or if the directory is currently missing or inaccessible.
In all these cases, revert to polling which will try to reopen
the file later.  Note inotify returns ENOSPC when it runs out
of resources, and instead we report a particular error message,
lest users think one of their file systems is full.
(main): Document another caveat with using inotify, where we
currently don't recheck directories recreated after the
initial watch is setup.
* tests/tail-2/F-vs-rename: Fix the endless loop triggered by
the above issue.
* tests/tail-2/inotify-hash-abuse: Likewise.
* tests/tail-2/wait: Don't fail in the resource exhaustion case.
* tests/tail-2/F-vs-missing: A new test for this failure mode
which was until now just triggered on older buggy linux kernels
which returned ENOSPC constantly from inotify_add_watch().
* NEWS: Mention the fix.
NEWS
src/tail.c
tests/Makefile.am
tests/tail-2/F-vs-missing [new file with mode: 0755]
tests/tail-2/F-vs-rename
tests/tail-2/inotify-hash-abuse
tests/tail-2/wait