aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd/mtd_blkdevs.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mtd/mtd_blkdevs.c')
-rw-r--r--drivers/mtd/mtd_blkdevs.c9
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}
129EXPORT_SYMBOL_GPL(mtd_blktrans_cease_background); 129EXPORT_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
205static int blktrans_open(struct block_device *bdev, fmode_t mode) 208static int blktrans_open(struct block_device *bdev, fmode_t mode)