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
This commit is contained in:
26
fs/bio.c
26
fs/bio.c
@@ -498,11 +498,11 @@ int bio_get_nr_vecs(struct block_device *bdev)
|
||||
struct request_queue *q = bdev_get_queue(bdev);
|
||||
int nr_pages;
|
||||
|
||||
nr_pages = ((q->max_sectors << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
if (nr_pages > q->max_phys_segments)
|
||||
nr_pages = q->max_phys_segments;
|
||||
if (nr_pages > q->max_hw_segments)
|
||||
nr_pages = q->max_hw_segments;
|
||||
nr_pages = ((queue_max_sectors(q) << 9) + PAGE_SIZE - 1) >> PAGE_SHIFT;
|
||||
if (nr_pages > queue_max_phys_segments(q))
|
||||
nr_pages = queue_max_phys_segments(q);
|
||||
if (nr_pages > queue_max_hw_segments(q))
|
||||
nr_pages = queue_max_hw_segments(q);
|
||||
|
||||
return nr_pages;
|
||||
}
|
||||
@@ -561,8 +561,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
|
||||
* make this too complex.
|
||||
*/
|
||||
|
||||
while (bio->bi_phys_segments >= q->max_phys_segments
|
||||
|| bio->bi_phys_segments >= q->max_hw_segments) {
|
||||
while (bio->bi_phys_segments >= queue_max_phys_segments(q)
|
||||
|| bio->bi_phys_segments >= queue_max_hw_segments(q)) {
|
||||
|
||||
if (retried_segments)
|
||||
return 0;
|
||||
@@ -633,7 +633,8 @@ static int __bio_add_page(struct request_queue *q, struct bio *bio, struct page
|
||||
int bio_add_pc_page(struct request_queue *q, struct bio *bio, struct page *page,
|
||||
unsigned int len, unsigned int offset)
|
||||
{
|
||||
return __bio_add_page(q, bio, page, len, offset, q->max_hw_sectors);
|
||||
return __bio_add_page(q, bio, page, len, offset,
|
||||
queue_max_hw_sectors(q));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -653,7 +654,7 @@ int bio_add_page(struct bio *bio, struct page *page, unsigned int len,
|
||||
unsigned int offset)
|
||||
{
|
||||
struct request_queue *q = bdev_get_queue(bio->bi_bdev);
|
||||
return __bio_add_page(q, bio, page, len, offset, q->max_sectors);
|
||||
return __bio_add_page(q, bio, page, len, offset, queue_max_sectors(q));
|
||||
}
|
||||
|
||||
struct bio_map_data {
|
||||
@@ -720,7 +721,7 @@ static int __bio_copy_iov(struct bio *bio, struct bio_vec *iovecs,
|
||||
|
||||
while (bv_len && iov_idx < iov_count) {
|
||||
unsigned int bytes;
|
||||
char *iov_addr;
|
||||
char __user *iov_addr;
|
||||
|
||||
bytes = min_t(unsigned int,
|
||||
iov[iov_idx].iov_len - iov_off, bv_len);
|
||||
@@ -1200,7 +1201,7 @@ static void bio_copy_kern_endio(struct bio *bio, int err)
|
||||
char *addr = page_address(bvec->bv_page);
|
||||
int len = bmd->iovecs[i].bv_len;
|
||||
|
||||
if (read && !err)
|
||||
if (read)
|
||||
memcpy(p, addr, len);
|
||||
|
||||
__free_page(bvec->bv_page);
|
||||
@@ -1489,11 +1490,12 @@ struct bio_pair *bio_split(struct bio *bi, int first_sectors)
|
||||
sector_t bio_sector_offset(struct bio *bio, unsigned short index,
|
||||
unsigned int offset)
|
||||
{
|
||||
unsigned int sector_sz = queue_hardsect_size(bio->bi_bdev->bd_disk->queue);
|
||||
unsigned int sector_sz;
|
||||
struct bio_vec *bv;
|
||||
sector_t sectors;
|
||||
int i;
|
||||
|
||||
sector_sz = queue_logical_block_size(bio->bi_bdev->bd_disk->queue);
|
||||
sectors = 0;
|
||||
|
||||
if (index >= bio->bi_idx)
|
||||
|
Reference in New Issue
Block a user