Skip to content

Commit

Permalink
bcache: don't embed 'return' statements in closure macros
Browse files Browse the repository at this point in the history
This is horribly confusing, it breaks the flow of the code without
it being apparent in the caller.

Signed-off-by: Jens Axboe <axboe@fb.com>
Acked-by: Christoph Hellwig <hch@lst.de>
  • Loading branch information
Jens Axboe committed Jul 11, 2015
1 parent 06b285b commit 77b5a08
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 6 deletions.
3 changes: 0 additions & 3 deletions drivers/md/bcache/closure.h
Original file line number Diff line number Diff line change
Expand Up @@ -320,7 +320,6 @@ static inline void closure_wake_up(struct closure_waitlist *list)
do { \
set_closure_fn(_cl, _fn, _wq); \
closure_sub(_cl, CLOSURE_RUNNING + 1); \
return; \
} while (0)

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

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

/**
Expand Down
1 change: 1 addition & 0 deletions drivers/md/bcache/io.c
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ void bch_generic_make_request(struct bio *bio, struct bio_split_pool *p)
} while (n != bio);

continue_at(&s->cl, bch_bio_submit_split_done, NULL);
return;
submit:
generic_make_request(bio);
}
Expand Down
2 changes: 2 additions & 0 deletions drivers/md/bcache/journal.c
Original file line number Diff line number Diff line change
Expand Up @@ -592,12 +592,14 @@ static void journal_write_unlocked(struct closure *cl)

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));
Expand Down
14 changes: 11 additions & 3 deletions drivers/md/bcache/request.c
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,10 @@ static void bch_data_insert_keys(struct closure *cl)
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);
Expand Down Expand Up @@ -216,8 +218,10 @@ static void bch_data_insert_start(struct closure *cl)
/* 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);
Expand Down Expand Up @@ -255,6 +259,7 @@ static void bch_data_insert_start(struct closure *cl)

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);
Expand Down Expand Up @@ -576,8 +581,10 @@ static void cache_lookup(struct closure *cl)
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);
}
Expand Down Expand Up @@ -1085,6 +1092,7 @@ static void flash_dev_make_request(struct request_queue *q, struct bio *bio)
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),
Expand Down

0 comments on commit 77b5a08

Please sign in to comment.