aboutsummaryrefslogtreecommitdiff
path: root/fs/bcachefs/darray.c
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-12-30 14:38:29 -0500
committerKent Overstreet <kent.overstreet@linux.dev>2024-01-01 11:46:52 -0500
commit099dc5c29dff52c0c37abcaa6cc747a1ac8df5fe (patch)
tree2ee31e5b1f483349dd0b35eb4921dbfd954a184b /fs/bcachefs/darray.c
parenta58a6a58f5ad55aa1f5c54598c44f1d9938c1793 (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.c5
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;
}