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 /fs/bio.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 'fs/bio.c')
-rw-r--r-- | fs/bio.c | 26 |
1 files changed, 14 insertions, 12 deletions
@@ -498,11 +498,11 @@ int bio_get_nr_vecs(struct block_device *bdev) | |||
498 | struct request_queue *q = bdev_get_queue(bdev); | 498 | struct request_queue *q = bdev_get_queue(bdev); |
499 | int nr_pages; | 499 | int nr_pages; |
500 | 500 | ||
501 | nr_pages = ((q->max_sectors << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT; | 501 | nr_pages = ((queue_max_sectors(q) << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT; |
502 | if (nr_pages > q->max_phys_segments) | 502 | if (nr_pages > queue_max_phys_segments(q)) |
503 | nr_pages = q->max_phys_segments; | 503 | nr_pages = queue_max_phys_segments(q); |
504 | if (nr_pages > q->max_hw_segments) | 504 | if (nr_pages > queue_max_hw_segments(q)) |
505 | nr_pages = q->max_hw_segments; | 505 | nr_pages = queue_max_hw_segments(q); |
506 | 506 | ||
507 | return nr_pages; | 507 | return nr_pages; |
508 | } | 508 | } |
@@ -561,8 +561,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
561 | * make this too complex. | 561 | * make this too complex. |
562 | */ | 562 | */ |
563 | 563 | ||
564 | while (bio->bi_phys_segments >= q->max_phys_segments | 564 | while (bio->bi_phys_segments >= queue_max_phys_segments(q) |
565 | || bio->bi_phys_segments >= q->max_hw_segments) { | 565 | || bio->bi_phys_segments >= queue_max_hw_segments(q)) { |
566 | 566 | ||
567 | if (retried_segments) | 567 | if (retried_segments) |
568 | return 0; | 568 | return 0; |
@@ -633,7 +633,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page | |||
633 | int bio_add_pc_page(struct request_queue *q, struct bio *bio, struct page *page, | 633 | int bio_add_pc_page(struct request_queue *q, struct bio *bio, struct page *page, |
634 | unsigned int len, unsigned int offset) | 634 | unsigned int len, unsigned int offset) |
635 | { | 635 | { |
636 | return __bio_add_page(q, bio, page, len, offset, q->max_hw_sectors); | 636 | return __bio_add_page(q, bio, page, len, offset, |
637 | queue_max_hw_sectors(q)); | ||
637 | } | 638 | } |
638 | 639 | ||
639 | /** | 640 | /** |
@@ -653,7 +654,7 @@ int bio_add_page(struct bio *bio, struct page *page, unsigned int len, | |||
653 | unsigned int offset) | 654 | unsigned int offset) |
654 | { | 655 | { |
655 | struct request_queue *q = bdev_get_queue(bio->bi_bdev); | 656 | struct request_queue *q = bdev_get_queue(bio->bi_bdev); |
656 | return __bio_add_page(q, bio, page, len, offset, q->max_sectors); | 657 | return __bio_add_page(q, bio, page, len, offset, queue_max_sectors(q)); |
657 | } | 658 | } |
658 | 659 | ||
659 | struct bio_map_data { | 660 | struct bio_map_data { |
@@ -720,7 +721,7 @@ static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs, | |||
720 | 721 | ||
721 | while (bv_len && iov_idx < iov_count) { | 722 | while (bv_len && iov_idx < iov_count) { |
722 | unsigned int bytes; | 723 | unsigned int bytes; |
723 | char *iov_addr; | 724 | char __user *iov_addr; |
724 | 725 | ||
725 | bytes = min_t(unsigned int, | 726 | bytes = min_t(unsigned int, |
726 | iov[iov_idx].iov_len - iov_off, bv_len); | 727 | iov[iov_idx].iov_len - iov_off, bv_len); |
@@ -1200,7 +1201,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err) | |||
1200 | char *addr = page_address(bvec->bv_page); | 1201 | char *addr = page_address(bvec->bv_page); |
1201 | int len = bmd->iovecs[i].bv_len; | 1202 | int len = bmd->iovecs[i].bv_len; |
1202 | 1203 | ||
1203 | if (read && !err) | 1204 | if (read) |
1204 | memcpy(p, addr, len); | 1205 | memcpy(p, addr, len); |
1205 | 1206 | ||
1206 | __free_page(bvec->bv_page); | 1207 | __free_page(bvec->bv_page); |
@@ -1489,11 +1490,12 @@ struct bio_pair *bio_split(struct bio *bi, int first_sectors) | |||
1489 | sector_t bio_sector_offset(struct bio *bio, unsigned short index, | 1490 | sector_t bio_sector_offset(struct bio *bio, unsigned short index, |
1490 | unsigned int offset) | 1491 | unsigned int offset) |
1491 | { | 1492 | { |
1492 | unsigned int sector_sz = queue_hardsect_size(bio->bi_bdev->bd_disk->queue); | 1493 | unsigned int sector_sz; |
1493 | struct bio_vec *bv; | 1494 | struct bio_vec *bv; |
1494 | sector_t sectors; | 1495 | sector_t sectors; |
1495 | int i; | 1496 | int i; |
1496 | 1497 | ||
1498 | sector_sz = queue_logical_block_size(bio->bi_bdev->bd_disk->queue); | ||
1497 | sectors = 0; | 1499 | sectors = 0; |
1498 | 1500 | ||
1499 | if (index >= bio->bi_idx) | 1501 | if (index >= bio->bi_idx) |