X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=ulist.h;h=88f5b8266b04dbadf997df546b9b7dd159486554;hb=02a9b6cbef22826cfa8befcc48fdba335dac70a5;hp=2a0e9489d4a344a62ab67a8bddabeedb95bbff94;hpb=2ab405af95d43972b57c7806981220a6949df643;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/ulist.h b/ulist.h index 2a0e948..88f5b82 100644 --- a/ulist.h +++ b/ulist.h @@ -5,8 +5,8 @@ * */ -#ifndef __ULIST__ -#define __ULIST__ +#ifndef __ULIST_H__ +#define __ULIST_H__ #include "kerncompat.h" #include "list.h" @@ -58,6 +58,21 @@ void ulist_free(struct ulist *ulist); int ulist_add(struct ulist *ulist, u64 val, u64 aux, gfp_t gfp_mask); int ulist_add_merge(struct ulist *ulist, u64 val, u64 aux, u64 *old_aux, gfp_t gfp_mask); + +/* just like ulist_add_merge() but take a pointer for the aux data */ +static inline int ulist_add_merge_ptr(struct ulist *ulist, u64 val, void *aux, + void **old_aux, gfp_t gfp_mask) +{ +#if BITS_PER_LONG == 32 + u64 old64 = (uintptr_t)*old_aux; + int ret = ulist_add_merge(ulist, val, (uintptr_t)aux, &old64, gfp_mask); + *old_aux = (void *)((uintptr_t)old64); + return ret; +#else + return ulist_add_merge(ulist, val, (u64)aux, (u64 *)old_aux, gfp_mask); +#endif +} + struct ulist_node *ulist_next(struct ulist *ulist, struct ulist_iterator *uiter);