diff options
author | Tejun Heo <tj@kernel.org> | 2015-08-18 17:54:57 -0400 |
---|---|---|
committer | Jens Axboe <axboe@fb.com> | 2015-08-18 18:49:15 -0400 |
commit | 4ebc1c61d6185604c97fd0b0355ab668052044ab (patch) | |
tree | 366acca07997da745139dba40070eea624f768b9 /block/cfq-iosched.c | |
parent | 5634cc2aa9aebc77bc862992e7805469dcf83dac (diff) |
cfq-iosched: simplify control flow in cfq_get_queue()
cfq_get_queue()'s control flow looks like the following.
async_cfqq = NULL;
cfqq = NULL;
if (!is_sync) {
...
async_cfqq = ...;
cfqq = *async_cfqq;
}
if (!cfqq)
cfqq = ...;
if (!is_sync && !(*async_cfqq))
...;
The only thing the local variable init, the second if, and the
async_cfqq test in the third if achieves is to skip cfqq creation and
installation if *async_cfqq was already non-NULL. This is needlessly
complicated with different tests examining the same condition.
Simplify it to the following.
if (!is_sync) {
...
async_cfqq = ...;
cfqq = *async_cfqq;
if (cfqq)
goto out;
}
cfqq = ...;
if (!is_sync)
...;
out:
Signed-off-by: Tejun Heo <tj@kernel.org>
Acked-by: Jeff Moyer <jmoyer@redhat.com>
Cc: Vivek Goyal <vgoyal@redhat.com>
Cc: Arianna Avanzini <avanzini.arianna@gmail.com>
Signed-off-by: Jens Axboe <axboe@fb.com>
Diffstat (limited to 'block/cfq-iosched.c')
-rw-r--r-- | block/cfq-iosched.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/block/cfq-iosched.c b/block/cfq-iosched.c index c62bb2e650b8..e91093d0c0eb 100644 --- a/block/cfq-iosched.c +++ b/block/cfq-iosched.c | |||
@@ -3731,8 +3731,8 @@ cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic, | |||
3731 | { | 3731 | { |
3732 | int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio); | 3732 | int ioprio_class = IOPRIO_PRIO_CLASS(cic->ioprio); |
3733 | int ioprio = IOPRIO_PRIO_DATA(cic->ioprio); | 3733 | int ioprio = IOPRIO_PRIO_DATA(cic->ioprio); |
3734 | struct cfq_queue **async_cfqq = NULL; | 3734 | struct cfq_queue **async_cfqq; |
3735 | struct cfq_queue *cfqq = NULL; | 3735 | struct cfq_queue *cfqq; |
3736 | 3736 | ||
3737 | if (!is_sync) { | 3737 | if (!is_sync) { |
3738 | if (!ioprio_valid(cic->ioprio)) { | 3738 | if (!ioprio_valid(cic->ioprio)) { |
@@ -3742,19 +3742,20 @@ cfq_get_queue(struct cfq_data *cfqd, bool is_sync, struct cfq_io_cq *cic, | |||
3742 | } | 3742 | } |
3743 | async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio); | 3743 | async_cfqq = cfq_async_queue_prio(cfqd, ioprio_class, ioprio); |
3744 | cfqq = *async_cfqq; | 3744 | cfqq = *async_cfqq; |
3745 | if (cfqq) | ||
3746 | goto out; | ||
3745 | } | 3747 | } |
3746 | 3748 | ||
3747 | if (!cfqq) | 3749 | cfqq = cfq_find_alloc_queue(cfqd, is_sync, cic, bio, gfp_mask); |
3748 | cfqq = cfq_find_alloc_queue(cfqd, is_sync, cic, bio, gfp_mask); | ||
3749 | 3750 | ||
3750 | /* | 3751 | /* |
3751 | * pin the queue now that it's allocated, scheduler exit will prune it | 3752 | * pin the queue now that it's allocated, scheduler exit will prune it |
3752 | */ | 3753 | */ |
3753 | if (!is_sync && !(*async_cfqq)) { | 3754 | if (!is_sync) { |
3754 | cfqq->ref++; | 3755 | cfqq->ref++; |
3755 | *async_cfqq = cfqq; | 3756 | *async_cfqq = cfqq; |
3756 | } | 3757 | } |
3757 | 3758 | out: | |
3758 | cfqq->ref++; | 3759 | cfqq->ref++; |
3759 | return cfqq; | 3760 | return cfqq; |
3760 | } | 3761 | } |