Commit 46eea9cb authored by Kent Overstreet's avatar Kent Overstreet

bcachefs: Fix move_ctxt_wait_event()

We shouldn't be evaluating cond again if it already returned true.

This fixes a bug when this helper is used for taking nocow locks.
Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
parent 7ffb6a7e
......@@ -28,14 +28,18 @@ struct moving_context {
wait_queue_head_t wait;
};
#define move_ctxt_wait_event(_ctxt, _trans, _cond) \
do { \
bch2_moving_ctxt_do_pending_writes(_ctxt, _trans); \
\
if (_cond) \
break; \
__wait_event((_ctxt)->wait, \
bch2_moving_ctxt_next_pending_write(_ctxt) || (_cond));\
#define move_ctxt_wait_event(_ctxt, _trans, _cond) \
do { \
bool cond_finished = false; \
bch2_moving_ctxt_do_pending_writes(_ctxt, _trans); \
\
if (_cond) \
break; \
__wait_event((_ctxt)->wait, \
bch2_moving_ctxt_next_pending_write(_ctxt) || \
(cond_finished = (_cond))); \
if (cond_finished) \
break; \
} while (1)
typedef bool (*move_pred_fn)(struct bch_fs *, void *, struct bkey_s_c,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment