[PATCH 3.16 265/328] bcache: don't embed 'return' statements in closure macros

From: Ben Hutchings
Date: Sun Dec 09 2018 - 17:01:18 EST


3.16.62-rc1 review patch. If anyone has any objections, please let me know.

------------------

From: Jens Axboe <axboe@xxxxxx>

commit 77b5a08427e87514c33730afc18cd02c9475e2c3 upstream.

This is horribly confusing, it breaks the flow of the code without
it being apparent in the caller.

Signed-off-by: Jens Axboe <axboe@xxxxxx>
Acked-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx>
---
drivers/md/bcache/closure.h | 3 ---
drivers/md/bcache/io.c | 1 +
drivers/md/bcache/journal.c | 2 ++
drivers/md/bcache/request.c | 14 +++++++++++---
4 files changed, 14 insertions(+), 6 deletions(-)

--- a/drivers/md/bcache/closure.h
+++ b/drivers/md/bcache/closure.h
@@ -320,7 +320,6 @@ static inline void closure_wake_up(struc
do { \
set_closure_fn(_cl, _fn, _wq); \
closure_sub(_cl, CLOSURE_RUNNING + 1); \
- return; \
} while (0)

/**
@@ -349,7 +348,6 @@ do { \
do { \
set_closure_fn(_cl, _fn, _wq); \
closure_queue(_cl); \
- return; \
} while (0)

/**
@@ -365,7 +363,6 @@ do { \
do { \
set_closure_fn(_cl, _destructor, NULL); \
closure_sub(_cl, CLOSURE_RUNNING - CLOSURE_DESTRUCTOR + 1); \
- return; \
} while (0)

/**
--- a/drivers/md/bcache/io.c
+++ b/drivers/md/bcache/io.c
@@ -105,6 +105,7 @@ void bch_generic_make_request(struct bio
} while (n != bio);

continue_at(&s->cl, bch_bio_submit_split_done, NULL);
+ return;
submit:
generic_make_request(bio);
}
--- a/drivers/md/bcache/journal.c
+++ b/drivers/md/bcache/journal.c
@@ -586,12 +586,14 @@ static void journal_write_unlocked(struc

if (!w->need_write) {
closure_return_with_destructor(cl, journal_write_unlock);
+ return;
} else if (journal_full(&c->journal)) {
journal_reclaim(c);
spin_unlock(&c->journal.lock);

btree_flush_write(c);
continue_at(cl, journal_write, system_wq);
+ return;
}

c->journal.blocks_free -= set_blocks(w->data, block_bytes(c));
--- a/drivers/md/bcache/request.c
+++ b/drivers/md/bcache/request.c
@@ -87,8 +87,10 @@ static void bch_data_insert_keys(struct
if (journal_ref)
atomic_dec_bug(journal_ref);

- if (!op->insert_data_done)
+ if (!op->insert_data_done) {
continue_at(cl, bch_data_insert_start, op->wq);
+ return;
+ }

bch_keylist_free(&op->insert_keys);
closure_return(cl);
@@ -215,8 +217,10 @@ static void bch_data_insert_start(struct
/* 1 for the device pointer and 1 for the chksum */
if (bch_keylist_realloc(&op->insert_keys,
3 + (op->csum ? 1 : 0),
- op->c))
+ op->c)) {
continue_at(cl, bch_data_insert_keys, op->wq);
+ return;
+ }

k = op->insert_keys.top;
bkey_init(k);
@@ -254,6 +258,7 @@ static void bch_data_insert_start(struct

op->insert_data_done = true;
continue_at(cl, bch_data_insert_keys, op->wq);
+ return;
err:
/* bch_alloc_sectors() blocks if s->writeback = true */
BUG_ON(op->writeback);
@@ -568,8 +573,10 @@ static void cache_lookup(struct closure
ret = bch_btree_map_keys(&s->op, s->iop.c,
&KEY(s->iop.inode, bio->bi_iter.bi_sector, 0),
cache_lookup_fn, MAP_END_KEY);
- if (ret == -EAGAIN)
+ if (ret == -EAGAIN) {
continue_at(cl, cache_lookup, bcache_wq);
+ return;
+ }

closure_return(cl);
}
@@ -1095,6 +1102,7 @@ static void flash_dev_make_request(struc
continue_at_nobarrier(&s->cl,
flash_dev_nodata,
bcache_wq);
+ return;
} else if (rw) {
bch_keybuf_check_overlapping(&s->iop.c->moving_gc_keys,
&KEY(d->id, bio->bi_iter.bi_sector, 0),