lkml.org 
[lkml]   [2006]   [Feb]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH 2/4] pass b_size to ->get_block()
From
Date
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.


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 <pbadari@us.ibm.com>

fs/buffer.c | 6 ++++++
fs/mpage.c | 2 ++
include/linux/buffer_head.h | 1 +
3 files changed, 9 insertions(+)

Index: linux-2.6.16-rc5/fs/buffer.c
===================================================================
--- linux-2.6.16-rc5.orig/fs/buffer.c 2006-02-27 08:22:37.000000000 -0800
+++ linux-2.6.16-rc5/fs/buffer.c 2006-02-27 08:22:45.000000000 -0800
@@ -1786,6 +1786,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;
@@ -1939,6 +1940,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;
@@ -2094,6 +2096,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);
@@ -2415,6 +2418,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)
@@ -2675,6 +2679,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;
@@ -2761,6 +2766,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;
}
Index: linux-2.6.16-rc5/include/linux/buffer_head.h
===================================================================
--- linux-2.6.16-rc5.orig/include/linux/buffer_head.h 2006-02-27 08:22:37.000000000 -0800
+++ linux-2.6.16-rc5/include/linux/buffer_head.h 2006-02-27 08:22:45.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;
}

/*
Index: linux-2.6.16-rc5/fs/mpage.c
===================================================================
--- linux-2.6.16-rc5.orig/fs/mpage.c 2006-02-26 21:09:35.000000000 -0800
+++ linux-2.6.16-rc5/fs/mpage.c 2006-02-27 08:22:45.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))
\
 
 \ /
  Last update: 2006-02-27 22:24    [W:0.106 / U:0.300 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site