[PATCH 1/3] pass b_size to ->get_block()
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.
Thanks,
Badari
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 <[email protected]>
fs/buffer.c | 6 ++++++
fs/mpage.c | 2 ++
include/linux/buffer_head.h | 1 +
3 files changed, 9 insertions(+)
Index: linux-2.6.16-rc4/fs/buffer.c
===================================================================
--- linux-2.6.16-rc4.orig/fs/buffer.c 2006-02-17 14:23:45.000000000 -0800
+++ linux-2.6.16-rc4/fs/buffer.c 2006-02-20 09:37:58.000000000 -0800
@@ -1785,6 +1785,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;
@@ -1938,6 +1939,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;
@@ -2093,6 +2095,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);
@@ -2414,6 +2417,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)
@@ -2674,6 +2678,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;
@@ -2760,6 +2765,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-rc4/include/linux/buffer_head.h
===================================================================
--- linux-2.6.16-rc4.orig/include/linux/buffer_head.h 2006-02-17 14:23:45.000000000 -0800
+++ linux-2.6.16-rc4/include/linux/buffer_head.h 2006-02-20 09:39:20.000000000 -0800
@@ -277,6 +277,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-rc4/fs/mpage.c
===================================================================
--- linux-2.6.16-rc4.orig/fs/mpage.c 2006-02-17 14:23:45.000000000 -0800
+++ linux-2.6.16-rc4/fs/mpage.c 2006-02-20 09:45:37.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))
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Stuff]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
[Linux Resources]