On Tue, Apr 06, 2021 at 10:33:42PM +1000, Dave Chinner wrote: > From: Dave Chinner <dchinner@xxxxxxxxxx> > > in preparation for switching the VFS inode cache over the hlist_bl > lists, we nee dto be able to fake a list node that looks like it is > hased for correct operation of filesystems that don't directly use > the VFS indoe cache. > > Signed-off-by: Dave Chinner <dchinner@xxxxxxxxxx> Reviewed-by: Kent Overstreet <kent.overstreet@xxxxxxxxx> > --- > include/linux/list_bl.h | 22 ++++++++++++++++++++++ > 1 file changed, 22 insertions(+) > > diff --git a/include/linux/list_bl.h b/include/linux/list_bl.h > index ae1b541446c9..8ee2bf5af131 100644 > --- a/include/linux/list_bl.h > +++ b/include/linux/list_bl.h > @@ -143,6 +143,28 @@ static inline void hlist_bl_del_init(struct hlist_bl_node *n) > } > } > > +/** > + * hlist_bl_add_fake - create a fake list consisting of a single headless node > + * @n: Node to make a fake list out of > + * > + * This makes @n appear to be its own predecessor on a headless hlist. > + * The point of this is to allow things like hlist_bl_del() to work correctly > + * in cases where there is no list. > + */ > +static inline void hlist_bl_add_fake(struct hlist_bl_node *n) > +{ > + n->pprev = &n->next; > +} > + > +/** > + * hlist_fake: Is this node a fake hlist_bl? > + * @h: Node to check for being a self-referential fake hlist. > + */ > +static inline bool hlist_bl_fake(struct hlist_bl_node *n) > +{ > + return n->pprev == &n->next; > +} > + > static inline void hlist_bl_lock(struct hlist_bl_head *b) > { > bit_spin_lock(0, (unsigned long *)b); > -- > 2.31.0 >