summaryrefslogtreecommitdiffstats
path: root/fs/bcachefs/darray.h
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2025-05-29 16:56:50 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2025-05-31 22:03:17 -0400
commit5802caf74fa5647a0e560b585bf7d1ac65b20e11 (patch)
treeca8a7918f2b62eabf165bf45cfbe0e5da92ada48 /fs/bcachefs/darray.h
parentbcachefs: Journal keys are retained until shutdown, or journal replay finishes (diff)
downloadlinux-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.h18
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) \