On Fri, Oct 04, 2024 at 12:47:09PM +0200, Amir Goldstein wrote: > I had already posted an alternative code for overlayfs, but in case this > is going to be used anyway in overlayfs or in another code, see some > comments below... As far as I can see, the current #overlayfs-next kills the case for struct fderr; we might eventually get a valid use for it, but for the time being I'm going to strip the overlayfs-related parts of that branch (obviously), fix the braino you've spotted in fdput() and archive the branch in case it's ever needed. > > +#define fd_empty(f) _Generic((f), \ > > + struct fd: unlikely(!(f).word), \ > > + struct fderr: IS_ERR_VALUE((f).word)) > > > I suggest adding a fd_is_err(f) helper to rhyme with IS_ERR(). Umm... Dropping fd_empty() for that one, you mean? > > +#define fdput(f) (void) (_Generic((f), \ > > + struct fderr: IS_ERR_VALUE((f).word), \ > > Should that be !IS_ERR_VALUE((f).word)? It should, thanks for spotting that braino. > or better yet > > #define fd_is_err(f) _Generic((f), \ > struct fd: false, \ > struct fderr: IS_ERR_VALUE((f).word)) I think that's a bad idea; too likely to spill into struct fd users, with "it's never false here" being a nasty surprise.