On Tue, Aug 16, 2022 at 05:24:16PM +0100, Matthew Wilcox wrote: > > 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. > > I like it the way you have it. My only suggestion is: > > +++ b/include/linux/fs.h > @@ -2039,6 +2039,7 @@ extern bool may_open_dev(const struct path *path); > * the kernel specify what kind of dirent layout it wants to have. > * This allows the kernel to read directories into kernel space or > * to have different dirent layouts depending on the binary type. > + * Return 'true' to keep going and 'false' if there are no more entries. > */ > struct dir_context; > typedef int (*filldir_t)(struct dir_context *, const char *, int, loff_t, u64, OK... FWIW, an additional argument is that ->iterate() instances are not calling those directly - they are calling dir_emit(), which returns true for "keep going" and false for "stop". This makes the calling conventions for callbacks match that...