Skip to content

Commit

Permalink
rbd: bio_chain_clone() cleanups
Browse files Browse the repository at this point in the history
In bio_chain_clone(), at the end of the function the bi_next field
of the tail of the new bio chain is nulled.  This isn't necessary,
because if "tail" is non-null, its value will be the last bio
structure allocated at the top of the while loop in that function.
And before that structure is added to the end of the new chain, its
bi_next pointer is always made null.

While touching that function, clean a few other things:
    - define each local variable on its own line
    - move the definition of "tmp" to an inner scope
    - move the modification of gfpmask closer to where it's used
    - rearrange the logic that sets the chain's tail pointer

Signed-off-by: Alex Elder <elder@inktank.com>
Reviewed-by: Yehuda Sadeh <yehuda@inktank.com>
  • Loading branch information
Alex Elder committed Oct 1, 2012
1 parent 84d34dc commit 542582f
Showing 1 changed file with 10 additions and 11 deletions.
21 changes: 10 additions & 11 deletions drivers/block/rbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -754,7 +754,9 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
struct bio_pair **bp,
int len, gfp_t gfpmask)
{
struct bio *tmp, *old_chain = *old, *new_chain = NULL, *tail = NULL;
struct bio *old_chain = *old;
struct bio *new_chain = NULL;
struct bio *tail;
int total = 0;

if (*bp) {
Expand All @@ -763,9 +765,12 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
}

while (old_chain && (total < len)) {
struct bio *tmp;

tmp = bio_kmalloc(gfpmask, old_chain->bi_max_vecs);
if (!tmp)
goto err_out;
gfpmask &= ~__GFP_WAIT; /* can't wait after the first */

if (total + old_chain->bi_size > len) {
struct bio_pair *bp;
Expand Down Expand Up @@ -793,25 +798,19 @@ static struct bio *bio_chain_clone(struct bio **old, struct bio **next,
}

tmp->bi_bdev = NULL;
gfpmask &= ~__GFP_WAIT;
tmp->bi_next = NULL;

if (!new_chain) {
new_chain = tail = tmp;
} else {
if (new_chain)
tail->bi_next = tmp;
tail = tmp;
}
else
new_chain = tmp;
tail = tmp;
old_chain = old_chain->bi_next;

total += tmp->bi_size;
}

BUG_ON(total < len);

if (tail)
tail->bi_next = NULL;

*old = old_chain;

return new_chain;
Expand Down

0 comments on commit 542582f

Please sign in to comment.