Change calling conventions for filldir_t
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 16 Aug 2022 15:57:56 +0000 (11:57 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Wed, 17 Aug 2022 21:25:04 +0000 (17:25 -0400)
commit25885a35a72007cf28ec5f9ba7169c5c798f7167
tree948589bcdf9420b67123d83eab2cf7f7d8bdbcf8
parentd6da19c9cace63290ccfccb1fc35151ffefc0bec
Change calling conventions for filldir_t

filldir_t instances (directory iterators callbacks) used to return 0 for
"OK, keep going" or -E... for "stop".  Note that it's *NOT* how the
error values are reported - the rules for those are callback-dependent
and ->iterate{,_shared}() instances only care about zero vs. non-zero
(look at emit_dir() and friends).

So let's just return bool ("should we keep going?") - it's less confusing
that way.  The choice between "true means keep going" and "true means
stop" is bikesheddable; we have two groups of callbacks -
do something for everything in directory, until we run into problem
and
find an entry in directory and do something to it.

The former tended to use 0/-E... conventions - -E<something> on failure.
The latter tended to use 0/1, 1 being "stop, we are done".
The callers treated anything non-zero as "stop", ignoring which
non-zero value did they get.

"true means stop" would be more natural for the second group; "true
means keep going" - for the first one.  I tried both variants and
the things like
if allocation failed
something = -ENOMEM;
return true;
just looked unnatural and asking for trouble.

[folded suggestion from Matthew Wilcox <willy@infradead.org>]
Acked-by: Christian Brauner (Microsoft) <brauner@kernel.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
19 files changed:
Documentation/filesystems/porting.rst
arch/alpha/kernel/osf_sys.c
fs/afs/dir.c
fs/ecryptfs/file.c
fs/exportfs/expfs.c
fs/fat/dir.c
fs/gfs2/export.c
fs/ksmbd/smb2pdu.c
fs/ksmbd/vfs.c
fs/nfsd/nfs4recover.c
fs/nfsd/vfs.c
fs/ocfs2/dir.c
fs/ocfs2/journal.c
fs/overlayfs/readdir.c
fs/readdir.c
fs/reiserfs/xattr.c
fs/xfs/scrub/dir.c
fs/xfs/scrub/parent.c
include/linux/fs.h