diff options
author | Dave Chinner <dchinner@redhat.com> | 2021-03-29 13:10:45 +1100 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2023-06-21 03:32:17 -0400 |
commit | 262047a48bc569e997a96d1266c28a8b33908fca (patch) | |
tree | bee366280d9a6c25913ab06b5975e7da051c51b7 | |
parent | edb2322061e2712e7787b99059996e722a560db5 (diff) |
hlist-bl: add hlist_bl_fake()
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@redhat.com>
-rw-r--r-- | include/linux/list_bl.h | 22 |
1 files changed, 22 insertions, 0 deletions
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); |