diff options
-rw-r--r-- | block/blk-softirq.c | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/block/blk-softirq.c b/block/blk-softirq.c index 57790c1a97eb..b5c37d96cf0e 100644 --- a/block/blk-softirq.c +++ b/block/blk-softirq.c | |||
@@ -30,8 +30,8 @@ static void blk_done_softirq(struct softirq_action *h) | |||
30 | while (!list_empty(&local_list)) { | 30 | while (!list_empty(&local_list)) { |
31 | struct request *rq; | 31 | struct request *rq; |
32 | 32 | ||
33 | rq = list_entry(local_list.next, struct request, csd.list); | 33 | rq = list_entry(local_list.next, struct request, queuelist); |
34 | list_del_init(&rq->csd.list); | 34 | list_del_init(&rq->queuelist); |
35 | rq->q->softirq_done_fn(rq); | 35 | rq->q->softirq_done_fn(rq); |
36 | } | 36 | } |
37 | } | 37 | } |
@@ -45,9 +45,14 @@ static void trigger_softirq(void *data) | |||
45 | 45 | ||
46 | local_irq_save(flags); | 46 | local_irq_save(flags); |
47 | list = this_cpu_ptr(&blk_cpu_done); | 47 | list = this_cpu_ptr(&blk_cpu_done); |
48 | list_add_tail(&rq->csd.list, list); | 48 | /* |
49 | * We reuse queuelist for a list of requests to process. Since the | ||
50 | * queuelist is used by the block layer only for requests waiting to be | ||
51 | * submitted to the device it is unused now. | ||
52 | */ | ||
53 | list_add_tail(&rq->queuelist, list); | ||
49 | 54 | ||
50 | if (list->next == &rq->csd.list) | 55 | if (list->next == &rq->queuelist) |
51 | raise_softirq_irqoff(BLOCK_SOFTIRQ); | 56 | raise_softirq_irqoff(BLOCK_SOFTIRQ); |
52 | 57 | ||
53 | local_irq_restore(flags); | 58 | local_irq_restore(flags); |
@@ -136,7 +141,7 @@ void __blk_complete_request(struct request *req) | |||
136 | struct list_head *list; | 141 | struct list_head *list; |
137 | do_local: | 142 | do_local: |
138 | list = this_cpu_ptr(&blk_cpu_done); | 143 | list = this_cpu_ptr(&blk_cpu_done); |
139 | list_add_tail(&req->csd.list, list); | 144 | list_add_tail(&req->queuelist, list); |
140 | 145 | ||
141 | /* | 146 | /* |
142 | * if the list only contains our just added request, | 147 | * if the list only contains our just added request, |
@@ -144,7 +149,7 @@ do_local: | |||
144 | * entries there, someone already raised the irq but it | 149 | * entries there, someone already raised the irq but it |
145 | * hasn't run yet. | 150 | * hasn't run yet. |
146 | */ | 151 | */ |
147 | if (list->next == &req->csd.list) | 152 | if (list->next == &req->queuelist) |
148 | raise_softirq_irqoff(BLOCK_SOFTIRQ); | 153 | raise_softirq_irqoff(BLOCK_SOFTIRQ); |
149 | } else if (raise_blk_irq(ccpu, req)) | 154 | } else if (raise_blk_irq(ccpu, req)) |
150 | goto do_local; | 155 | goto do_local; |