Commit d0d87c2c authored by Linus Torvalds's avatar Linus Torvalds Committed by Linus Torvalds

Merge kiwi:v2.5/linux into home.transmeta.com:/home/torvalds/v2.5/linux

parents 012cc981 404c384f
...@@ -2295,16 +2295,15 @@ static inline void end_request(struct request *req, int uptodate) ...@@ -2295,16 +2295,15 @@ static inline void end_request(struct request *req, int uptodate)
{ {
kdev_t dev = req->rq_dev; kdev_t dev = req->rq_dev;
if (end_that_request_first(req, uptodate, req->hard_cur_sectors)) if (end_that_request_first(req, uptodate, current_count_sectors))
return; return;
add_blkdev_randomness(major(dev)); add_blkdev_randomness(major(dev));
floppy_off(DEVICE_NR(dev)); floppy_off(DEVICE_NR(dev));
blkdev_dequeue_request(req); blkdev_dequeue_request(req);
end_that_request_last(req); end_that_request_last(req);
/* Get the next request */ /* We're done with the request */
req = elv_next_request(QUEUE); CURRENT = NULL;
CURRENT = req;
} }
...@@ -2335,27 +2334,8 @@ static void request_done(int uptodate) ...@@ -2335,27 +2334,8 @@ static void request_done(int uptodate)
/* unlock chained buffers */ /* unlock chained buffers */
spin_lock_irqsave(q->queue_lock, flags); spin_lock_irqsave(q->queue_lock, flags);
while (current_count_sectors && CURRENT && end_request(req, 1);
current_count_sectors >= req->current_nr_sectors){
current_count_sectors -= req->current_nr_sectors;
req->nr_sectors -= req->current_nr_sectors;
req->sector += req->current_nr_sectors;
end_request(req, 1);
}
spin_unlock_irqrestore(q->queue_lock, flags); spin_unlock_irqrestore(q->queue_lock, flags);
if (current_count_sectors && CURRENT) {
/* "unlock" last subsector */
req->buffer += current_count_sectors <<9;
req->current_nr_sectors -= current_count_sectors;
req->nr_sectors -= current_count_sectors;
req->sector += current_count_sectors;
return;
}
if (current_count_sectors && !CURRENT)
DPRINT("request list destroyed in floppy request done\n");
} else { } else {
if (rq_data_dir(req) == WRITE) { if (rq_data_dir(req) == WRITE) {
/* record write error information */ /* record write error information */
......
...@@ -1992,11 +1992,11 @@ int end_that_request_first(struct request *req, int uptodate, int nr_sectors) ...@@ -1992,11 +1992,11 @@ int end_that_request_first(struct request *req, int uptodate, int nr_sectors)
* not a complete bvec done * not a complete bvec done
*/ */
if (unlikely(nsect > nr_sectors)) { if (unlikely(nsect > nr_sectors)) {
int residual = (nsect - nr_sectors) << 9; int partial = nr_sectors << 9;
bio->bi_size -= residual; bio->bi_size -= partial;
bio_iovec(bio)->bv_offset += residual; bio_iovec(bio)->bv_offset += partial;
bio_iovec(bio)->bv_len -= residual; bio_iovec(bio)->bv_len -= partial;
blk_recalc_rq_sectors(req, nr_sectors); blk_recalc_rq_sectors(req, nr_sectors);
blk_recalc_rq_segments(req); blk_recalc_rq_segments(req);
return 1; return 1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment