diff options
Diffstat (limited to 'drivers/mtd/mtd_blkdevs.c')
-rw-r--r-- | drivers/mtd/mtd_blkdevs.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/mtd/mtd_blkdevs.c b/drivers/mtd/mtd_blkdevs.c index 650511304030..a534e1f0c348 100644 --- a/drivers/mtd/mtd_blkdevs.c +++ b/drivers/mtd/mtd_blkdevs.c | |||
@@ -124,7 +124,7 @@ int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev) | |||
124 | if (kthread_should_stop()) | 124 | if (kthread_should_stop()) |
125 | return 1; | 125 | return 1; |
126 | 126 | ||
127 | return !elv_queue_empty(dev->rq); | 127 | return dev->bg_stop; |
128 | } | 128 | } |
129 | EXPORT_SYMBOL_GPL(mtd_blktrans_cease_background); | 129 | EXPORT_SYMBOL_GPL(mtd_blktrans_cease_background); |
130 | 130 | ||
@@ -141,6 +141,7 @@ static int mtd_blktrans_thread(void *arg) | |||
141 | while (!kthread_should_stop()) { | 141 | while (!kthread_should_stop()) { |
142 | int res; | 142 | int res; |
143 | 143 | ||
144 | dev->bg_stop = false; | ||
144 | if (!req && !(req = blk_fetch_request(rq))) { | 145 | if (!req && !(req = blk_fetch_request(rq))) { |
145 | if (tr->background && !background_done) { | 146 | if (tr->background && !background_done) { |
146 | spin_unlock_irq(rq->queue_lock); | 147 | spin_unlock_irq(rq->queue_lock); |
@@ -152,7 +153,7 @@ static int mtd_blktrans_thread(void *arg) | |||
152 | * Do background processing just once per idle | 153 | * Do background processing just once per idle |
153 | * period. | 154 | * period. |
154 | */ | 155 | */ |
155 | background_done = 1; | 156 | background_done = !dev->bg_stop; |
156 | continue; | 157 | continue; |
157 | } | 158 | } |
158 | set_current_state(TASK_INTERRUPTIBLE); | 159 | set_current_state(TASK_INTERRUPTIBLE); |
@@ -198,8 +199,10 @@ static void mtd_blktrans_request(struct request_queue *rq) | |||
198 | if (!dev) | 199 | if (!dev) |
199 | while ((req = blk_fetch_request(rq)) != NULL) | 200 | while ((req = blk_fetch_request(rq)) != NULL) |
200 | __blk_end_request_all(req, -ENODEV); | 201 | __blk_end_request_all(req, -ENODEV); |
201 | else | 202 | else { |
203 | dev->bg_stop = true; | ||
202 | wake_up_process(dev->thread); | 204 | wake_up_process(dev->thread); |
205 | } | ||
203 | } | 206 | } |
204 | 207 | ||
205 | static int blktrans_open(struct block_device *bdev, fmode_t mode) | 208 | static int blktrans_open(struct block_device *bdev, fmode_t mode) |