diff options
author | Kent Overstreet <kent.overstreet@linux.dev> | 2023-12-30 14:38:29 -0500 |
---|---|---|
committer | Kent Overstreet <kent.overstreet@linux.dev> | 2024-01-01 11:46:52 -0500 |
commit | 099dc5c29dff52c0c37abcaa6cc747a1ac8df5fe (patch) | |
tree | 2ee31e5b1f483349dd0b35eb4921dbfd954a184b /fs/bcachefs/darray.c | |
parent | a58a6a58f5ad55aa1f5c54598c44f1d9938c1793 (diff) |
bcachefs: DARRAY_PREALLOCATED()
Add support to darray for preallocating some number of elements.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/darray.c')
-rw-r--r-- | fs/bcachefs/darray.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/fs/bcachefs/darray.c b/fs/bcachefs/darray.c index 4c900c853268..ac35b8b705ae 100644 --- a/fs/bcachefs/darray.c +++ b/fs/bcachefs/darray.c @@ -4,7 +4,7 @@ #include <linux/slab.h> #include "darray.h" -int __bch2_darray_resize(darray_void *d, size_t element_size, size_t new_size, gfp_t gfp) +int __bch2_darray_resize(darray_char *d, size_t element_size, size_t new_size, gfp_t gfp) { if (new_size > d->size) { new_size = roundup_pow_of_two(new_size); @@ -14,7 +14,8 @@ int __bch2_darray_resize(darray_void *d, size_t element_size, size_t new_size, g return -ENOMEM; memcpy(data, d->data, d->size * element_size); - kvfree(d->data); + if (d->data != d->preallocated) + kvfree(d->data); d->data = data; d->size = new_size; } |