mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 14:41:39 +00:00
5934a0caf2
Small helper function. Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com> Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
44 lines
1006 B
C
44 lines
1006 B
C
/* 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_reassemble(struct bkey_on_stack *s,
|
|
struct bch_fs *c,
|
|
struct bkey_s_c k)
|
|
{
|
|
bkey_on_stack_realloc(s, c, k.k->u64s);
|
|
bkey_reassemble(s->k, k);
|
|
}
|
|
|
|
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 */
|