diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-11 13:52:27 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-06-11 14:10:35 -0400 |
commit | c9059598ea8981d02356eead3188bf7fa4d717b8 (patch) | |
tree | 03e73b20a30e988da7c6a3e0ad93b2dc5843274d /block/blk-core.c | |
parent | 0a33f80a8373eca7f4bea3961d1346c3815fa5ed (diff) | |
parent | b0fd271d5fba0b2d00888363f3869e3f9b26caa9 (diff) |
Merge branch 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block
* 'for-2.6.31' of git://git.kernel.dk/linux-2.6-block: (153 commits)
block: add request clone interface (v2)
floppy: fix hibernation
ramdisk: remove long-deprecated "ramdisk=" boot-time parameter
fs/bio.c: add missing __user annotation
block: prevent possible io_context->refcount overflow
Add serial number support for virtio_blk, V4a
block: Add missing bounce_pfn stacking and fix comments
Revert "block: Fix bounce limit setting in DM"
cciss: decode unit attention in SCSI error handling code
cciss: Remove no longer needed sendcmd reject processing code
cciss: change SCSI error handling routines to work with interrupts enabled.
cciss: separate error processing and command retrying code in sendcmd_withirq_core()
cciss: factor out fix target status processing code from sendcmd functions
cciss: simplify interface of sendcmd() and sendcmd_withirq()
cciss: factor out core of sendcmd_withirq() for use by SCSI error handling code
cciss: Use schedule_timeout_uninterruptible in SCSI error handling code
block: needs to set the residual length of a bidi request
Revert "block: implement blkdev_readpages"
block: Fix bounce limit setting in DM
Removed reference to non-existing file Documentation/PCI/PCI-DMA-mapping.txt
...
Manually fix conflicts with tracing updates in:
block/blk-sysfs.c
drivers/ide/ide-atapi.c
drivers/ide/ide-cd.c
drivers/ide/ide-floppy.c
drivers/ide/ide-tape.c
include/trace/events/block.h
kernel/trace/blktrace.c
Diffstat (limited to 'block/blk-core.c')
-rw-r--r-- | block/blk-core.c | 848 |
1 files changed, 546 insertions, 302 deletions
diff --git a/block/blk-core.c b/block/blk-core.c index 648f15cb41f1..d17d71c71d4f 100644 --- a/block/blk-core.c +++ b/block/blk-core.c | |||
@@ -60,11 +60,11 @@ static void drive_stat_acct(struct request *rq, int new_io) | |||
60 | int rw = rq_data_dir(rq); | 60 | int rw = rq_data_dir(rq); |
61 | int cpu; | 61 | int cpu; |
62 | 62 | ||
63 | if (!blk_fs_request(rq) || !blk_do_io_stat(rq)) | 63 | if (!blk_do_io_stat(rq)) |
64 | return; | 64 | return; |
65 | 65 | ||
66 | cpu = part_stat_lock(); | 66 | cpu = part_stat_lock(); |
67 | part = disk_map_sector_rcu(rq->rq_disk, rq->sector); | 67 | part = disk_map_sector_rcu(rq->rq_disk, blk_rq_pos(rq)); |
68 | 68 | ||
69 | if (!new_io) | 69 | if (!new_io) |
70 | part_stat_inc(cpu, part, merges[rw]); | 70 | part_stat_inc(cpu, part, merges[rw]); |
@@ -119,13 +119,14 @@ void blk_rq_init(struct request_queue *q, struct request *rq) | |||
119 | INIT_LIST_HEAD(&rq->timeout_list); | 119 | INIT_LIST_HEAD(&rq->timeout_list); |
120 | rq->cpu = -1; | 120 | rq->cpu = -1; |
121 | rq->q = q; | 121 | rq->q = q; |
122 | rq->sector = rq->hard_sector = (sector_t) -1; | 122 | rq->__sector = (sector_t) -1; |
123 | INIT_HLIST_NODE(&rq->hash); | 123 | INIT_HLIST_NODE(&rq->hash); |
124 | RB_CLEAR_NODE(&rq->rb_node); | 124 | RB_CLEAR_NODE(&rq->rb_node); |
125 | rq->cmd = rq->__cmd; | 125 | rq->cmd = rq->__cmd; |
126 | rq->cmd_len = BLK_MAX_CDB; | 126 | rq->cmd_len = BLK_MAX_CDB; |
127 | rq->tag = -1; | 127 | rq->tag = -1; |
128 | rq->ref_count = 1; | 128 | rq->ref_count = 1; |
129 | rq->start_time = jiffies; | ||
129 | } | 130 | } |
130 | EXPORT_SYMBOL(blk_rq_init); | 131 | EXPORT_SYMBOL(blk_rq_init); |
131 | 132 | ||
@@ -176,14 +177,11 @@ void blk_dump_rq_flags(struct request *rq, char *msg) | |||
176 | rq->rq_disk ? rq->rq_disk->disk_name : "?", rq->cmd_type, | 177 | rq->rq_disk ? rq->rq_disk->disk_name : "?", rq->cmd_type, |
177 | rq->cmd_flags); | 178 | rq->cmd_flags); |
178 | 179 | ||
179 | printk(KERN_INFO " sector %llu, nr/cnr %lu/%u\n", | 180 | printk(KERN_INFO " sector %llu, nr/cnr %u/%u\n", |
180 | (unsigned long long)rq->sector, | 181 | (unsigned long long)blk_rq_pos(rq), |
181 | rq->nr_sectors, | 182 | blk_rq_sectors(rq), blk_rq_cur_sectors(rq)); |
182 | rq->current_nr_sectors); | 183 | printk(KERN_INFO " bio %p, biotail %p, buffer %p, len %u\n", |
183 | printk(KERN_INFO " bio %p, biotail %p, buffer %p, data %p, len %u\n", | 184 | rq->bio, rq->biotail, rq->buffer, blk_rq_bytes(rq)); |
184 | rq->bio, rq->biotail, | ||
185 | rq->buffer, rq->data, | ||
186 | rq->data_len); | ||
187 | 185 | ||
188 | if (blk_pc_request(rq)) { | 186 | if (blk_pc_request(rq)) { |
189 | printk(KERN_INFO " cdb: "); | 187 | printk(KERN_INFO " cdb: "); |
@@ -325,24 +323,6 @@ void blk_unplug(struct request_queue *q) | |||
325 | } | 323 | } |
326 | EXPORT_SYMBOL(blk_unplug); | 324 | EXPORT_SYMBOL(blk_unplug); |
327 | 325 | ||
328 | static void blk_invoke_request_fn(struct request_queue *q) | ||
329 | { | ||
330 | if (unlikely(blk_queue_stopped(q))) | ||
331 | return; | ||
332 | |||
333 | /* | ||
334 | * one level of recursion is ok and is much faster than kicking | ||
335 | * the unplug handling | ||
336 | */ | ||
337 | if (!queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) { | ||
338 | q->request_fn(q); | ||
339 | queue_flag_clear(QUEUE_FLAG_REENTER, q); | ||
340 | } else { | ||
341 | queue_flag_set(QUEUE_FLAG_PLUGGED, q); | ||
342 | kblockd_schedule_work(q, &q->unplug_work); | ||
343 | } | ||
344 | } | ||
345 | |||
346 | /** | 326 | /** |
347 | * blk_start_queue - restart a previously stopped queue | 327 | * blk_start_queue - restart a previously stopped queue |
348 | * @q: The &struct request_queue in question | 328 | * @q: The &struct request_queue in question |
@@ -357,7 +337,7 @@ void blk_start_queue(struct request_queue *q) | |||
357 | WARN_ON(!irqs_disabled()); | 337 | WARN_ON(!irqs_disabled()); |
358 | 338 | ||
359 | queue_flag_clear(QUEUE_FLAG_STOPPED, q); | 339 | queue_flag_clear(QUEUE_FLAG_STOPPED, q); |
360 | blk_invoke_request_fn(q); | 340 | __blk_run_queue(q); |
361 | } | 341 | } |
362 | EXPORT_SYMBOL(blk_start_queue); | 342 | EXPORT_SYMBOL(blk_start_queue); |
363 | 343 | ||
@@ -417,12 +397,23 @@ void __blk_run_queue(struct request_queue *q) | |||
417 | { | 397 | { |
418 | blk_remove_plug(q); | 398 | blk_remove_plug(q); |
419 | 399 | ||
400 | if (unlikely(blk_queue_stopped(q))) | ||
401 | return; | ||
402 | |||
403 | if (elv_queue_empty(q)) | ||
404 | return; | ||
405 | |||
420 | /* | 406 | /* |
421 | * Only recurse once to avoid overrunning the stack, let the unplug | 407 | * Only recurse once to avoid overrunning the stack, let the unplug |
422 | * handling reinvoke the handler shortly if we already got there. | 408 | * handling reinvoke the handler shortly if we already got there. |
423 | */ | 409 | */ |
424 | if (!elv_queue_empty(q)) | 410 | if (!queue_flag_test_and_set(QUEUE_FLAG_REENTER, q)) { |
425 | blk_invoke_request_fn(q); | 411 | q->request_fn(q); |
412 | queue_flag_clear(QUEUE_FLAG_REENTER, q); | ||
413 | } else { | ||
414 | queue_flag_set(QUEUE_FLAG_PLUGGED, q); | ||
415 | kblockd_schedule_work(q, &q->unplug_work); | ||
416 | } | ||
426 | } | 417 | } |
427 | EXPORT_SYMBOL(__blk_run_queue); | 418 | EXPORT_SYMBOL(__blk_run_queue); |
428 | 419 | ||
@@ -432,9 +423,7 @@ EXPORT_SYMBOL(__blk_run_queue); | |||
432 | * | 423 | * |
433 | * Description: | 424 | * Description: |
434 | * Invoke request handling on this queue, if it has pending work to do. | 425 | * Invoke request handling on this queue, if it has pending work to do. |
435 | * May be used to restart queueing when a request has completed. Also | 426 | * May be used to restart queueing when a request has completed. |
436 | * See @blk_start_queueing. | ||
437 | * | ||
438 | */ | 427 | */ |
439 | void blk_run_queue(struct request_queue *q) | 428 | void blk_run_queue(struct request_queue *q) |
440 | { | 429 | { |
@@ -894,26 +883,58 @@ struct request *blk_get_request(struct request_queue *q, int rw, gfp_t gfp_mask) | |||
894 | EXPORT_SYMBOL(blk_get_request); | 883 | EXPORT_SYMBOL(blk_get_request); |
895 | 884 | ||
896 | /** | 885 | /** |
897 | * blk_start_queueing - initiate dispatch of requests to device | 886 | * blk_make_request - given a bio, allocate a corresponding struct request. |
898 | * @q: request queue to kick into gear | 887 | * |
888 | * @bio: The bio describing the memory mappings that will be submitted for IO. | ||
889 | * It may be a chained-bio properly constructed by block/bio layer. | ||
899 | * | 890 | * |
900 | * This is basically a helper to remove the need to know whether a queue | 891 | * blk_make_request is the parallel of generic_make_request for BLOCK_PC |
901 | * is plugged or not if someone just wants to initiate dispatch of requests | 892 | * type commands. Where the struct request needs to be farther initialized by |
902 | * for this queue. Should be used to start queueing on a device outside | 893 | * the caller. It is passed a &struct bio, which describes the memory info of |
903 | * of ->request_fn() context. Also see @blk_run_queue. | 894 | * the I/O transfer. |
904 | * | 895 | * |
905 | * The queue lock must be held with interrupts disabled. | 896 | * The caller of blk_make_request must make sure that bi_io_vec |
897 | * are set to describe the memory buffers. That bio_data_dir() will return | ||
898 | * the needed direction of the request. (And all bio's in the passed bio-chain | ||
899 | * are properly set accordingly) | ||
900 | * | ||
901 | * If called under none-sleepable conditions, mapped bio buffers must not | ||
902 | * need bouncing, by calling the appropriate masked or flagged allocator, | ||
903 | * suitable for the target device. Otherwise the call to blk_queue_bounce will | ||
904 | * BUG. | ||
905 | * | ||
906 | * WARNING: When allocating/cloning a bio-chain, careful consideration should be | ||
907 | * given to how you allocate bios. In particular, you cannot use __GFP_WAIT for | ||
908 | * anything but the first bio in the chain. Otherwise you risk waiting for IO | ||
909 | * completion of a bio that hasn't been submitted yet, thus resulting in a | ||
910 | * deadlock. Alternatively bios should be allocated using bio_kmalloc() instead | ||
911 | * of bio_alloc(), as that avoids the mempool deadlock. | ||
912 | * If possible a big IO should be split into smaller parts when allocation | ||
913 | * fails. Partial allocation should not be an error, or you risk a live-lock. | ||
906 | */ | 914 | */ |
907 | void blk_start_queueing(struct request_queue *q) | 915 | struct request *blk_make_request(struct request_queue *q, struct bio *bio, |
916 | gfp_t gfp_mask) | ||
908 | { | 917 | { |
909 | if (!blk_queue_plugged(q)) { | 918 | struct request *rq = blk_get_request(q, bio_data_dir(bio), gfp_mask); |
910 | if (unlikely(blk_queue_stopped(q))) | 919 | |
911 | return; | 920 | if (unlikely(!rq)) |
912 | q->request_fn(q); | 921 | return ERR_PTR(-ENOMEM); |
913 | } else | 922 | |
914 | __generic_unplug_device(q); | 923 | for_each_bio(bio) { |
924 | struct bio *bounce_bio = bio; | ||
925 | int ret; | ||
926 | |||
927 | blk_queue_bounce(q, &bounce_bio); | ||
928 | ret = blk_rq_append_bio(q, rq, bounce_bio); | ||
929 | if (unlikely(ret)) { | ||
930 | blk_put_request(rq); | ||
931 | return ERR_PTR(ret); | ||
932 | } | ||
933 | } | ||
934 | |||
935 | return rq; | ||
915 | } | 936 | } |
916 | EXPORT_SYMBOL(blk_start_queueing); | 937 | EXPORT_SYMBOL(blk_make_request); |
917 | 938 | ||
918 | /** | 939 | /** |
919 | * blk_requeue_request - put a request back on queue | 940 | * blk_requeue_request - put a request back on queue |
@@ -934,6 +955,8 @@ void blk_requeue_request(struct request_queue *q, struct request *rq) | |||
934 | if (blk_rq_tagged(rq)) | 955 | if (blk_rq_tagged(rq)) |
935 | blk_queue_end_tag(q, rq); | 956 | blk_queue_end_tag(q, rq); |
936 | 957 | ||
958 | BUG_ON(blk_queued_rq(rq)); | ||
959 | |||
937 | elv_requeue_request(q, rq); | 960 | elv_requeue_request(q, rq); |
938 | } | 961 | } |
939 | EXPORT_SYMBOL(blk_requeue_request); | 962 | EXPORT_SYMBOL(blk_requeue_request); |
@@ -969,7 +992,6 @@ void blk_insert_request(struct request_queue *q, struct request *rq, | |||
969 | * barrier | 992 | * barrier |
970 | */ | 993 | */ |
971 | rq->cmd_type = REQ_TYPE_SPECIAL; | 994 | rq->cmd_type = REQ_TYPE_SPECIAL; |
972 | rq->cmd_flags |= REQ_SOFTBARRIER; | ||
973 | 995 | ||
974 | rq->special = data; | 996 | rq->special = data; |
975 | 997 | ||
@@ -983,7 +1005,7 @@ void blk_insert_request(struct request_queue *q, struct request *rq, | |||
983 | 1005 | ||
984 | drive_stat_acct(rq, 1); | 1006 | drive_stat_acct(rq, 1); |
985 | __elv_add_request(q, rq, where, 0); | 1007 | __elv_add_request(q, rq, where, 0); |
986 | blk_start_queueing(q); | 1008 | __blk_run_queue(q); |
987 | spin_unlock_irqrestore(q->queue_lock, flags); | 1009 | spin_unlock_irqrestore(q->queue_lock, flags); |
988 | } | 1010 | } |
989 | EXPORT_SYMBOL(blk_insert_request); | 1011 | EXPORT_SYMBOL(blk_insert_request); |
@@ -1105,16 +1127,13 @@ void init_request_from_bio(struct request *req, struct bio *bio) | |||
1105 | if (bio_failfast_driver(bio)) | 1127 | if (bio_failfast_driver(bio)) |
1106 | req->cmd_flags |= REQ_FAILFAST_DRIVER; | 1128 | req->cmd_flags |= REQ_FAILFAST_DRIVER; |
1107 | 1129 | ||
1108 | /* | ||
1109 | * REQ_BARRIER implies no merging, but lets make it explicit | ||
1110 | */ | ||
1111 | if (unlikely(bio_discard(bio))) { | 1130 | if (unlikely(bio_discard(bio))) { |
1112 | req->cmd_flags |= REQ_DISCARD; | 1131 | req->cmd_flags |= REQ_DISCARD; |
1113 | if (bio_barrier(bio)) | 1132 | if (bio_barrier(bio)) |
1114 | req->cmd_flags |= REQ_SOFTBARRIER; | 1133 | req->cmd_flags |= REQ_SOFTBARRIER; |
1115 | req->q->prepare_discard_fn(req->q, req); | 1134 | req->q->prepare_discard_fn(req->q, req); |
1116 | } else if (unlikely(bio_barrier(bio))) | 1135 | } else if (unlikely(bio_barrier(bio))) |
1117 | req->cmd_flags |= (REQ_HARDBARRIER | REQ_NOMERGE); | 1136 | req->cmd_flags |= REQ_HARDBARRIER; |
1118 | 1137 | ||
1119 | if (bio_sync(bio)) | 1138 | if (bio_sync(bio)) |
1120 | req->cmd_flags |= REQ_RW_SYNC; | 1139 | req->cmd_flags |= REQ_RW_SYNC; |
@@ -1124,9 +1143,8 @@ void init_request_from_bio(struct request *req, struct bio *bio) | |||
1124 | req->cmd_flags |= REQ_NOIDLE; | 1143 | req->cmd_flags |= REQ_NOIDLE; |
1125 | 1144 | ||
1126 | req->errors = 0; | 1145 | req->errors = 0; |
1127 | req->hard_sector = req->sector = bio->bi_sector; | 1146 | req->__sector = bio->bi_sector; |
1128 | req->ioprio = bio_prio(bio); | 1147 | req->ioprio = bio_prio(bio); |
1129 | req->start_time = jiffies; | ||
1130 | blk_rq_bio_prep(req->q, req, bio); | 1148 | blk_rq_bio_prep(req->q, req, bio); |
1131 | } | 1149 | } |
1132 | 1150 | ||
@@ -1142,14 +1160,13 @@ static inline bool queue_should_plug(struct request_queue *q) | |||
1142 | static int __make_request(struct request_queue *q, struct bio *bio) | 1160 | static int __make_request(struct request_queue *q, struct bio *bio) |
1143 | { | 1161 | { |
1144 | struct request *req; | 1162 | struct request *req; |
1145 | int el_ret, nr_sectors; | 1163 | int el_ret; |
1164 | unsigned int bytes = bio->bi_size; | ||
1146 | const unsigned short prio = bio_prio(bio); | 1165 | const unsigned short prio = bio_prio(bio); |
1147 | const int sync = bio_sync(bio); | 1166 | const int sync = bio_sync(bio); |
1148 | const int unplug = bio_unplug(bio); | 1167 | const int unplug = bio_unplug(bio); |
1149 | int rw_flags; | 1168 | int rw_flags; |
1150 | 1169 | ||
1151 | nr_sectors = bio_sectors(bio); | ||
1152 | |||
1153 | /* | 1170 | /* |
1154 | * low level driver can indicate that it wants pages above a | 1171 | * low level driver can indicate that it wants pages above a |
1155 | * certain limit bounced to low memory (ie for highmem, or even | 1172 | * certain limit bounced to low memory (ie for highmem, or even |
@@ -1174,7 +1191,7 @@ static int __make_request(struct request_queue *q, struct bio *bio) | |||
1174 | 1191 | ||
1175 | req->biotail->bi_next = bio; | 1192 | req->biotail->bi_next = bio; |
1176 | req->biotail = bio; | 1193 | req->biotail = bio; |
1177 | req->nr_sectors = req->hard_nr_sectors += nr_sectors; | 1194 | req->__data_len += bytes; |
1178 | req->ioprio = ioprio_best(req->ioprio, prio); | 1195 | req->ioprio = ioprio_best(req->ioprio, prio); |
1179 | if (!blk_rq_cpu_valid(req)) | 1196 | if (!blk_rq_cpu_valid(req)) |
1180 | req->cpu = bio->bi_comp_cpu; | 1197 | req->cpu = bio->bi_comp_cpu; |
@@ -1200,10 +1217,8 @@ static int __make_request(struct request_queue *q, struct bio *bio) | |||
1200 | * not touch req->buffer either... | 1217 | * not touch req->buffer either... |
1201 | */ | 1218 | */ |
1202 | req->buffer = bio_data(bio); | 1219 | req->buffer = bio_data(bio); |
1203 | req->current_nr_sectors = bio_cur_sectors(bio); | 1220 | req->__sector = bio->bi_sector; |
1204 | req->hard_cur_sectors = req->current_nr_sectors; | 1221 | req->__data_len += bytes; |
1205 | req->sector = req->hard_sector = bio->bi_sector; | ||
1206 | req->nr_sectors = req->hard_nr_sectors += nr_sectors; | ||
1207 | req->ioprio = ioprio_best(req->ioprio, prio); | 1222 | req->ioprio = ioprio_best(req->ioprio, prio); |
1208 | if (!blk_rq_cpu_valid(req)) | 1223 | if (!blk_rq_cpu_valid(req)) |
1209 | req->cpu = bio->bi_comp_cpu; | 1224 | req->cpu = bio->bi_comp_cpu; |
@@ -1414,11 +1429,11 @@ static inline void __generic_make_request(struct bio *bio) | |||
1414 | goto end_io; | 1429 | goto end_io; |
1415 | } | 1430 | } |
1416 | 1431 | ||
1417 | if (unlikely(nr_sectors > q->max_hw_sectors)) { | 1432 | if (unlikely(nr_sectors > queue_max_hw_sectors(q))) { |
1418 | printk(KERN_ERR "bio too big device %s (%u > %u)\n", | 1433 | printk(KERN_ERR "bio too big device %s (%u > %u)\n", |
1419 | bdevname(bio->bi_bdev, b), | 1434 | bdevname(bio->bi_bdev, b), |
1420 | bio_sectors(bio), | 1435 | bio_sectors(bio), |
1421 | q->max_hw_sectors); | 1436 | queue_max_hw_sectors(q)); |
1422 | goto end_io; | 1437 | goto end_io; |
1423 | } | 1438 | } |
1424 | 1439 | ||
@@ -1584,8 +1599,8 @@ EXPORT_SYMBOL(submit_bio); | |||
1584 | */ | 1599 | */ |
1585 | int blk_rq_check_limits(struct request_queue *q, struct request *rq) | 1600 | int blk_rq_check_limits(struct request_queue *q, struct request *rq) |
1586 | { | 1601 | { |
1587 | if (rq->nr_sectors > q->max_sectors || | 1602 | if (blk_rq_sectors(rq) > queue_max_sectors(q) || |
1588 | rq->data_len > q->max_hw_sectors << 9) { | 1603 | blk_rq_bytes(rq) > queue_max_hw_sectors(q) << 9) { |
1589 | printk(KERN_ERR "%s: over max size limit.\n", __func__); | 1604 | printk(KERN_ERR "%s: over max size limit.\n", __func__); |
1590 | return -EIO; | 1605 | return -EIO; |
1591 | } | 1606 | } |
@@ -1597,8 +1612,8 @@ int blk_rq_check_limits(struct request_queue *q, struct request *rq) | |||
1597 | * limitation. | 1612 | * limitation. |
1598 | */ | 1613 | */ |
1599 | blk_recalc_rq_segments(rq); | 1614 | blk_recalc_rq_segments(rq); |
1600 | if (rq->nr_phys_segments > q->max_phys_segments || | 1615 | if (rq->nr_phys_segments > queue_max_phys_segments(q) || |
1601 | rq->nr_phys_segments > q->max_hw_segments) { | 1616 | rq->nr_phys_segments > queue_max_hw_segments(q)) { |
1602 | printk(KERN_ERR "%s: over max segments limit.\n", __func__); | 1617 | printk(KERN_ERR "%s: over max segments limit.\n", __func__); |
1603 | return -EIO; | 1618 | return -EIO; |
1604 | } | 1619 | } |
@@ -1642,40 +1657,15 @@ int blk_insert_cloned_request(struct request_queue *q, struct request *rq) | |||
1642 | } | 1657 | } |
1643 | EXPORT_SYMBOL_GPL(blk_insert_cloned_request); | 1658 | EXPORT_SYMBOL_GPL(blk_insert_cloned_request); |
1644 | 1659 | ||
1645 | /** | ||
1646 | * blkdev_dequeue_request - dequeue request and start timeout timer | ||
1647 | * @req: request to dequeue | ||
1648 | * | ||
1649 | * Dequeue @req and start timeout timer on it. This hands off the | ||
1650 | * request to the driver. | ||
1651 | * | ||
1652 | * Block internal functions which don't want to start timer should | ||
1653 | * call elv_dequeue_request(). | ||
1654 | */ | ||
1655 | void blkdev_dequeue_request(struct request *req) | ||
1656 | { | ||
1657 | elv_dequeue_request(req->q, req); | ||
1658 | |||
1659 | /* | ||
1660 | * We are now handing the request to the hardware, add the | ||
1661 | * timeout handler. | ||
1662 | */ | ||
1663 | blk_add_timer(req); | ||
1664 | } | ||
1665 | EXPORT_SYMBOL(blkdev_dequeue_request); | ||
1666 | |||
1667 | static void blk_account_io_completion(struct request *req, unsigned int bytes) | 1660 | static void blk_account_io_completion(struct request *req, unsigned int bytes) |
1668 | { | 1661 | { |
1669 | if (!blk_do_io_stat(req)) | 1662 | if (blk_do_io_stat(req)) { |
1670 | return; | ||
1671 | |||
1672 | if (blk_fs_request(req)) { | ||
1673 | const int rw = rq_data_dir(req); | 1663 | const int rw = rq_data_dir(req); |
1674 | struct hd_struct *part; | 1664 | struct hd_struct *part; |
1675 | int cpu; | 1665 | int cpu; |
1676 | 1666 | ||
1677 | cpu = part_stat_lock(); | 1667 | cpu = part_stat_lock(); |
1678 | part = disk_map_sector_rcu(req->rq_disk, req->sector); | 1668 | part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req)); |
1679 | part_stat_add(cpu, part, sectors[rw], bytes >> 9); | 1669 | part_stat_add(cpu, part, sectors[rw], bytes >> 9); |
1680 | part_stat_unlock(); | 1670 | part_stat_unlock(); |
1681 | } | 1671 | } |
@@ -1683,22 +1673,19 @@ static void blk_account_io_completion(struct request *req, unsigned int bytes) | |||
1683 | 1673 | ||
1684 | static void blk_account_io_done(struct request *req) | 1674 | static void blk_account_io_done(struct request *req) |
1685 | { | 1675 | { |
1686 | if (!blk_do_io_stat(req)) | ||
1687 | return; | ||
1688 | |||
1689 | /* | 1676 | /* |
1690 | * Account IO completion. bar_rq isn't accounted as a normal | 1677 | * Account IO completion. bar_rq isn't accounted as a normal |
1691 | * IO on queueing nor completion. Accounting the containing | 1678 | * IO on queueing nor completion. Accounting the containing |
1692 | * request is enough. | 1679 | * request is enough. |
1693 | */ | 1680 | */ |
1694 | if (blk_fs_request(req) && req != &req->q->bar_rq) { | 1681 | if (blk_do_io_stat(req) && req != &req->q->bar_rq) { |
1695 | unsigned long duration = jiffies - req->start_time; | 1682 | unsigned long duration = jiffies - req->start_time; |
1696 | const int rw = rq_data_dir(req); | 1683 | const int rw = rq_data_dir(req); |
1697 | struct hd_struct *part; | 1684 | struct hd_struct *part; |
1698 | int cpu; | 1685 | int cpu; |
1699 | 1686 | ||
1700 | cpu = part_stat_lock(); | 1687 | cpu = part_stat_lock(); |
1701 | part = disk_map_sector_rcu(req->rq_disk, req->sector); | 1688 | part = disk_map_sector_rcu(req->rq_disk, blk_rq_pos(req)); |
1702 | 1689 | ||
1703 | part_stat_inc(cpu, part, ios[rw]); | 1690 | part_stat_inc(cpu, part, ios[rw]); |
1704 | part_stat_add(cpu, part, ticks[rw], duration); | 1691 | part_stat_add(cpu, part, ticks[rw], duration); |
@@ -1710,25 +1697,209 @@ static void blk_account_io_done(struct request *req) | |||
1710 | } | 1697 | } |
1711 | 1698 | ||
1712 | /** | 1699 | /** |
1713 | * __end_that_request_first - end I/O on a request | 1700 | * blk_peek_request - peek at the top of a request queue |
1714 | * @req: the request being processed | 1701 | * @q: request queue to peek at |
1702 | * | ||
1703 | * Description: | ||
1704 | * Return the request at the top of @q. The returned request | ||
1705 | * should be started using blk_start_request() before LLD starts | ||
1706 | * processing it. | ||
1707 | * | ||
1708 | * Return: | ||
1709 | * Pointer to the request at the top of @q if available. Null | ||
1710 | * otherwise. | ||
1711 | * | ||
1712 | * Context: | ||
1713 | * queue_lock must be held. | ||
1714 | */ | ||
1715 | struct request *blk_peek_request(struct request_queue *q) | ||
1716 | { | ||
1717 | struct request *rq; | ||
1718 | int ret; | ||
1719 | |||
1720 | while ((rq = __elv_next_request(q)) != NULL) { | ||
1721 | if (!(rq->cmd_flags & REQ_STARTED)) { | ||
1722 | /* | ||
1723 | * This is the first time the device driver | ||
1724 | * sees this request (possibly after | ||
1725 | * requeueing). Notify IO scheduler. | ||
1726 | */ | ||
1727 | if (blk_sorted_rq(rq)) | ||
1728 | elv_activate_rq(q, rq); | ||
1729 | |||
1730 | /* | ||
1731 | * just mark as started even if we don't start | ||
1732 | * it, a request that has been delayed should | ||
1733 | * not be passed by new incoming requests | ||
1734 | */ | ||
1735 | rq->cmd_flags |= REQ_STARTED; | ||
1736 | trace_block_rq_issue(q, rq); | ||
1737 | } | ||
1738 | |||
1739 | if (!q->boundary_rq || q->boundary_rq == rq) { | ||
1740 | q->end_sector = rq_end_sector(rq); | ||
1741 | q->boundary_rq = NULL; | ||
1742 | } | ||
1743 | |||
1744 | if (rq->cmd_flags & REQ_DONTPREP) | ||
1745 | break; | ||
1746 | |||
1747 | if (q->dma_drain_size && blk_rq_bytes(rq)) { | ||
1748 | /* | ||
1749 | * make sure space for the drain appears we | ||
1750 | * know we can do this because max_hw_segments | ||
1751 | * has been adjusted to be one fewer than the | ||
1752 | * device can handle | ||
1753 | */ | ||
1754 | rq->nr_phys_segments++; | ||
1755 | } | ||
1756 | |||
1757 | if (!q->prep_rq_fn) | ||
1758 | break; | ||
1759 | |||
1760 | ret = q->prep_rq_fn(q, rq); | ||
1761 | if (ret == BLKPREP_OK) { | ||
1762 | break; | ||
1763 | } else if (ret == BLKPREP_DEFER) { | ||
1764 | /* | ||
1765 | * the request may have been (partially) prepped. | ||
1766 | * we need to keep this request in the front to | ||
1767 | * avoid resource deadlock. REQ_STARTED will | ||
1768 | * prevent other fs requests from passing this one. | ||
1769 | */ | ||
1770 | if (q->dma_drain_size && blk_rq_bytes(rq) && | ||
1771 | !(rq->cmd_flags & REQ_DONTPREP)) { | ||
1772 | /* | ||
1773 | * remove the space for the drain we added | ||
1774 | * so that we don't add it again | ||
1775 | */ | ||
1776 | --rq->nr_phys_segments; | ||
1777 | } | ||
1778 | |||
1779 | rq = NULL; | ||
1780 | break; | ||
1781 | } else if (ret == BLKPREP_KILL) { | ||
1782 | rq->cmd_flags |= REQ_QUIET; | ||
1783 | /* | ||
1784 | * Mark this request as started so we don't trigger | ||
1785 | * any debug logic in the end I/O path. | ||
1786 | */ | ||
1787 | blk_start_request(rq); | ||
1788 | __blk_end_request_all(rq, -EIO); | ||
1789 | } else { | ||
1790 | printk(KERN_ERR "%s: bad return=%d\n", __func__, ret); | ||
1791 | break; | ||
1792 | } | ||
1793 | } | ||
1794 | |||
1795 | return rq; | ||
1796 | } | ||
1797 | EXPORT_SYMBOL(blk_peek_request); | ||
1798 | |||
1799 | void blk_dequeue_request(struct request *rq) | ||
1800 | { | ||
1801 | struct request_queue *q = rq->q; | ||
1802 | |||
1803 | BUG_ON(list_empty(&rq->queuelist)); | ||
1804 | BUG_ON(ELV_ON_HASH(rq)); | ||
1805 | |||
1806 | list_del_init(&rq->queuelist); | ||
1807 | |||
1808 | /* | ||
1809 | * the time frame between a request being removed from the lists | ||
1810 | * and to it is freed is accounted as io that is in progress at | ||
1811 | * the driver side. | ||
1812 | */ | ||
1813 | if (blk_account_rq(rq)) | ||
1814 | q->in_flight[rq_is_sync(rq)]++; | ||
1815 | } | ||
1816 | |||
1817 | /** | ||
1818 | * blk_start_request - start request processing on the driver | ||
1819 | * @req: request to dequeue | ||
1820 | * | ||
1821 | * Description: | ||
1822 | * Dequeue @req and start timeout timer on it. This hands off the | ||
1823 | * request to the driver. | ||
1824 | * | ||
1825 | * Block internal functions which don't want to start timer should | ||
1826 | * call blk_dequeue_request(). | ||
1827 | * | ||
1828 | * Context: | ||
1829 | * queue_lock must be held. | ||
1830 | */ | ||
1831 | void blk_start_request(struct request *req) | ||
1832 | { | ||
1833 | blk_dequeue_request(req); | ||
1834 | |||
1835 | /* | ||
1836 | * We are now handing the request to the hardware, initialize | ||
1837 | * resid_len to full count and add the timeout handler. | ||
1838 | */ | ||
1839 | req->resid_len = blk_rq_bytes(req); | ||
1840 | if (unlikely(blk_bidi_rq(req))) | ||
1841 | req->next_rq->resid_len = blk_rq_bytes(req->next_rq); | ||
1842 | |||
1843 | blk_add_timer(req); | ||
1844 | } | ||
1845 | EXPORT_SYMBOL(blk_start_request); | ||
1846 | |||
1847 | /** | ||
1848 | * blk_fetch_request - fetch a request from a request queue | ||
1849 | * @q: request queue to fetch a request from | ||
1850 | * | ||
1851 | * Description: | ||
1852 | * Return the request at the top of @q. The request is started on | ||
1853 | * return and LLD can start processing it immediately. | ||
1854 | * | ||
1855 | * Return: | ||
1856 | * Pointer to the request at the top of @q if available. Null | ||
1857 | * otherwise. | ||
1858 | * | ||
1859 | * Context: | ||
1860 | * queue_lock must be held. | ||
1861 | */ | ||
1862 | struct request *blk_fetch_request(struct request_queue *q) | ||
1863 | { | ||
1864 | struct request *rq; | ||
1865 | |||
1866 | rq = blk_peek_request(q); | ||
1867 | if (rq) | ||
1868 | blk_start_request(rq); | ||
1869 | return rq; | ||
1870 | } | ||
1871 | EXPORT_SYMBOL(blk_fetch_request); | ||
1872 | |||
1873 | /** | ||
1874 | * blk_update_request - Special helper function for request stacking drivers | ||
1875 | * @rq: the request being processed | ||
1715 | * @error: %0 for success, < %0 for error | 1876 | * @error: %0 for success, < %0 for error |
1716 | * @nr_bytes: number of bytes to complete | 1877 | * @nr_bytes: number of bytes to complete @rq |
1717 | * | 1878 | * |
1718 | * Description: | 1879 | * Description: |
1719 | * Ends I/O on a number of bytes attached to @req, and sets it up | 1880 | * Ends I/O on a number of bytes attached to @rq, but doesn't complete |
1720 | * for the next range of segments (if any) in the cluster. | 1881 | * the request structure even if @rq doesn't have leftover. |
1882 | * If @rq has leftover, sets it up for the next range of segments. | ||
1883 | * | ||
1884 | * This special helper function is only for request stacking drivers | ||
1885 | * (e.g. request-based dm) so that they can handle partial completion. | ||
1886 | * Actual device drivers should use blk_end_request instead. | ||
1887 | * | ||
1888 | * Passing the result of blk_rq_bytes() as @nr_bytes guarantees | ||
1889 | * %false return from this function. | ||
1721 | * | 1890 | * |
1722 | * Return: | 1891 | * Return: |
1723 | * %0 - we are done with this request, call end_that_request_last() | 1892 | * %false - this request doesn't have any more data |
1724 | * %1 - still buffers pending for this request | 1893 | * %true - this request has more data |
1725 | **/ | 1894 | **/ |
1726 | static int __end_that_request_first(struct request *req, int error, | 1895 | bool blk_update_request(struct request *req, int error, unsigned int nr_bytes) |
1727 | int nr_bytes) | ||
1728 | { | 1896 | { |
1729 | int total_bytes, bio_nbytes, next_idx = 0; | 1897 | int total_bytes, bio_nbytes, next_idx = 0; |
1730 | struct bio *bio; | 1898 | struct bio *bio; |
1731 | 1899 | ||
1900 | if (!req->bio) | ||
1901 | return false; | ||
1902 | |||
1732 | trace_block_rq_complete(req->q, req); | 1903 | trace_block_rq_complete(req->q, req); |
1733 | 1904 | ||
1734 | /* | 1905 | /* |
@@ -1745,7 +1916,7 @@ static int __end_that_request_first(struct request *req, int error, | |||
1745 | if (error && (blk_fs_request(req) && !(req->cmd_flags & REQ_QUIET))) { | 1916 | if (error && (blk_fs_request(req) && !(req->cmd_flags & REQ_QUIET))) { |
1746 | printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n", | 1917 | printk(KERN_ERR "end_request: I/O error, dev %s, sector %llu\n", |
1747 | req->rq_disk ? req->rq_disk->disk_name : "?", | 1918 | req->rq_disk ? req->rq_disk->disk_name : "?", |
1748 | (unsigned long long)req->sector); | 1919 | (unsigned long long)blk_rq_pos(req)); |
1749 | } | 1920 | } |
1750 | 1921 | ||
1751 | blk_account_io_completion(req, nr_bytes); | 1922 | blk_account_io_completion(req, nr_bytes); |
@@ -1805,8 +1976,15 @@ static int __end_that_request_first(struct request *req, int error, | |||
1805 | /* | 1976 | /* |
1806 | * completely done | 1977 | * completely done |
1807 | */ | 1978 | */ |
1808 | if (!req->bio) | 1979 | if (!req->bio) { |
1809 | return 0; | 1980 | /* |
1981 | * Reset counters so that the request stacking driver | ||
1982 | * can find how many bytes remain in the request | ||
1983 | * later. | ||
1984 | */ | ||
1985 | req->__data_len = 0; | ||
1986 | return false; | ||
1987 | } | ||
1810 | 1988 | ||
1811 | /* | 1989 | /* |
1812 | * if the request wasn't completed, update state | 1990 | * if the request wasn't completed, update state |
@@ -1818,21 +1996,55 @@ static int __end_that_request_first(struct request *req, int error, | |||
1818 | bio_iovec(bio)->bv_len -= nr_bytes; | 1996 | bio_iovec(bio)->bv_len -= nr_bytes; |
1819 | } | 1997 | } |
1820 | 1998 | ||
1821 | blk_recalc_rq_sectors(req, total_bytes >> 9); | 1999 | req->__data_len -= total_bytes; |
2000 | req->buffer = bio_data(req->bio); | ||
2001 | |||
2002 | /* update sector only for requests with clear definition of sector */ | ||
2003 | if (blk_fs_request(req) || blk_discard_rq(req)) | ||
2004 | req->__sector += total_bytes >> 9; | ||
2005 | |||
2006 | /* | ||
2007 | * If total number of sectors is less than the first segment | ||
2008 | * size, something has gone terribly wrong. | ||
2009 | */ | ||
2010 | if (blk_rq_bytes(req) < blk_rq_cur_bytes(req)) { | ||
2011 | printk(KERN_ERR "blk: request botched\n"); | ||
2012 | req->__data_len = blk_rq_cur_bytes(req); | ||
2013 | } | ||
2014 | |||
2015 | /* recalculate the number of segments */ | ||
1822 | blk_recalc_rq_segments(req); | 2016 | blk_recalc_rq_segments(req); |
1823 | return 1; | 2017 | |
2018 | return true; | ||
2019 | } | ||
2020 | EXPORT_SYMBOL_GPL(blk_update_request); | ||
2021 | |||
2022 | static bool blk_update_bidi_request(struct request *rq, int error, | ||
2023 | unsigned int nr_bytes, | ||
2024 | unsigned int bidi_bytes) | ||
2025 | { | ||
2026 | if (blk_update_request(rq, error, nr_bytes)) | ||
2027 | return true; | ||
2028 | |||
2029 | /* Bidi request must be completed as a whole */ | ||
2030 | if (unlikely(blk_bidi_rq(rq)) && | ||
2031 | blk_update_request(rq->next_rq, error, bidi_bytes)) | ||
2032 | return true; | ||
2033 | |||
2034 | add_disk_randomness(rq->rq_disk); | ||
2035 | |||
2036 | return false; | ||
1824 | } | 2037 | } |
1825 | 2038 | ||
1826 | /* | 2039 | /* |
1827 | * queue lock must be held | 2040 | * queue lock must be held |
1828 | */ | 2041 | */ |
1829 | static void end_that_request_last(struct request *req, int error) | 2042 | static void blk_finish_request(struct request *req, int error) |
1830 | { | 2043 | { |
1831 | if (blk_rq_tagged(req)) | 2044 | if (blk_rq_tagged(req)) |
1832 | blk_queue_end_tag(req->q, req); | 2045 | blk_queue_end_tag(req->q, req); |
1833 | 2046 | ||
1834 | if (blk_queued_rq(req)) | 2047 | BUG_ON(blk_queued_rq(req)); |
1835 | elv_dequeue_request(req->q, req); | ||
1836 | 2048 | ||
1837 | if (unlikely(laptop_mode) && blk_fs_request(req)) | 2049 | if (unlikely(laptop_mode) && blk_fs_request(req)) |
1838 | laptop_io_completion(); | 2050 | laptop_io_completion(); |
@@ -1852,117 +2064,62 @@ static void end_that_request_last(struct request *req, int error) | |||
1852 | } | 2064 | } |
1853 | 2065 | ||
1854 | /** | 2066 | /** |
1855 | * blk_rq_bytes - Returns bytes left to complete in the entire request | 2067 | * blk_end_bidi_request - Complete a bidi request |
1856 | * @rq: the request being processed | 2068 | * @rq: the request to complete |
1857 | **/ | 2069 | * @error: %0 for success, < %0 for error |
1858 | unsigned int blk_rq_bytes(struct request *rq) | 2070 | * @nr_bytes: number of bytes to complete @rq |
1859 | { | 2071 | * @bidi_bytes: number of bytes to complete @rq->next_rq |
1860 | if (blk_fs_request(rq)) | ||
1861 | return rq->hard_nr_sectors << 9; | ||
1862 | |||
1863 | return rq->data_len; | ||
1864 | } | ||
1865 | EXPORT_SYMBOL_GPL(blk_rq_bytes); | ||
1866 | |||
1867 | /** | ||
1868 | * blk_rq_cur_bytes - Returns bytes left to complete in the current segment | ||
1869 | * @rq: the request being processed | ||
1870 | **/ | ||
1871 | unsigned int blk_rq_cur_bytes(struct request *rq) | ||
1872 | { | ||
1873 | if (blk_fs_request(rq)) | ||
1874 | return rq->current_nr_sectors << 9; | ||
1875 | |||
1876 | if (rq->bio) | ||
1877 | return rq->bio->bi_size; | ||
1878 | |||
1879 | return rq->data_len; | ||
1880 | } | ||
1881 | EXPORT_SYMBOL_GPL(blk_rq_cur_bytes); | ||
1882 | |||
1883 | /** | ||
1884 | * end_request - end I/O on the current segment of the request | ||
1885 | * @req: the request being processed | ||
1886 | * @uptodate: error value or %0/%1 uptodate flag | ||
1887 | * | 2072 | * |
1888 | * Description: | 2073 | * Description: |
1889 | * Ends I/O on the current segment of a request. If that is the only | 2074 | * Ends I/O on a number of bytes attached to @rq and @rq->next_rq. |
1890 | * remaining segment, the request is also completed and freed. | 2075 | * Drivers that supports bidi can safely call this member for any |
1891 | * | 2076 | * type of request, bidi or uni. In the later case @bidi_bytes is |
1892 | * This is a remnant of how older block drivers handled I/O completions. | 2077 | * just ignored. |
1893 | * Modern drivers typically end I/O on the full request in one go, unless | 2078 | * |
1894 | * they have a residual value to account for. For that case this function | 2079 | * Return: |
1895 | * isn't really useful, unless the residual just happens to be the | 2080 | * %false - we are done with this request |
1896 | * full current segment. In other words, don't use this function in new | 2081 | * %true - still buffers pending for this request |
1897 | * code. Use blk_end_request() or __blk_end_request() to end a request. | ||
1898 | **/ | 2082 | **/ |
1899 | void end_request(struct request *req, int uptodate) | 2083 | static bool blk_end_bidi_request(struct request *rq, int error, |
1900 | { | ||
1901 | int error = 0; | ||
1902 | |||
1903 | if (uptodate <= 0) | ||
1904 | error = uptodate ? uptodate : -EIO; | ||
1905 | |||
1906 | __blk_end_request(req, error, req->hard_cur_sectors << 9); | ||
1907 | } | ||
1908 | EXPORT_SYMBOL(end_request); | ||
1909 | |||
1910 | static int end_that_request_data(struct request *rq, int error, | ||
1911 | unsigned int nr_bytes, unsigned int bidi_bytes) | 2084 | unsigned int nr_bytes, unsigned int bidi_bytes) |
1912 | { | 2085 | { |
1913 | if (rq->bio) { | 2086 | struct request_queue *q = rq->q; |
1914 | if (__end_that_request_first(rq, error, nr_bytes)) | 2087 | unsigned long flags; |
1915 | return 1; | ||
1916 | 2088 | ||
1917 | /* Bidi request must be completed as a whole */ | 2089 | if (blk_update_bidi_request(rq, error, nr_bytes, bidi_bytes)) |
1918 | if (blk_bidi_rq(rq) && | 2090 | return true; |
1919 | __end_that_request_first(rq->next_rq, error, bidi_bytes)) | ||
1920 | return 1; | ||
1921 | } | ||
1922 | 2091 | ||
1923 | return 0; | 2092 | spin_lock_irqsave(q->queue_lock, flags); |
2093 | blk_finish_request(rq, error); | ||
2094 | spin_unlock_irqrestore(q->queue_lock, flags); | ||
2095 | |||
2096 | return false; | ||
1924 | } | 2097 | } |
1925 | 2098 | ||
1926 | /** | 2099 | /** |
1927 | * blk_end_io - Generic end_io function to complete a request. | 2100 | * __blk_end_bidi_request - Complete a bidi request with queue lock held |
1928 | * @rq: the request being processed | 2101 | * @rq: the request to complete |
1929 | * @error: %0 for success, < %0 for error | 2102 | * @error: %0 for success, < %0 for error |
1930 | * @nr_bytes: number of bytes to complete @rq | 2103 | * @nr_bytes: number of bytes to complete @rq |
1931 | * @bidi_bytes: number of bytes to complete @rq->next_rq | 2104 | * @bidi_bytes: number of bytes to complete @rq->next_rq |
1932 | * @drv_callback: function called between completion of bios in the request | ||
1933 | * and completion of the request. | ||
1934 | * If the callback returns non %0, this helper returns without | ||
1935 | * completion of the request. | ||
1936 | * | 2105 | * |
1937 | * Description: | 2106 | * Description: |
1938 | * Ends I/O on a number of bytes attached to @rq and @rq->next_rq. | 2107 | * Identical to blk_end_bidi_request() except that queue lock is |
1939 | * If @rq has leftover, sets it up for the next range of segments. | 2108 | * assumed to be locked on entry and remains so on return. |
1940 | * | 2109 | * |
1941 | * Return: | 2110 | * Return: |
1942 | * %0 - we are done with this request | 2111 | * %false - we are done with this request |
1943 | * %1 - this request is not freed yet, it still has pending buffers. | 2112 | * %true - still buffers pending for this request |
1944 | **/ | 2113 | **/ |
1945 | static int blk_end_io(struct request *rq, int error, unsigned int nr_bytes, | 2114 | static bool __blk_end_bidi_request(struct request *rq, int error, |
1946 | unsigned int bidi_bytes, | 2115 | unsigned int nr_bytes, unsigned int bidi_bytes) |
1947 | int (drv_callback)(struct request *)) | ||
1948 | { | 2116 | { |
1949 | struct request_queue *q = rq->q; | 2117 | if (blk_update_bidi_request(rq, error, nr_bytes, bidi_bytes)) |
1950 | unsigned long flags = 0UL; | 2118 | return true; |
1951 | |||
1952 | if (end_that_request_data(rq, error, nr_bytes, bidi_bytes)) | ||
1953 | return 1; | ||
1954 | |||
1955 | /* Special feature for tricky drivers */ | ||
1956 | if (drv_callback && drv_callback(rq)) | ||
1957 | return 1; | ||
1958 | |||
1959 | add_disk_randomness(rq->rq_disk); | ||
1960 | 2119 | ||
1961 | spin_lock_irqsave(q->queue_lock, flags); | 2120 | blk_finish_request(rq, error); |
1962 | end_that_request_last(rq, error); | ||
1963 | spin_unlock_irqrestore(q->queue_lock, flags); | ||
1964 | 2121 | ||
1965 | return 0; | 2122 | return false; |
1966 | } | 2123 | } |
1967 | 2124 | ||
1968 | /** | 2125 | /** |
@@ -1976,124 +2133,112 @@ static int blk_end_io(struct request *rq, int error, unsigned int nr_bytes, | |||
1976 | * If @rq has leftover, sets it up for the next range of segments. | 2133 | * If @rq has leftover, sets it up for the next range of segments. |
1977 | * | 2134 | * |
1978 | * Return: | 2135 | * Return: |
1979 | * %0 - we are done with this request | 2136 | * %false - we are done with this request |
1980 | * %1 - still buffers pending for this request | 2137 | * %true - still buffers pending for this request |
1981 | **/ | 2138 | **/ |
1982 | int blk_end_request(struct request *rq, int error, unsigned int nr_bytes) | 2139 | bool blk_end_request(struct request *rq, int error, unsigned int nr_bytes) |
1983 | { | 2140 | { |
1984 | return blk_end_io(rq, error, nr_bytes, 0, NULL); | 2141 | return blk_end_bidi_request(rq, error, nr_bytes, 0); |
1985 | } | 2142 | } |
1986 | EXPORT_SYMBOL_GPL(blk_end_request); | 2143 | EXPORT_SYMBOL_GPL(blk_end_request); |
1987 | 2144 | ||
1988 | /** | 2145 | /** |
1989 | * __blk_end_request - Helper function for drivers to complete the request. | 2146 | * blk_end_request_all - Helper function for drives to finish the request. |
1990 | * @rq: the request being processed | 2147 | * @rq: the request to finish |
1991 | * @error: %0 for success, < %0 for error | 2148 | * @err: %0 for success, < %0 for error |
1992 | * @nr_bytes: number of bytes to complete | ||
1993 | * | 2149 | * |
1994 | * Description: | 2150 | * Description: |
1995 | * Must be called with queue lock held unlike blk_end_request(). | 2151 | * Completely finish @rq. |
1996 | * | 2152 | */ |
1997 | * Return: | 2153 | void blk_end_request_all(struct request *rq, int error) |
1998 | * %0 - we are done with this request | ||
1999 | * %1 - still buffers pending for this request | ||
2000 | **/ | ||
2001 | int __blk_end_request(struct request *rq, int error, unsigned int nr_bytes) | ||
2002 | { | 2154 | { |
2003 | if (rq->bio && __end_that_request_first(rq, error, nr_bytes)) | 2155 | bool pending; |
2004 | return 1; | 2156 | unsigned int bidi_bytes = 0; |
2005 | 2157 | ||
2006 | add_disk_randomness(rq->rq_disk); | 2158 | if (unlikely(blk_bidi_rq(rq))) |
2159 | bidi_bytes = blk_rq_bytes(rq->next_rq); | ||
2007 | 2160 | ||
2008 | end_that_request_last(rq, error); | 2161 | pending = blk_end_bidi_request(rq, error, blk_rq_bytes(rq), bidi_bytes); |
2162 | BUG_ON(pending); | ||
2163 | } | ||
2164 | EXPORT_SYMBOL_GPL(blk_end_request_all); | ||
2009 | 2165 | ||
2010 | return 0; | 2166 | /** |
2167 | * blk_end_request_cur - Helper function to finish the current request chunk. | ||
2168 | * @rq: the request to finish the current chunk for | ||
2169 | * @err: %0 for success, < %0 for error | ||
2170 | * | ||
2171 | * Description: | ||
2172 | * Complete the current consecutively mapped chunk from @rq. | ||
2173 | * | ||
2174 | * Return: | ||
2175 | * %false - we are done with this request | ||
2176 | * %true - still buffers pending for this request | ||
2177 | */ | ||
2178 | bool blk_end_request_cur(struct request *rq, int error) | ||
2179 | { | ||
2180 | return blk_end_request(rq, error, blk_rq_cur_bytes(rq)); | ||
2011 | } | 2181 | } |
2012 | EXPORT_SYMBOL_GPL(__blk_end_request); | 2182 | EXPORT_SYMBOL_GPL(blk_end_request_cur); |
2013 | 2183 | ||
2014 | /** | 2184 | /** |
2015 | * blk_end_bidi_request - Helper function for drivers to complete bidi request. | 2185 | * __blk_end_request - Helper function for drivers to complete the request. |
2016 | * @rq: the bidi request being processed | 2186 | * @rq: the request being processed |
2017 | * @error: %0 for success, < %0 for error | 2187 | * @error: %0 for success, < %0 for error |
2018 | * @nr_bytes: number of bytes to complete @rq | 2188 | * @nr_bytes: number of bytes to complete |
2019 | * @bidi_bytes: number of bytes to complete @rq->next_rq | ||
2020 | * | 2189 | * |
2021 | * Description: | 2190 | * Description: |
2022 | * Ends I/O on a number of bytes attached to @rq and @rq->next_rq. | 2191 | * Must be called with queue lock held unlike blk_end_request(). |
2023 | * | 2192 | * |
2024 | * Return: | 2193 | * Return: |
2025 | * %0 - we are done with this request | 2194 | * %false - we are done with this request |
2026 | * %1 - still buffers pending for this request | 2195 | * %true - still buffers pending for this request |
2027 | **/ | 2196 | **/ |
2028 | int blk_end_bidi_request(struct request *rq, int error, unsigned int nr_bytes, | 2197 | bool __blk_end_request(struct request *rq, int error, unsigned int nr_bytes) |
2029 | unsigned int bidi_bytes) | ||
2030 | { | 2198 | { |
2031 | return blk_end_io(rq, error, nr_bytes, bidi_bytes, NULL); | 2199 | return __blk_end_bidi_request(rq, error, nr_bytes, 0); |
2032 | } | 2200 | } |
2033 | EXPORT_SYMBOL_GPL(blk_end_bidi_request); | 2201 | EXPORT_SYMBOL_GPL(__blk_end_request); |
2034 | 2202 | ||
2035 | /** | 2203 | /** |
2036 | * blk_update_request - Special helper function for request stacking drivers | 2204 | * __blk_end_request_all - Helper function for drives to finish the request. |
2037 | * @rq: the request being processed | 2205 | * @rq: the request to finish |
2038 | * @error: %0 for success, < %0 for error | 2206 | * @err: %0 for success, < %0 for error |
2039 | * @nr_bytes: number of bytes to complete @rq | ||
2040 | * | 2207 | * |
2041 | * Description: | 2208 | * Description: |
2042 | * Ends I/O on a number of bytes attached to @rq, but doesn't complete | 2209 | * Completely finish @rq. Must be called with queue lock held. |
2043 | * the request structure even if @rq doesn't have leftover. | ||
2044 | * If @rq has leftover, sets it up for the next range of segments. | ||
2045 | * | ||
2046 | * This special helper function is only for request stacking drivers | ||
2047 | * (e.g. request-based dm) so that they can handle partial completion. | ||
2048 | * Actual device drivers should use blk_end_request instead. | ||
2049 | */ | 2210 | */ |
2050 | void blk_update_request(struct request *rq, int error, unsigned int nr_bytes) | 2211 | void __blk_end_request_all(struct request *rq, int error) |
2051 | { | 2212 | { |
2052 | if (!end_that_request_data(rq, error, nr_bytes, 0)) { | 2213 | bool pending; |
2053 | /* | 2214 | unsigned int bidi_bytes = 0; |
2054 | * These members are not updated in end_that_request_data() | 2215 | |
2055 | * when all bios are completed. | 2216 | if (unlikely(blk_bidi_rq(rq))) |
2056 | * Update them so that the request stacking driver can find | 2217 | bidi_bytes = blk_rq_bytes(rq->next_rq); |
2057 | * how many bytes remain in the request later. | 2218 | |
2058 | */ | 2219 | pending = __blk_end_bidi_request(rq, error, blk_rq_bytes(rq), bidi_bytes); |
2059 | rq->nr_sectors = rq->hard_nr_sectors = 0; | 2220 | BUG_ON(pending); |
2060 | rq->current_nr_sectors = rq->hard_cur_sectors = 0; | ||
2061 | } | ||
2062 | } | 2221 | } |
2063 | EXPORT_SYMBOL_GPL(blk_update_request); | 2222 | EXPORT_SYMBOL_GPL(__blk_end_request_all); |
2064 | 2223 | ||
2065 | /** | 2224 | /** |
2066 | * blk_end_request_callback - Special helper function for tricky drivers | 2225 | * __blk_end_request_cur - Helper function to finish the current request chunk. |
2067 | * @rq: the request being processed | 2226 | * @rq: the request to finish the current chunk for |
2068 | * @error: %0 for success, < %0 for error | 2227 | * @err: %0 for success, < %0 for error |
2069 | * @nr_bytes: number of bytes to complete | ||
2070 | * @drv_callback: function called between completion of bios in the request | ||
2071 | * and completion of the request. | ||
2072 | * If the callback returns non %0, this helper returns without | ||
2073 | * completion of the request. | ||
2074 | * | 2228 | * |
2075 | * Description: | 2229 | * Description: |
2076 | * Ends I/O on a number of bytes attached to @rq. | 2230 | * Complete the current consecutively mapped chunk from @rq. Must |
2077 | * If @rq has leftover, sets it up for the next range of segments. | 2231 | * be called with queue lock held. |
2078 | * | ||
2079 | * This special helper function is used only for existing tricky drivers. | ||
2080 | * (e.g. cdrom_newpc_intr() of ide-cd) | ||
2081 | * This interface will be removed when such drivers are rewritten. | ||
2082 | * Don't use this interface in other places anymore. | ||
2083 | * | 2232 | * |
2084 | * Return: | 2233 | * Return: |
2085 | * %0 - we are done with this request | 2234 | * %false - we are done with this request |
2086 | * %1 - this request is not freed yet. | 2235 | * %true - still buffers pending for this request |
2087 | * this request still has pending buffers or | 2236 | */ |
2088 | * the driver doesn't want to finish this request yet. | 2237 | bool __blk_end_request_cur(struct request *rq, int error) |
2089 | **/ | ||
2090 | int blk_end_request_callback(struct request *rq, int error, | ||
2091 | unsigned int nr_bytes, | ||
2092 | int (drv_callback)(struct request *)) | ||
2093 | { | 2238 | { |
2094 | return blk_end_io(rq, error, nr_bytes, 0, drv_callback); | 2239 | return __blk_end_request(rq, error, blk_rq_cur_bytes(rq)); |
2095 | } | 2240 | } |
2096 | EXPORT_SYMBOL_GPL(blk_end_request_callback); | 2241 | EXPORT_SYMBOL_GPL(__blk_end_request_cur); |
2097 | 2242 | ||
2098 | void blk_rq_bio_prep(struct request_queue *q, struct request *rq, | 2243 | void blk_rq_bio_prep(struct request_queue *q, struct request *rq, |
2099 | struct bio *bio) | 2244 | struct bio *bio) |
@@ -2106,11 +2251,7 @@ void blk_rq_bio_prep(struct request_queue *q, struct request *rq, | |||
2106 | rq->nr_phys_segments = bio_phys_segments(q, bio); | 2251 | rq->nr_phys_segments = bio_phys_segments(q, bio); |
2107 | rq->buffer = bio_data(bio); | 2252 | rq->buffer = bio_data(bio); |
2108 | } | 2253 | } |
2109 | rq->current_nr_sectors = bio_cur_sectors(bio); | 2254 | rq->__data_len = bio->bi_size; |
2110 | rq->hard_cur_sectors = rq->current_nr_sectors; | ||
2111 | rq->hard_nr_sectors = rq->nr_sectors = bio_sectors(bio); | ||
2112 | rq->data_len = bio->bi_size; | ||
2113 | |||
2114 | rq->bio = rq->biotail = bio; | 2255 | rq->bio = rq->biotail = bio; |
2115 | 2256 | ||
2116 | if (bio->bi_bdev) | 2257 | if (bio->bi_bdev) |
@@ -2145,6 +2286,106 @@ int blk_lld_busy(struct request_queue *q) | |||
2145 | } | 2286 | } |
2146 | EXPORT_SYMBOL_GPL(blk_lld_busy); | 2287 | EXPORT_SYMBOL_GPL(blk_lld_busy); |
2147 | 2288 | ||
2289 | /** | ||
2290 | * blk_rq_unprep_clone - Helper function to free all bios in a cloned request | ||
2291 | * @rq: the clone request to be cleaned up | ||
2292 | * | ||
2293 | * Description: | ||
2294 | * Free all bios in @rq for a cloned request. | ||
2295 | */ | ||
2296 | void blk_rq_unprep_clone(struct request *rq) | ||
2297 | { | ||
2298 | struct bio *bio; | ||
2299 | |||
2300 | while ((bio = rq->bio) != NULL) { | ||
2301 | rq->bio = bio->bi_next; | ||
2302 | |||
2303 | bio_put(bio); | ||
2304 | } | ||
2305 | } | ||
2306 | EXPORT_SYMBOL_GPL(blk_rq_unprep_clone); | ||
2307 | |||
2308 | /* | ||
2309 | * Copy attributes of the original request to the clone request. | ||
2310 | * The actual data parts (e.g. ->cmd, ->buffer, ->sense) are not copied. | ||
2311 | */ | ||
2312 | static void __blk_rq_prep_clone(struct request *dst, struct request *src) | ||
2313 | { | ||
2314 | dst->cpu = src->cpu; | ||
2315 | dst->cmd_flags = (rq_data_dir(src) | REQ_NOMERGE); | ||
2316 | dst->cmd_type = src->cmd_type; | ||
2317 | dst->__sector = blk_rq_pos(src); | ||
2318 | dst->__data_len = blk_rq_bytes(src); | ||
2319 | dst->nr_phys_segments = src->nr_phys_segments; | ||
2320 | dst->ioprio = src->ioprio; | ||
2321 | dst->extra_len = src->extra_len; | ||
2322 | } | ||
2323 | |||
2324 | /** | ||
2325 | * blk_rq_prep_clone - Helper function to setup clone request | ||
2326 | * @rq: the request to be setup | ||
2327 | * @rq_src: original request to be cloned | ||
2328 | * @bs: bio_set that bios for clone are allocated from | ||
2329 | * @gfp_mask: memory allocation mask for bio | ||
2330 | * @bio_ctr: setup function to be called for each clone bio. | ||
2331 | * Returns %0 for success, non %0 for failure. | ||
2332 | * @data: private data to be passed to @bio_ctr | ||
2333 | * | ||
2334 | * Description: | ||
2335 | * Clones bios in @rq_src to @rq, and copies attributes of @rq_src to @rq. | ||
2336 | * The actual data parts of @rq_src (e.g. ->cmd, ->buffer, ->sense) | ||
2337 | * are not copied, and copying such parts is the caller's responsibility. | ||
2338 | * Also, pages which the original bios are pointing to are not copied | ||
2339 | * and the cloned bios just point same pages. | ||
2340 | * So cloned bios must be completed before original bios, which means | ||
2341 | * the caller must complete @rq before @rq_src. | ||
2342 | */ | ||
2343 | int blk_rq_prep_clone(struct request *rq, struct request *rq_src, | ||
2344 | struct bio_set *bs, gfp_t gfp_mask, | ||
2345 | int (*bio_ctr)(struct bio *, struct bio *, void *), | ||
2346 | void *data) | ||
2347 | { | ||
2348 | struct bio *bio, *bio_src; | ||
2349 | |||
2350 | if (!bs) | ||
2351 | bs = fs_bio_set; | ||
2352 | |||
2353 | blk_rq_init(NULL, rq); | ||
2354 | |||
2355 | __rq_for_each_bio(bio_src, rq_src) { | ||
2356 | bio = bio_alloc_bioset(gfp_mask, bio_src->bi_max_vecs, bs); | ||
2357 | if (!bio) | ||
2358 | goto free_and_out; | ||
2359 | |||
2360 | __bio_clone(bio, bio_src); | ||
2361 | |||
2362 | if (bio_integrity(bio_src) && | ||
2363 | bio_integrity_clone(bio, bio_src, gfp_mask)) | ||
2364 | goto free_and_out; | ||
2365 | |||
2366 | if (bio_ctr && bio_ctr(bio, bio_src, data)) | ||
2367 | goto free_and_out; | ||
2368 | |||
2369 | if (rq->bio) { | ||
2370 | rq->biotail->bi_next = bio; | ||
2371 | rq->biotail = bio; | ||
2372 | } else | ||
2373 | rq->bio = rq->biotail = bio; | ||
2374 | } | ||
2375 | |||
2376 | __blk_rq_prep_clone(rq, rq_src); | ||
2377 | |||
2378 | return 0; | ||
2379 | |||
2380 | free_and_out: | ||
2381 | if (bio) | ||
2382 | bio_free(bio, bs); | ||
2383 | blk_rq_unprep_clone(rq); | ||
2384 | |||
2385 | return -ENOMEM; | ||
2386 | } | ||
2387 | EXPORT_SYMBOL_GPL(blk_rq_prep_clone); | ||
2388 | |||
2148 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work) | 2389 | int kblockd_schedule_work(struct request_queue *q, struct work_struct *work) |
2149 | { | 2390 | { |
2150 | return queue_work(kblockd_workqueue, work); | 2391 | return queue_work(kblockd_workqueue, work); |
@@ -2153,6 +2394,9 @@ EXPORT_SYMBOL(kblockd_schedule_work); | |||
2153 | 2394 | ||
2154 | int __init blk_dev_init(void) | 2395 | int __init blk_dev_init(void) |
2155 | { | 2396 | { |
2397 | BUILD_BUG_ON(__REQ_NR_BITS > 8 * | ||
2398 | sizeof(((struct request *)0)->cmd_flags)); | ||
2399 | |||
2156 | kblockd_workqueue = create_workqueue("kblockd"); | 2400 | kblockd_workqueue = create_workqueue("kblockd"); |
2157 | if (!kblockd_workqueue) | 2401 | if (!kblockd_workqueue) |
2158 | panic("Failed to create kblockd\n"); | 2402 | panic("Failed to create kblockd\n"); |