From: Badari Pulavarty Pass amount of disk needs to be mapped to get_block(). This way one can modify the fs ->get_block() functions to map multiple blocks at the same time. Signed-off-by: Badari Pulavarty Signed-off-by: Andrew Morton --- fs/buffer.c | 6 ++++++ fs/mpage.c | 2 ++ include/linux/buffer_head.h | 1 + 3 files changed, 9 insertions(+) diff -puN fs/buffer.c~pass-b_size-to-get_block fs/buffer.c --- devel/fs/buffer.c~pass-b_size-to-get_block 2006-03-11 02:47:08.000000000 -0800 +++ devel-akpm/fs/buffer.c 2006-03-11 02:47:08.000000000 -0800 @@ -1782,6 +1782,7 @@ static int __block_write_full_page(struc clear_buffer_dirty(bh); set_buffer_uptodate(bh); } else if (!buffer_mapped(bh) && buffer_dirty(bh)) { + bh->b_size = 1 << inode->i_blkbits; err = get_block(inode, block, bh, 1); if (err) goto recover; @@ -1935,6 +1936,7 @@ static int __block_prepare_write(struct if (buffer_new(bh)) clear_buffer_new(bh); if (!buffer_mapped(bh)) { + bh->b_size = 1 << inode->i_blkbits; err = get_block(inode, block, bh, 1); if (err) break; @@ -2090,6 +2092,7 @@ int block_read_full_page(struct page *pa fully_mapped = 0; if (iblock < lblock) { + bh->b_size = 1 << inode->i_blkbits; err = get_block(inode, iblock, bh, 0); if (err) SetPageError(page); @@ -2411,6 +2414,7 @@ int nobh_prepare_write(struct page *page create = 1; if (block_start >= to) create = 0; + map_bh.b_size = 1 << blkbits; ret = get_block(inode, block_in_file + block_in_page, &map_bh, create); if (ret) @@ -2671,6 +2675,7 @@ int block_truncate_page(struct address_s err = 0; if (!buffer_mapped(bh)) { + bh->b_size = 1 << inode->i_blkbits; err = get_block(inode, iblock, bh, 0); if (err) goto unlock; @@ -2757,6 +2762,7 @@ sector_t generic_block_bmap(struct addre struct inode *inode = mapping->host; tmp.b_state = 0; tmp.b_blocknr = 0; + tmp.b_size = 1 << inode->i_blkbits; get_block(inode, block, &tmp, 0); return tmp.b_blocknr; } diff -puN fs/mpage.c~pass-b_size-to-get_block fs/mpage.c --- devel/fs/mpage.c~pass-b_size-to-get_block 2006-03-11 02:47:08.000000000 -0800 +++ devel-akpm/fs/mpage.c 2006-03-11 02:47:08.000000000 -0800 @@ -192,6 +192,7 @@ do_mpage_readpage(struct bio *bio, struc page_block++, block_in_file++) { bh.b_state = 0; if (block_in_file < last_block) { + bh.b_size = blocksize; if (get_block(inode, block_in_file, &bh, 0)) goto confused; } @@ -472,6 +473,7 @@ __mpage_writepage(struct bio *bio, struc for (page_block = 0; page_block < blocks_per_page; ) { map_bh.b_state = 0; + map_bh.b_size = 1 << blkbits; if (get_block(inode, block_in_file, &map_bh, 1)) goto confused; if (buffer_new(&map_bh)) diff -puN include/linux/buffer_head.h~pass-b_size-to-get_block include/linux/buffer_head.h --- devel/include/linux/buffer_head.h~pass-b_size-to-get_block 2006-03-11 02:47:08.000000000 -0800 +++ devel-akpm/include/linux/buffer_head.h 2006-03-11 02:47:08.000000000 -0800 @@ -280,6 +280,7 @@ map_bh(struct buffer_head *bh, struct su set_buffer_mapped(bh); bh->b_bdev = sb->s_bdev; bh->b_blocknr = block; + bh->b_size = sb->s_blocksize; } /* _