diff options
Diffstat (limited to 'libbcachefs/btree_iter.h')
-rw-r--r-- | libbcachefs/btree_iter.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/libbcachefs/btree_iter.h b/libbcachefs/btree_iter.h index 09dd3e52..cc2c6bb6 100644 --- a/libbcachefs/btree_iter.h +++ b/libbcachefs/btree_iter.h @@ -963,6 +963,20 @@ struct bkey_s_c bch2_btree_iter_peek_and_restart_outlined(struct btree_trans *, _p; \ }) +#define allocate_dropping_locks_norelock(_trans, _lock_dropped, _do) \ +({ \ + gfp_t _gfp = GFP_NOWAIT|__GFP_NOWARN; \ + typeof(_do) _p = _do; \ + _lock_dropped = false; \ + if (unlikely(!_p)) { \ + bch2_trans_unlock(_trans); \ + _lock_dropped = true; \ + _gfp = GFP_KERNEL; \ + _p = _do; \ + } \ + _p; \ +}) + struct btree_trans *__bch2_trans_get(struct bch_fs *, unsigned); void bch2_trans_put(struct btree_trans *); |