Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 147029
b: refs/heads/master
c: 9934c8c
h: refs/heads/master
i:
  147027: 41d5c41
v: v3
  • Loading branch information
Tejun Heo authored and Jens Axboe committed May 11, 2009
1 parent 045fd0c commit ec34a69
Show file tree
Hide file tree
Showing 46 changed files with 173 additions and 208 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2343046826a8ca426b07601d9593ee046c298b68
refs/heads/master: 9934c8c04561413609d2bc38c6b9f268cba774a4
12 changes: 3 additions & 9 deletions trunk/arch/arm/plat-omap/mailbox.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,7 @@ static void mbox_tx_work(struct work_struct *work)
struct omap_msg_tx_data *tx_data;

spin_lock(q->queue_lock);
rq = elv_next_request(q);
if (rq)
blkdev_dequeue_request(rq);
rq = blk_fetch_request(q);
spin_unlock(q->queue_lock);

if (!rq)
Expand Down Expand Up @@ -242,9 +240,7 @@ static void mbox_rx_work(struct work_struct *work)

while (1) {
spin_lock_irqsave(q->queue_lock, flags);
rq = elv_next_request(q);
if (rq)
blkdev_dequeue_request(rq);
rq = blk_fetch_request(q);
spin_unlock_irqrestore(q->queue_lock, flags);
if (!rq)
break;
Expand Down Expand Up @@ -351,9 +347,7 @@ omap_mbox_read(struct device *dev, struct device_attribute *attr, char *buf)

while (1) {
spin_lock_irqsave(q->queue_lock, flags);
rq = elv_next_request(q);
if (rq)
blkdev_dequeue_request(rq);
rq = blk_fetch_request(q);
spin_unlock_irqrestore(q->queue_lock, flags);

if (!rq)
Expand Down
3 changes: 1 addition & 2 deletions trunk/arch/um/drivers/ubd_kern.c
Original file line number Diff line number Diff line change
Expand Up @@ -1228,12 +1228,11 @@ static void do_ubd_request(struct request_queue *q)
while(1){
struct ubd *dev = q->queuedata;
if(dev->end_sg == 0){
struct request *req = elv_next_request(q);
struct request *req = blk_fetch_request(q);
if(req == NULL)
return;

dev->request = req;
blkdev_dequeue_request(req);
dev->start_sg = 0;
dev->end_sg = blk_rq_map_sg(q, req, dev->sg);
}
Expand Down
4 changes: 2 additions & 2 deletions trunk/block/blk-barrier.c
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,7 @@ static inline bool start_ordered(struct request_queue *q, struct request **rqp)
}

/* stash away the original request */
elv_dequeue_request(q, rq);
blk_dequeue_request(rq);
q->orig_bar_rq = rq;
rq = NULL;

Expand Down Expand Up @@ -248,7 +248,7 @@ bool blk_do_ordered(struct request_queue *q, struct request **rqp)
* Queue ordering not supported. Terminate
* with prejudice.
*/
elv_dequeue_request(q, rq);
blk_dequeue_request(rq);
__blk_end_request_all(rq, -EOPNOTSUPP);
*rqp = NULL;
return false;
Expand Down
105 changes: 77 additions & 28 deletions trunk/block/blk-core.c
Original file line number Diff line number Diff line change
Expand Up @@ -902,6 +902,8 @@ EXPORT_SYMBOL(blk_get_request);
*/
void blk_requeue_request(struct request_queue *q, struct request *rq)
{
BUG_ON(blk_queued_rq(rq));

blk_delete_timer(rq);
blk_clear_rq_complete(rq);
trace_block_rq_requeue(q, rq);
Expand Down Expand Up @@ -1610,28 +1612,6 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq)
}
EXPORT_SYMBOL_GPL(blk_insert_cloned_request);

/**
* blkdev_dequeue_request - dequeue request and start timeout timer
* @req: request to dequeue
*
* Dequeue @req and start timeout timer on it. This hands off the
* request to the driver.
*
* Block internal functions which don't want to start timer should
* call elv_dequeue_request().
*/
void blkdev_dequeue_request(struct request *req)
{
elv_dequeue_request(req->q, req);

/*
* We are now handing the request to the hardware, add the
* timeout handler.
*/
blk_add_timer(req);
}
EXPORT_SYMBOL(blkdev_dequeue_request);

static void blk_account_io_completion(struct request *req, unsigned int bytes)
{
if (blk_do_io_stat(req)) {
Expand Down Expand Up @@ -1671,7 +1651,23 @@ static void blk_account_io_done(struct request *req)
}
}

struct request *elv_next_request(struct request_queue *q)
/**
* blk_peek_request - peek at the top of a request queue
* @q: request queue to peek at
*
* Description:
* Return the request at the top of @q. The returned request
* should be started using blk_start_request() before LLD starts
* processing it.
*
* Return:
* Pointer to the request at the top of @q if available. Null
* otherwise.
*
* Context:
* queue_lock must be held.
*/
struct request *blk_peek_request(struct request_queue *q)
{
struct request *rq;
int ret;
Expand Down Expand Up @@ -1748,10 +1744,12 @@ struct request *elv_next_request(struct request_queue *q)

return rq;
}
EXPORT_SYMBOL(elv_next_request);
EXPORT_SYMBOL(blk_peek_request);

void elv_dequeue_request(struct request_queue *q, struct request *rq)
void blk_dequeue_request(struct request *rq)
{
struct request_queue *q = rq->q;

BUG_ON(list_empty(&rq->queuelist));
BUG_ON(ELV_ON_HASH(rq));

Expand All @@ -1766,6 +1764,58 @@ void elv_dequeue_request(struct request_queue *q, struct request *rq)
q->in_flight++;
}

/**
* blk_start_request - start request processing on the driver
* @req: request to dequeue
*
* Description:
* Dequeue @req and start timeout timer on it. This hands off the
* request to the driver.
*
* Block internal functions which don't want to start timer should
* call blk_dequeue_request().
*
* Context:
* queue_lock must be held.
*/
void blk_start_request(struct request *req)
{
blk_dequeue_request(req);

/*
* We are now handing the request to the hardware, add the
* timeout handler.
*/
blk_add_timer(req);
}
EXPORT_SYMBOL(blk_start_request);

/**
* blk_fetch_request - fetch a request from a request queue
* @q: request queue to fetch a request from
*
* Description:
* Return the request at the top of @q. The request is started on
* return and LLD can start processing it immediately.
*
* Return:
* Pointer to the request at the top of @q if available. Null
* otherwise.
*
* Context:
* queue_lock must be held.
*/
struct request *blk_fetch_request(struct request_queue *q)
{
struct request *rq;

rq = blk_peek_request(q);
if (rq)
blk_start_request(rq);
return rq;
}
EXPORT_SYMBOL(blk_fetch_request);

/**
* blk_update_request - Special helper function for request stacking drivers
* @rq: the request being processed
Expand Down Expand Up @@ -1937,12 +1987,11 @@ static bool blk_update_bidi_request(struct request *rq, int error,
*/
static void blk_finish_request(struct request *req, int error)
{
BUG_ON(blk_queued_rq(req));

if (blk_rq_tagged(req))
blk_queue_end_tag(req->q, req);

if (blk_queued_rq(req))
elv_dequeue_request(req->q, req);

if (unlikely(laptop_mode) && blk_fs_request(req))
laptop_io_completion();

Expand Down
2 changes: 1 addition & 1 deletion trunk/block/blk-tag.c
Original file line number Diff line number Diff line change
Expand Up @@ -374,7 +374,7 @@ int blk_queue_start_tag(struct request_queue *q, struct request *rq)
rq->cmd_flags |= REQ_QUEUED;
rq->tag = tag;
bqt->tag_index[tag] = rq;
blkdev_dequeue_request(rq);
blk_start_request(rq);
list_add(&rq->queuelist, &q->tag_busy_list);
return 0;
}
Expand Down
1 change: 1 addition & 0 deletions trunk/block/blk.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ extern struct kobj_type blk_queue_ktype;
void init_request_from_bio(struct request *req, struct bio *bio);
void blk_rq_bio_prep(struct request_queue *q, struct request *rq,
struct bio *bio);
void blk_dequeue_request(struct request *rq);
void __blk_queue_free_tags(struct request_queue *q);

void blk_unplug_work(struct work_struct *work);
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/block/DAC960.c
Original file line number Diff line number Diff line change
Expand Up @@ -3321,7 +3321,7 @@ static int DAC960_process_queue(DAC960_Controller_T *Controller, struct request_
DAC960_Command_T *Command;

while(1) {
Request = elv_next_request(req_q);
Request = blk_peek_request(req_q);
if (!Request)
return 1;

Expand All @@ -3341,7 +3341,7 @@ static int DAC960_process_queue(DAC960_Controller_T *Controller, struct request_
Command->BlockNumber = blk_rq_pos(Request);
Command->BlockCount = blk_rq_sectors(Request);
Command->Request = Request;
blkdev_dequeue_request(Request);
blk_start_request(Request);
Command->SegmentCount = blk_rq_map_sg(req_q,
Command->Request, Command->cmd_sglist);
/* pci_map_sg MAY change the value of SegCount */
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/block/amiflop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1342,12 +1342,11 @@ static void redo_fd_request(void)
int err;

next_req:
rq = elv_next_request(floppy_queue);
rq = blk_fetch_request(floppy_queue);
if (!rq) {
/* Nothing left to do */
return;
}
blkdev_dequeue_request(rq);

floppy = rq->rq_disk->private_data;
drive = floppy - unit;
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/block/ataflop.c
Original file line number Diff line number Diff line change
Expand Up @@ -1404,10 +1404,9 @@ static void redo_fd_request(void)

repeat:
if (!fd_request) {
fd_request = elv_next_request(floppy_queue);
fd_request = blk_fetch_request(floppy_queue);
if (!fd_request)
goto the_end;
blkdev_dequeue_request(fd_request);
}

floppy = fd_request->rq_disk->private_data;
Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/block/cciss.c
Original file line number Diff line number Diff line change
Expand Up @@ -2801,7 +2801,7 @@ static void do_cciss_request(struct request_queue *q)
goto startio;

queue:
creq = elv_next_request(q);
creq = blk_peek_request(q);
if (!creq)
goto startio;

Expand All @@ -2810,7 +2810,7 @@ static void do_cciss_request(struct request_queue *q)
if ((c = cmd_alloc(h, 1)) == NULL)
goto full;

blkdev_dequeue_request(creq);
blk_start_request(creq);

spin_unlock_irq(q->queue_lock);

Expand Down
4 changes: 2 additions & 2 deletions trunk/drivers/block/cpqarray.c
Original file line number Diff line number Diff line change
Expand Up @@ -903,7 +903,7 @@ static void do_ida_request(struct request_queue *q)
goto startio;

queue_next:
creq = elv_next_request(q);
creq = blk_peek_request(q);
if (!creq)
goto startio;

Expand All @@ -912,7 +912,7 @@ static void do_ida_request(struct request_queue *q)
if ((c = cmd_alloc(h,1)) == NULL)
goto startio;

blkdev_dequeue_request(creq);
blk_start_request(creq);

c->ctlr = h->ctlr;
c->hdr.unit = (drv_info_t *)(creq->rq_disk->private_data) - h->drv;
Expand Down
6 changes: 2 additions & 4 deletions trunk/drivers/block/floppy.c
Original file line number Diff line number Diff line change
Expand Up @@ -931,7 +931,7 @@ static inline void unlock_fdc(void)
del_timer(&fd_timeout);
cont = NULL;
clear_bit(0, &fdc_busy);
if (current_req || elv_next_request(floppy_queue))
if (current_req || blk_peek_request(floppy_queue))
do_fd_request(floppy_queue);
spin_unlock_irqrestore(&floppy_lock, flags);
wake_up(&fdc_wait);
Expand Down Expand Up @@ -2912,9 +2912,7 @@ static void redo_fd_request(void)
struct request *req;

spin_lock_irq(floppy_queue->queue_lock);
req = elv_next_request(floppy_queue);
if (req)
blkdev_dequeue_request(req);
req = blk_fetch_request(floppy_queue);
spin_unlock_irq(floppy_queue->queue_lock);
if (!req) {
do_floppy = NULL;
Expand Down
3 changes: 1 addition & 2 deletions trunk/drivers/block/hd.c
Original file line number Diff line number Diff line change
Expand Up @@ -592,12 +592,11 @@ static void hd_request(void)
del_timer(&device_timer);

if (!hd_req) {
hd_req = elv_next_request(hd_queue);
hd_req = blk_fetch_request(hd_queue);
if (!hd_req) {
do_hd = NULL;
return;
}
blkdev_dequeue_request(hd_req);
}
req = hd_req;

Expand Down
12 changes: 4 additions & 8 deletions trunk/drivers/block/mg_disk.c
Original file line number Diff line number Diff line change
Expand Up @@ -671,10 +671,8 @@ static void mg_request_poll(struct request_queue *q)

while (1) {
if (!host->req) {
host->req = elv_next_request(q);
if (host->req)
blkdev_dequeue_request(host->req);
else
host->req = blk_fetch_request(q);
if (!host->req)
break;
}

Expand Down Expand Up @@ -744,10 +742,8 @@ static void mg_request(struct request_queue *q)

while (1) {
if (!host->req) {
host->req = elv_next_request(q);
if (host->req)
blkdev_dequeue_request(host->req);
else
host->req = blk_fetch_request(q);
if (!host->req)
break;
}
req = host->req;
Expand Down
4 changes: 1 addition & 3 deletions trunk/drivers/block/nbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,11 +533,9 @@ static void do_nbd_request(struct request_queue *q)
{
struct request *req;

while ((req = elv_next_request(q)) != NULL) {
while ((req = blk_fetch_request(q)) != NULL) {
struct nbd_device *lo;

blkdev_dequeue_request(req);

spin_unlock_irq(q->queue_lock);

dprintk(DBG_BLKDEV, "%s: request %p: dequeued (flags=%x)\n",
Expand Down
Loading

0 comments on commit ec34a69

Please sign in to comment.