mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
[PATCH] 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. [[email protected]: performance tweak] [[email protected]: remove unneeded assignments] Signed-off-by: Badari Pulavarty <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
205f87f6b3
commit
b0cf2321c6
3 changed files with 11 additions and 1 deletions
|
|
@ -1738,6 +1738,7 @@ static int __block_write_full_page(struct inode *inode, struct page *page,
|
|||
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));
|
||||
|
|
@ -1745,7 +1746,7 @@ static int __block_write_full_page(struct inode *inode, struct page *page,
|
|||
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));
|
||||
}
|
||||
|
||||
|
|
@ -1780,6 +1781,7 @@ static int __block_write_full_page(struct inode *inode, struct page *page,
|
|||
clear_buffer_dirty(bh);
|
||||
set_buffer_uptodate(bh);
|
||||
} else if (!buffer_mapped(bh) && buffer_dirty(bh)) {
|
||||
WARN_ON(bh->b_size != blocksize);
|
||||
err = get_block(inode, block, bh, 1);
|
||||
if (err)
|
||||
goto recover;
|
||||
|
|
@ -1933,6 +1935,7 @@ static int __block_prepare_write(struct inode *inode, struct page *page,
|
|||
if (buffer_new(bh))
|
||||
clear_buffer_new(bh);
|
||||
if (!buffer_mapped(bh)) {
|
||||
WARN_ON(bh->b_size != blocksize);
|
||||
err = get_block(inode, block, bh, 1);
|
||||
if (err)
|
||||
break;
|
||||
|
|
@ -2088,6 +2091,7 @@ int block_read_full_page(struct page *page, get_block_t *get_block)
|
|||
|
||||
fully_mapped = 0;
|
||||
if (iblock < lblock) {
|
||||
WARN_ON(bh->b_size != blocksize);
|
||||
err = get_block(inode, iblock, bh, 0);
|
||||
if (err)
|
||||
SetPageError(page);
|
||||
|
|
@ -2409,6 +2413,7 @@ int nobh_prepare_write(struct page *page, unsigned from, unsigned to,
|
|||
create = 1;
|
||||
if (block_start >= to)
|
||||
create = 0;
|
||||
map_bh.b_size = blocksize;
|
||||
ret = get_block(inode, block_in_file + block_in_page,
|
||||
&map_bh, create);
|
||||
if (ret)
|
||||
|
|
@ -2669,6 +2674,7 @@ int block_truncate_page(struct address_space *mapping,
|
|||
|
||||
err = 0;
|
||||
if (!buffer_mapped(bh)) {
|
||||
WARN_ON(bh->b_size != blocksize);
|
||||
err = get_block(inode, iblock, bh, 0);
|
||||
if (err)
|
||||
goto unlock;
|
||||
|
|
@ -2755,6 +2761,7 @@ sector_t generic_block_bmap(struct address_space *mapping, sector_t block,
|
|||
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;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue