diff options
| author | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-29 16:56:50 -0400 |
|---|---|---|
| committer | Kent Overstreet <kent.overstreet@linux.dev> | 2025-05-31 22:03:17 -0400 |
| commit | 5802caf74fa5647a0e560b585bf7d1ac65b20e11 (patch) | |
| tree | ca8a7918f2b62eabf165bf45cfbe0e5da92ada48 /fs/bcachefs/darray.h | |
| parent | bcachefs: Journal keys are retained until shutdown, or journal replay finishes (diff) | |
| download | linux-5802caf74fa5647a0e560b585bf7d1ac65b20e11.tar.gz linux-5802caf74fa5647a0e560b585bf7d1ac65b20e11.zip | |
bcachefs: darray_find(), darray_find_p()
New helpers to avoid open coded loops.
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
Diffstat (limited to 'fs/bcachefs/darray.h')
| -rw-r--r-- | fs/bcachefs/darray.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/bcachefs/darray.h b/fs/bcachefs/darray.h index 50ec3decfe8c..d08d39c1b93d 100644 --- a/fs/bcachefs/darray.h +++ b/fs/bcachefs/darray.h @@ -87,7 +87,23 @@ int __bch2_darray_resize_noprof(darray_char *, size_t, size_t, gfp_t); #define darray_remove_item(_d, _pos) \ array_remove_item((_d)->data, (_d)->nr, (_pos) - (_d)->data) -#define __darray_for_each(_d, _i) \ +#define darray_find_p(_d, _i, cond) \ +({ \ + typeof((_d).data) _ret = NULL; \ + \ + darray_for_each(_d, _i) \ + if (cond) { \ + _ret = _i; \ + break; \ + } \ + _ret; \ +}) + +#define darray_find(_d, _item) darray_find_p(_d, _i, *_i == _item) + +/* Iteration: */ + +#define __darray_for_each(_d, _i) \ for ((_i) = (_d).data; _i < (_d).data + (_d).nr; _i++) #define darray_for_each(_d, _i) \ |
