Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 242766
b: refs/heads/master
c: c7519db
h: refs/heads/master
v: v3
  • Loading branch information
Jarkko Lavinen authored and David Woodhouse committed Mar 11, 2011
1 parent 02ba5b6 commit 08f5b09
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 13ce77f46c79a3839e4c2ff9722c9416c165f498
refs/heads/master: c7519dbf6f4b4408229d279d799c938ffdd06f21
26 changes: 26 additions & 0 deletions trunk/drivers/mtd/mtd_blkdevs.c
Original file line number Diff line number Diff line change
Expand Up @@ -119,18 +119,42 @@ static int do_blktrans_request(struct mtd_blktrans_ops *tr,
}
}

int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev)
{
if (kthread_should_stop())
return 1;

return !elv_queue_empty(dev->rq);
}
EXPORT_SYMBOL_GPL(mtd_blktrans_cease_background);

static int mtd_blktrans_thread(void *arg)
{
struct mtd_blktrans_dev *dev = arg;
struct mtd_blktrans_ops *tr = dev->tr;
struct request_queue *rq = dev->rq;
struct request *req = NULL;
int background_done = 0;

spin_lock_irq(rq->queue_lock);

while (!kthread_should_stop()) {
int res;

if (!req && !(req = blk_fetch_request(rq))) {
if (tr->background && !background_done) {
spin_unlock_irq(rq->queue_lock);
mutex_lock(&dev->lock);
tr->background(dev);
mutex_unlock(&dev->lock);
spin_lock_irq(rq->queue_lock);
/*
* Do background processing just once per idle
* period.
*/
background_done = 1;
continue;
}
set_current_state(TASK_INTERRUPTIBLE);

if (kthread_should_stop())
Expand All @@ -152,6 +176,8 @@ static int mtd_blktrans_thread(void *arg)

if (!__blk_end_request_cur(req, res))
req = NULL;

background_done = 0;
}

if (req)
Expand Down
2 changes: 2 additions & 0 deletions trunk/include/linux/mtd/blktrans.h
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ struct mtd_blktrans_ops {
unsigned long block, char *buffer);
int (*discard)(struct mtd_blktrans_dev *dev,
unsigned long block, unsigned nr_blocks);
void (*background)(struct mtd_blktrans_dev *dev);

/* Block layer ioctls */
int (*getgeo)(struct mtd_blktrans_dev *dev, struct hd_geometry *geo);
Expand All @@ -85,6 +86,7 @@ extern int register_mtd_blktrans(struct mtd_blktrans_ops *tr);
extern int deregister_mtd_blktrans(struct mtd_blktrans_ops *tr);
extern int add_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
extern int del_mtd_blktrans_dev(struct mtd_blktrans_dev *dev);
extern int mtd_blktrans_cease_background(struct mtd_blktrans_dev *dev);


#endif /* __MTD_TRANS_H__ */

0 comments on commit 08f5b09

Please sign in to comment.