From: Andrew Morton Cc: Badari Pulavarty Signed-off-by: Andrew Morton --- fs/buffer.c | 13 +++++++------ 1 files changed, 7 insertions(+), 6 deletions(-) diff -puN fs/buffer.c~pass-b_size-to-get_block-speedup fs/buffer.c --- devel/fs/buffer.c~pass-b_size-to-get_block-speedup 2006-03-11 02:47:08.000000000 -0800 +++ devel-akpm/fs/buffer.c 2006-03-11 02:47:08.000000000 -0800 @@ -1740,6 +1740,7 @@ static int __block_write_full_page(struc sector_t block; sector_t last_block; struct buffer_head *bh, *head; + const unsigned blocksize = 1 << inode->i_blkbits; int nr_underway = 0; BUG_ON(!PageLocked(page)); @@ -1747,7 +1748,7 @@ static int __block_write_full_page(struc last_block = (i_size_read(inode) - 1) >> inode->i_blkbits; if (!page_has_buffers(page)) { - create_empty_buffers(page, 1 << inode->i_blkbits, + create_empty_buffers(page, blocksize, (1 << BH_Dirty)|(1 << BH_Uptodate)); } @@ -1782,7 +1783,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; + bh->b_size = blocksize; err = get_block(inode, block, bh, 1); if (err) goto recover; @@ -1936,7 +1937,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; + bh->b_size = blocksize; err = get_block(inode, block, bh, 1); if (err) break; @@ -2092,7 +2093,7 @@ int block_read_full_page(struct page *pa fully_mapped = 0; if (iblock < lblock) { - bh->b_size = 1 << inode->i_blkbits; + bh->b_size = blocksize; err = get_block(inode, iblock, bh, 0); if (err) SetPageError(page); @@ -2414,7 +2415,7 @@ int nobh_prepare_write(struct page *page create = 1; if (block_start >= to) create = 0; - map_bh.b_size = 1 << blkbits; + map_bh.b_size = blocksize; ret = get_block(inode, block_in_file + block_in_page, &map_bh, create); if (ret) @@ -2675,7 +2676,7 @@ int block_truncate_page(struct address_s err = 0; if (!buffer_mapped(bh)) { - bh->b_size = 1 << inode->i_blkbits; + bh->b_size = blocksize; err = get_block(inode, iblock, bh, 0); if (err) goto unlock; _