From 8c20176f2ce40fc8b0151e5a7d17561dd0eda0b5 Mon Sep 17 00:00:00 2001 From: Kent Overstreet Date: Sun, 17 Nov 2019 20:36:59 -0500 Subject: Update bcachefs sources to d372ddcbfa bcachefs: Reorganize extents.c --- libbcachefs/bkey_on_stack.h | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 libbcachefs/bkey_on_stack.h (limited to 'libbcachefs/bkey_on_stack.h') diff --git a/libbcachefs/bkey_on_stack.h b/libbcachefs/bkey_on_stack.h new file mode 100644 index 00000000..d4739038 --- /dev/null +++ b/libbcachefs/bkey_on_stack.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef _BCACHEFS_BKEY_ON_STACK_H +#define _BCACHEFS_BKEY_ON_STACK_H + +#include "bcachefs.h" + +struct bkey_on_stack { + struct bkey_i *k; + u64 onstack[12]; +}; + +static inline void bkey_on_stack_realloc(struct bkey_on_stack *s, + struct bch_fs *c, unsigned u64s) +{ + if (s->k == (void *) s->onstack && + u64s > ARRAY_SIZE(s->onstack)) { + s->k = mempool_alloc(&c->large_bkey_pool, GFP_NOFS); + memcpy(s->k, s->onstack, sizeof(s->onstack)); + } +} + +static inline void bkey_on_stack_init(struct bkey_on_stack *s) +{ + s->k = (void *) s->onstack; +} + +static inline void bkey_on_stack_exit(struct bkey_on_stack *s, + struct bch_fs *c) +{ + if (s->k != (void *) s->onstack) + mempool_free(s->k, &c->large_bkey_pool); + s->k = NULL; +} + +#endif /* _BCACHEFS_BKEY_ON_STACK_H */ -- cgit v1.2.3