lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 31 Jul 2007 12:17:21 +1000
From:	NeilBrown <neilb@...e.de>
To:	linux-kernel@...r.kernel.org
Subject: [PATCH 018 of 35] Remove bi_idx


It is almost always set to zero.  The one case where it isn't
is in dm.c when splitting a bio.  In this case we can simply offset
bi_io_vec rather than storing the offset in bi_idx.

bio_to_phys, bio_iovec, bio_page, bio_offset, bio_segments all depend
on bi_idx, so they go too.

Also __bio_for_each_segment can go as it is now only called with start_idx
of 0, and that is what bio_for_each_segment uses.

Signed-off-by: Neil Brown <neilb@...e.de>

### Diffstat output
 ./block/ll_rw_blk.c          |    2 +-
 ./drivers/block/floppy.c     |    1 -
 ./drivers/block/pktcdvd.c    |    3 +--
 ./drivers/block/umem.c       |    4 ++--
 ./drivers/ide/ide-cd.c       |    3 ++-
 ./drivers/md/dm-bio-record.h |    3 ---
 ./drivers/md/dm-crypt.c      |   11 +++++------
 ./drivers/md/dm-raid1.c      |    2 +-
 ./drivers/md/dm.c            |    6 +++---
 ./drivers/md/raid0.c         |    3 +--
 ./drivers/md/raid1.c         |   13 ++-----------
 ./drivers/md/raid10.c        |    5 +----
 ./drivers/md/raid5.c         |    2 --
 ./fs/bio.c                   |    7 ++-----
 ./fs/buffer.c                |    1 -
 ./fs/jfs/jfs_logmgr.c        |    2 --
 ./fs/reiser4/page_cache.c    |    1 -
 ./include/asm-arm/memory.h   |    2 +-
 ./include/asm-arm26/memory.h |    2 +-
 ./include/linux/bio.h        |   21 ++++-----------------
 ./include/linux/blkdev.h     |    2 +-
 ./mm/bounce.c                |    7 +++----
 ./mm/page_io.c               |    1 -
 23 files changed, 31 insertions(+), 73 deletions(-)

diff .prev/block/ll_rw_blk.c ./block/ll_rw_blk.c
--- .prev/block/ll_rw_blk.c	2007-07-31 11:21:01.000000000 +1000
+++ ./block/ll_rw_blk.c	2007-07-31 11:21:03.000000000 +1000
@@ -3404,7 +3404,7 @@ static int __end_that_request_first(stru
 			next_idx = 0;
 			bio_nbytes = 0;
 		} else {
-			int idx = bio->bi_idx + next_idx;
+			int idx = next_idx;
 
 			if (unlikely(idx >= bio->bi_vcnt)) {
 				blk_dump_rq_flags(req, "__end_that");

diff .prev/drivers/block/floppy.c ./drivers/block/floppy.c
--- .prev/drivers/block/floppy.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/block/floppy.c	2007-07-31 11:21:03.000000000 +1000
@@ -3842,7 +3842,6 @@ static int __floppy_read_block_0(struct 
 	bio_vec.bv_len = size;
 	bio_vec.bv_offset = 0;
 	bio.bi_vcnt = 1;
-	bio.bi_idx = 0;
 	bio.bi_size = size;
 	bio.bi_bdev = bdev;
 	bio.bi_sector = 0;

diff .prev/drivers/block/pktcdvd.c ./drivers/block/pktcdvd.c
--- .prev/drivers/block/pktcdvd.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/block/pktcdvd.c	2007-07-31 11:21:03.000000000 +1000
@@ -1236,7 +1236,6 @@ static int pkt_start_recovery(struct pac
 	pkt->bio->bi_sector = new_sector;
 	pkt->bio->bi_next = NULL;
 	pkt->bio->bi_flags = 1 << BIO_UPTODATE;
-	pkt->bio->bi_idx = 0;
 
 	BUG_ON(pkt->bio->bi_rw != (1 << BIO_RW));
 	BUG_ON(pkt->bio->bi_vcnt != pkt->frames);
@@ -1391,7 +1390,7 @@ static void pkt_start_write(struct pktcd
 	frames_write = 0;
 	spin_lock(&pkt->lock);
 	for (bio = pkt->orig_bios; bio; bio = bio->bi_next) {
-		int segment = bio->bi_idx;
+		int segment = 0;
 		int src_offs = 0;
 		int first_frame = (bio->bi_sector - pkt->sector) / (CD_FRAMESIZE >> 9);
 		int num_frames = bio->bi_size / CD_FRAMESIZE;

diff .prev/drivers/block/umem.c ./drivers/block/umem.c
--- .prev/drivers/block/umem.c	2007-07-31 11:21:02.000000000 +1000
+++ ./drivers/block/umem.c	2007-07-31 11:21:03.000000000 +1000
@@ -391,7 +391,7 @@ static int add_bio(struct cardinfo *card
 	bio = card->currentbio;
 	if (!bio && card->bio) {
 		card->currentbio = card->bio;
-		card->current_idx = card->bio->bi_idx;
+		card->current_idx = 0;
 		card->current_sector = card->bio->bi_sector;
 		card->bio = card->bio->bi_next;
 		if (card->bio == NULL)
@@ -489,7 +489,7 @@ static void process_page(unsigned long d
 		page->idx++;
 		if (page->idx >= bio->bi_vcnt) {
 			page->bio = bio->bi_next;
-			page->idx = page->bio->bi_idx;
+			page->idx = 0;
 		}
 
 		pci_unmap_page(card->dev, desc->data_dma_handle, 

diff .prev/drivers/ide/ide-cd.c ./drivers/ide/ide-cd.c
--- .prev/drivers/ide/ide-cd.c	2007-07-31 11:20:43.000000000 +1000
+++ ./drivers/ide/ide-cd.c	2007-07-31 11:21:03.000000000 +1000
@@ -1991,7 +1991,8 @@ static ide_startstop_t cdrom_do_block_pc
 	 */
 	if (rq->bio) {
 		int mask = drive->queue->dma_alignment;
-		unsigned long addr = (unsigned long) page_address(bio_page(rq->bio));
+		unsigned long addr = (unsigned long)
+			page_address(rq->bio->bi_io_vec[0].bv_page);
 
 		info->dma = drive->using_dma;
 

diff .prev/drivers/md/dm-bio-record.h ./drivers/md/dm-bio-record.h
--- .prev/drivers/md/dm-bio-record.h	2007-07-31 11:20:06.000000000 +1000
+++ ./drivers/md/dm-bio-record.h	2007-07-31 11:21:03.000000000 +1000
@@ -20,7 +20,6 @@ struct dm_bio_details {
 	sector_t bi_sector;
 	struct block_device *bi_bdev;
 	unsigned int bi_size;
-	unsigned short bi_idx;
 	unsigned long bi_flags;
 };
 
@@ -29,7 +28,6 @@ static inline void dm_bio_record(struct 
 	bd->bi_sector = bio->bi_sector;
 	bd->bi_bdev = bio->bi_bdev;
 	bd->bi_size = bio->bi_size;
-	bd->bi_idx = bio->bi_idx;
 	bd->bi_flags = bio->bi_flags;
 }
 
@@ -38,7 +36,6 @@ static inline void dm_bio_restore(struct
 	bio->bi_sector = bd->bi_sector;
 	bio->bi_bdev = bd->bi_bdev;
 	bio->bi_size = bd->bi_size;
-	bio->bi_idx = bd->bi_idx;
 	bio->bi_flags = bd->bi_flags;
 }
 

diff .prev/drivers/md/dm.c ./drivers/md/dm.c
--- .prev/drivers/md/dm.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/md/dm.c	2007-07-31 11:21:03.000000000 +1000
@@ -657,8 +657,8 @@ static struct bio *clone_bio(struct bio 
 	__bio_clone(clone, bio);
 	clone->bi_destructor = dm_bio_destructor;
 	clone->bi_sector = sector;
-	clone->bi_idx = idx;
-	clone->bi_vcnt = idx + bv_count;
+	clone->bi_io_vec += idx;
+	clone->bi_vcnt = bv_count;
 	clone->bi_size = to_bytes(len);
 	clone->bi_flags &= ~(1 << BIO_SEG_VALID);
 
@@ -776,7 +776,7 @@ static void __split_bio(struct mapped_de
 	ci.io->md = md;
 	ci.sector = bio->bi_sector;
 	ci.sector_count = bio_sectors(bio);
-	ci.idx = bio->bi_idx;
+	ci.idx = 0;
 
 	start_io_acct(ci.io);
 	while (ci.sector_count)

diff .prev/drivers/md/dm-crypt.c ./drivers/md/dm-crypt.c
--- .prev/drivers/md/dm-crypt.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/md/dm-crypt.c	2007-07-31 11:21:03.000000000 +1000
@@ -328,8 +328,8 @@ crypt_convert_init(struct crypt_config *
 	ctx->bio_out = bio_out;
 	ctx->offset_in = 0;
 	ctx->offset_out = 0;
-	ctx->idx_in = bio_in ? bio_in->bi_idx : 0;
-	ctx->idx_out = bio_out ? bio_out->bi_idx : 0;
+	ctx->idx_in = 0;
+	ctx->idx_out = 0;
 	ctx->sector = sector + cc->iv_offset;
 	ctx->write = write;
 }
@@ -563,18 +563,17 @@ static void process_read(struct dm_crypt
 	 * copy the required bvecs because we need the original
 	 * one in order to decrypt the whole bio data *afterwards*.
 	 */
-	clone = bio_alloc_bioset(GFP_NOIO, bio_segments(base_bio), cc->bs);
+	clone = bio_alloc_bioset(GFP_NOIO, base_bio->bi_vcnt, cc->bs);
 	if (unlikely(!clone)) {
 		dec_pending(io, -ENOMEM);
 		return;
 	}
 
 	clone_init(io, clone);
-	clone->bi_idx = 0;
-	clone->bi_vcnt = bio_segments(base_bio);
+	clone->bi_vcnt = base_bio->bi_vcnt;
 	clone->bi_size = base_bio->bi_size;
 	clone->bi_sector = cc->start + sector;
-	memcpy(clone->bi_io_vec, bio_iovec(base_bio),
+	memcpy(clone->bi_io_vec, base_bio->bi_io_vec,
 	       sizeof(struct bio_vec) * clone->bi_vcnt);
 
 	generic_make_request(clone);

diff .prev/drivers/md/dm-raid1.c ./drivers/md/dm-raid1.c
--- .prev/drivers/md/dm-raid1.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/md/dm-raid1.c	2007-07-31 11:21:03.000000000 +1000
@@ -831,7 +831,7 @@ static void do_write(struct mirror_set *
 	struct dm_io_request io_req = {
 		.bi_rw = WRITE,
 		.mem.type = DM_IO_BVEC,
-		.mem.ptr.bvec = bio->bi_io_vec + bio->bi_idx,
+		.mem.ptr.bvec = bio->bi_io_vec,
 		.notify.fn = write_callback,
 		.notify.context = bio,
 		.client = ms->io_client,

diff .prev/drivers/md/raid0.c ./drivers/md/raid0.c
--- .prev/drivers/md/raid0.c	2007-07-31 11:20:51.000000000 +1000
+++ ./drivers/md/raid0.c	2007-07-31 11:21:03.000000000 +1000
@@ -436,8 +436,7 @@ static int raid0_make_request (struct re
 	if (unlikely(chunk_sects < (bio->bi_sector & (chunk_sects - 1)) + (bio->bi_size >> 9))) {
 		struct bio_pair *bp;
 		/* Sanity check -- queue functions should prevent this happening */
-		if (bio->bi_vcnt != 1 ||
-		    bio->bi_idx != 0)
+		if (bio->bi_vcnt != 1)
 			goto bad_map;
 		/* This is a one page bio that upper layers
 		 * refuse to split for us, so we need to split it.

diff .prev/drivers/md/raid10.c ./drivers/md/raid10.c
--- .prev/drivers/md/raid10.c	2007-07-31 11:21:00.000000000 +1000
+++ ./drivers/md/raid10.c	2007-07-31 11:21:03.000000000 +1000
@@ -792,8 +792,7 @@ static int make_request(struct request_q
 		    conf->near_copies < conf->raid_disks)) {
 		struct bio_pair *bp;
 		/* Sanity check -- queue functions should prevent this happening */
-		if (bio->bi_vcnt != 1 ||
-		    bio->bi_idx != 0)
+		if (bio->bi_vcnt != 1)
 			goto bad_map;
 		/* This is a one page bio that upper layers
 		 * refuse to split for us, so we need to split it.
@@ -1278,7 +1277,6 @@ static void sync_request_write(mddev_t *
 		 */
 		tbio->bi_vcnt = vcnt;
 		tbio->bi_size = r10_bio->sectors << 9;
-		tbio->bi_idx = 0;
 		tbio->bi_phys_segments = 0;
 		tbio->bi_hw_segments = 0;
 		tbio->bi_flags &= ~(BIO_POOL_MASK - 1);
@@ -1884,7 +1882,6 @@ static sector_t sync_request(mddev_t *md
 		if (bio->bi_end_io)
 			bio->bi_flags |= 1 << BIO_UPTODATE;
 		bio->bi_vcnt = 0;
-		bio->bi_idx = 0;
 		bio->bi_phys_segments = 0;
 		bio->bi_hw_segments = 0;
 		bio->bi_size = 0;

diff .prev/drivers/md/raid1.c ./drivers/md/raid1.c
--- .prev/drivers/md/raid1.c	2007-07-31 11:21:00.000000000 +1000
+++ ./drivers/md/raid1.c	2007-07-31 11:21:03.000000000 +1000
@@ -910,14 +910,7 @@ static int make_request(struct request_q
 			struct bio_vec *bvec;
 			int j;
 
-			/* Yes, I really want the '__' version so that
-			 * we clear any unused pointer in the io_vec, rather
-			 * than leave them unchanged.  This is important
-			 * because when we come to free the pages, we won't
-			 * know the originial bi_idx, so we just free
-			 * them all
-			 */
-			__bio_for_each_segment(bvec, mbio, j, 0)
+			bio_for_each_segment(bvec, mbio, j)
 				bvec->bv_page = behind_pages[j];
 			if (test_bit(WriteMostly, &conf->mirrors[i].rdev->flags))
 				atomic_inc(&r1_bio->behind_remaining);
@@ -1251,7 +1244,6 @@ static void sync_request_write(mddev_t *
 					/* fixup the bio for reuse */
 					sbio->bi_vcnt = vcnt;
 					sbio->bi_size = r1_bio->sectors << 9;
-					sbio->bi_idx = 0;
 					sbio->bi_phys_segments = 0;
 					sbio->bi_hw_segments = 0;
 					sbio->bi_flags &= ~(BIO_POOL_MASK - 1);
@@ -1556,7 +1548,7 @@ static void raid1d(mddev_t *mddev)
 					bio = bio_clone(r1_bio->master_bio, GFP_NOIO);
 					/* copy pages from the failed bio, as
 					 * this might be a write-behind device */
-					__bio_for_each_segment(bvec, bio, j, 0)
+					bio_for_each_segment(bvec, bio, j)
 						bvec->bv_page = bio_iovec_idx(r1_bio->bios[i], j)->bv_page;
 					bio_put(r1_bio->bios[i]);
 					bio->bi_sector = r1_bio->sector +
@@ -1741,7 +1733,6 @@ static sector_t sync_request(mddev_t *md
 		bio->bi_flags |= 1 << BIO_UPTODATE;
 		bio->bi_rw = READ;
 		bio->bi_vcnt = 0;
-		bio->bi_idx = 0;
 		bio->bi_phys_segments = 0;
 		bio->bi_hw_segments = 0;
 		bio->bi_size = 0;

diff .prev/drivers/md/raid5.c ./drivers/md/raid5.c
--- .prev/drivers/md/raid5.c	2007-07-31 11:20:53.000000000 +1000
+++ ./drivers/md/raid5.c	2007-07-31 11:21:03.000000000 +1000
@@ -740,7 +740,6 @@ static void ops_run_io(struct stripe_hea
 			bi->bi_flags = 1 << BIO_UPTODATE;
 			bi->bi_vcnt = 1;
 			bi->bi_max_vecs = 1;
-			bi->bi_idx = 0;
 			bi->bi_io_vec = &sh->dev[i].vec;
 			bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
 			bi->bi_io_vec[0].bv_offset = 0;
@@ -3611,7 +3610,6 @@ static void handle_stripe6(struct stripe
 			bi->bi_flags = 1 << BIO_UPTODATE;
 			bi->bi_vcnt = 1;
 			bi->bi_max_vecs = 1;
-			bi->bi_idx = 0;
 			bi->bi_io_vec = &sh->dev[i].vec;
 			bi->bi_io_vec[0].bv_len = STRIPE_SIZE;
 			bi->bi_io_vec[0].bv_offset = 0;

diff .prev/fs/bio.c ./fs/bio.c
--- .prev/fs/bio.c	2007-07-31 11:21:00.000000000 +1000
+++ ./fs/bio.c	2007-07-31 11:21:03.000000000 +1000
@@ -132,7 +132,6 @@ void bio_init(struct bio *bio)
 	bio->bi_flags = 1 << BIO_UPTODATE;
 	bio->bi_rw = 0;
 	bio->bi_vcnt = 0;
-	bio->bi_idx = 0;
 	bio->bi_phys_segments = 0;
 	bio->bi_hw_segments = 0;
 	bio->bi_size = 0;
@@ -267,7 +266,6 @@ void __bio_clone(struct bio *bio, struct
 	bio->bi_rw = bio_src->bi_rw;
 	bio->bi_vcnt = bio_src->bi_vcnt;
 	bio->bi_size = bio_src->bi_size;
-	bio->bi_idx = bio_src->bi_idx;
 	bio_phys_segments(q, bio);
 	bio_hw_segments(q, bio);
 }
@@ -496,7 +494,7 @@ int bio_uncopy_user(struct bio *bio)
 	struct bio_vec *bvec;
 	int i, ret = 0;
 
-	__bio_for_each_segment(bvec, bio, i, 0) {
+	bio_for_each_segment(bvec, bio, i) {
 		char *addr = page_address(bvec->bv_page);
 		unsigned int len = bmd->iovecs[i].bv_len;
 
@@ -772,7 +770,7 @@ static void __bio_unmap_user(struct bio 
 	/*
 	 * make sure we dirty pages we wrote to
 	 */
-	__bio_for_each_segment(bvec, bio, i, 0) {
+	bio_for_each_segment(bvec, bio, i) {
 		if (bio_data_dir(bio) == READ)
 			set_page_dirty_lock(bvec->bv_page);
 
@@ -1062,7 +1060,6 @@ struct bio_pair *bio_split(struct bio *b
 				bi->bi_sector + first_sectors);
 
 	BUG_ON(bi->bi_vcnt != 1);
-	BUG_ON(bi->bi_idx != 0);
 	atomic_set(&bp->cnt, 3);
 	bp->error = 0;
 	bp->bio1 = *bi;

diff .prev/fs/buffer.c ./fs/buffer.c
--- .prev/fs/buffer.c	2007-07-31 11:20:51.000000000 +1000
+++ ./fs/buffer.c	2007-07-31 11:21:03.000000000 +1000
@@ -2802,7 +2802,6 @@ int submit_bh(int rw, struct buffer_head
 	bio->bi_io_vec[0].bv_offset = bh_offset(bh);
 
 	bio->bi_vcnt = 1;
-	bio->bi_idx = 0;
 	bio->bi_size = bh->b_size;
 
 	bio->bi_end_io = end_bio_bh_io_sync;

diff .prev/fs/jfs/jfs_logmgr.c ./fs/jfs/jfs_logmgr.c
--- .prev/fs/jfs/jfs_logmgr.c	2007-07-31 11:20:51.000000000 +1000
+++ ./fs/jfs/jfs_logmgr.c	2007-07-31 11:21:03.000000000 +1000
@@ -2012,7 +2012,6 @@ static int lbmRead(struct jfs_log * log,
 	bio->bi_io_vec[0].bv_offset = bp->l_offset;
 
 	bio->bi_vcnt = 1;
-	bio->bi_idx = 0;
 	bio->bi_size = LOGPSIZE;
 
 	bio->bi_end_io = lbmIODone;
@@ -2153,7 +2152,6 @@ static void lbmStartIO(struct lbuf * bp)
 	bio->bi_io_vec[0].bv_offset = bp->l_offset;
 
 	bio->bi_vcnt = 1;
-	bio->bi_idx = 0;
 	bio->bi_size = LOGPSIZE;
 
 	bio->bi_end_io = lbmIODone;

diff .prev/fs/reiser4/page_cache.c ./fs/reiser4/page_cache.c
--- .prev/fs/reiser4/page_cache.c	2007-07-31 11:20:51.000000000 +1000
+++ ./fs/reiser4/page_cache.c	2007-07-31 11:21:03.000000000 +1000
@@ -451,7 +451,6 @@ static struct bio *page_bio(struct page 
 			return ERR_PTR(RETERR(-EINVAL));
 		}
 
-		/* bio -> bi_idx is filled by bio_init() */
 		bio->bi_end_io = (rw == READ) ?
 		    end_bio_single_page_read : end_bio_single_page_write;
 

diff .prev/include/asm-arm26/memory.h ./include/asm-arm26/memory.h
--- .prev/include/asm-arm26/memory.h	2007-07-31 11:20:06.000000000 +1000
+++ ./include/asm-arm26/memory.h	2007-07-31 11:21:03.000000000 +1000
@@ -88,7 +88,7 @@ static inline void *phys_to_virt(unsigne
 #define virt_addr_valid(kaddr)	((int)(kaddr) >= PAGE_OFFSET && (int)(kaddr) < (unsigned long)high_memory)
 
 /*
- * For BIO.  "will die".  Kill me when bio_to_phys() and bvec_to_phys() die.
+ * For BIO.  "will die".  Kill me when bvec_to_phys() dies.
  */
 #define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
 

diff .prev/include/asm-arm/memory.h ./include/asm-arm/memory.h
--- .prev/include/asm-arm/memory.h	2007-07-31 11:20:06.000000000 +1000
+++ ./include/asm-arm/memory.h	2007-07-31 11:21:03.000000000 +1000
@@ -298,7 +298,7 @@ static inline __deprecated void *bus_to_
 #endif /* !CONFIG_DISCONTIGMEM */
 
 /*
- * For BIO.  "will die".  Kill me when bio_to_phys() and bvec_to_phys() die.
+ * For BIO.  "will die".  Kill me when bvec_to_phys() dies.
  */
 #define page_to_phys(page)	(page_to_pfn(page) << PAGE_SHIFT)
 

diff .prev/include/linux/bio.h ./include/linux/bio.h
--- .prev/include/linux/bio.h	2007-07-31 11:21:00.000000000 +1000
+++ ./include/linux/bio.h	2007-07-31 11:21:03.000000000 +1000
@@ -80,7 +80,6 @@ struct bio {
 						 */
 
 	unsigned short		bi_vcnt;	/* how many bio_vec's */
-	unsigned short		bi_idx;		/* current index into bvl_vec */
 
 	/* Number of segments in this BIO after
 	 * physical address coalescing is performed.
@@ -163,10 +162,6 @@ struct bio {
  * various member access
  */
 #define bio_iovec_idx(bio, idx)	(&((bio)->bi_io_vec[(idx)]))
-#define bio_iovec(bio)		bio_iovec_idx((bio), (bio)->bi_idx)
-#define bio_page(bio)		bio_iovec((bio))->bv_page
-#define bio_offset(bio)		bio_iovec((bio))->bv_offset
-#define bio_segments(bio)	((bio)->bi_vcnt - (bio)->bi_idx)
 #define bio_sectors(bio)	((bio)->bi_size >> 9)
 #define bio_barrier(bio)	((bio)->bi_rw & (1 << BIO_RW_BARRIER))
 #define bio_sync(bio)		((bio)->bi_rw & (1 << BIO_RW_SYNC))
@@ -177,7 +172,6 @@ struct bio {
 /*
  * will die
  */
-#define bio_to_phys(bio)	(page_to_phys(bio_page((bio))) + (unsigned long) bio_offset((bio)))
 #define bvec_to_phys(bv)	(page_to_phys((bv)->bv_page) + (unsigned long) (bv)->bv_offset)
 
 /*
@@ -197,7 +191,7 @@ struct bio {
  */
 
 #define __BVEC_END(bio)		bio_iovec_idx((bio), (bio)->bi_vcnt - 1)
-#define __BVEC_START(bio)	bio_iovec_idx((bio), (bio)->bi_idx)
+#define __BVEC_START(bio)	bio_iovec_idx((bio), 0)
 
 /*
  * allow arch override, for eg virtualized architectures (put in asm/io.h)
@@ -218,18 +212,11 @@ struct bio {
 
 #define bio_io_error(bio) bio_endio((bio), -EIO)
 
-/*
- * drivers should not use the __ version unless they _really_ want to
- * run through the entire bio and not just pending pieces
- */
-#define __bio_for_each_segment(bvl, bio, i, start_idx)			\
-	for (bvl = bio_iovec_idx((bio), (start_idx)), i = (start_idx);	\
+#define bio_for_each_segment(bvl, bio, i)				\
+	for (bvl = bio_iovec_idx((bio), 0), i = 0;			\
 	     i < (bio)->bi_vcnt;					\
 	     bvl++, i++)
 
-#define bio_for_each_segment(bvl, bio, i)				\
-	__bio_for_each_segment(bvl, bio, i, (bio)->bi_idx)
-
 /*
  * get a reference to a bio, so it won't disappear. the intended use is
  * something like:
@@ -350,7 +337,7 @@ static inline char *__bio_kmap_irq(struc
 #define __bio_kunmap_irq(buf, flags)	bvec_kunmap_irq(buf, flags)
 
 #define bio_kmap_irq(bio, flags) \
-	__bio_kmap_irq((bio), (bio)->bi_idx, (flags))
+	__bio_kmap_irq((bio), 0, (flags))
 #define bio_kunmap_irq(buf,flags)	__bio_kunmap_irq(buf, flags)
 
 #endif /* __LINUX_BIO_H */

diff .prev/include/linux/blkdev.h ./include/linux/blkdev.h
--- .prev/include/linux/blkdev.h	2007-07-31 11:21:00.000000000 +1000
+++ ./include/linux/blkdev.h	2007-07-31 11:21:03.000000000 +1000
@@ -655,7 +655,7 @@ struct req_iterator {
 	for (_iter.bio = (rq)->bio, _iter.offset = (rq)->first_offset;	       \
 	     _iter.bio;							       \
 	     _iter.bio = _iter.bio->bi_next, _iter.offset = 0) 		       \
-		for (_iter.i = _iter.bio->bi_idx; 			       \
+		for (_iter.i = 0;		 			       \
 		     _iter.i < _iter.bio->bi_vcnt;			       \
 		     _iter.i++						       \
 		)							       \

diff .prev/mm/bounce.c ./mm/bounce.c
--- .prev/mm/bounce.c	2007-07-31 11:20:51.000000000 +1000
+++ ./mm/bounce.c	2007-07-31 11:21:03.000000000 +1000
@@ -98,7 +98,7 @@ static void copy_to_high_bio_irq(struct 
 	struct bio_vec *tovec, *fromvec;
 	int i;
 
-	__bio_for_each_segment(tovec, to, i, 0) {
+	bio_for_each_segment(tovec, to, i) {
 		fromvec = from->bi_io_vec + i;
 
 		/*
@@ -131,7 +131,7 @@ static void bounce_end_io(struct bio *bi
 	/*
 	 * free up bounce indirect pages used
 	 */
-	__bio_for_each_segment(bvec, bio, i, 0) {
+	bio_for_each_segment(bvec, bio, i) {
 		org_vec = bio_orig->bi_io_vec + i;
 		if (bvec->bv_page == org_vec->bv_page)
 			continue;
@@ -228,7 +228,7 @@ static void __blk_queue_bounce(struct re
 	 * at least one page was bounced, fill in possible non-highmem
 	 * pages
 	 */
-	__bio_for_each_segment(from, *bio_orig, i, 0) {
+	bio_for_each_segment(from, *bio_orig, i) {
 		to = bio_iovec_idx(bio, i);
 		if (!to->bv_page) {
 			to->bv_page = from->bv_page;
@@ -243,7 +243,6 @@ static void __blk_queue_bounce(struct re
 	bio->bi_rw = (*bio_orig)->bi_rw;
 
 	bio->bi_vcnt = (*bio_orig)->bi_vcnt;
-	bio->bi_idx = (*bio_orig)->bi_idx;
 	bio->bi_size = (*bio_orig)->bi_size;
 
 	if (pool == page_pool) {

diff .prev/mm/page_io.c ./mm/page_io.c
--- .prev/mm/page_io.c	2007-07-31 11:20:51.000000000 +1000
+++ ./mm/page_io.c	2007-07-31 11:21:03.000000000 +1000
@@ -38,7 +38,6 @@ static struct bio *get_swap_bio(gfp_t gf
 		bio->bi_io_vec[0].bv_len = PAGE_SIZE;
 		bio->bi_io_vec[0].bv_offset = 0;
 		bio->bi_vcnt = 1;
-		bio->bi_idx = 0;
 		bio->bi_size = PAGE_SIZE;
 		bio->bi_end_io = end_io;
 	}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ