mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 03:27:44 -04:00
Merge branch 'for-4.10/fs-unmap' of git://git.kernel.dk/linux-block
Pull fs meta data unmap optimization from Jens Axboe: "A series from Jan Kara, providing a more efficient way for unmapping meta data from in the buffer cache than doing it block-by-block. Provide a general helper that existing callers can use" * 'for-4.10/fs-unmap' of git://git.kernel.dk/linux-block: fs: Remove unmap_underlying_metadata fs: Add helper to clean bdev aliases under a bh and use it ext2: Use clean_bdev_aliases() instead of iteration ext4: Use clean_bdev_aliases() instead of iteration direct-io: Use clean_bdev_aliases() instead of handmade iteration fs: Provide function to unmap metadata for a range of blocks
This commit is contained in:
commit
80eabba702
13 changed files with 104 additions and 95 deletions
|
|
@ -3777,14 +3777,6 @@ out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static void unmap_underlying_metadata_blocks(struct block_device *bdev,
|
||||
sector_t block, int count)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < count; i++)
|
||||
unmap_underlying_metadata(bdev, block + i);
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle EOFBLOCKS_FL flag, clearing it if necessary
|
||||
*/
|
||||
|
|
@ -4121,9 +4113,8 @@ out:
|
|||
* new.
|
||||
*/
|
||||
if (allocated > map->m_len) {
|
||||
unmap_underlying_metadata_blocks(inode->i_sb->s_bdev,
|
||||
newblock + map->m_len,
|
||||
allocated - map->m_len);
|
||||
clean_bdev_aliases(inode->i_sb->s_bdev, newblock + map->m_len,
|
||||
allocated - map->m_len);
|
||||
allocated = map->m_len;
|
||||
}
|
||||
map->m_len = allocated;
|
||||
|
|
|
|||
|
|
@ -661,12 +661,8 @@ found:
|
|||
if (flags & EXT4_GET_BLOCKS_ZERO &&
|
||||
map->m_flags & EXT4_MAP_MAPPED &&
|
||||
map->m_flags & EXT4_MAP_NEW) {
|
||||
ext4_lblk_t i;
|
||||
|
||||
for (i = 0; i < map->m_len; i++) {
|
||||
unmap_underlying_metadata(inode->i_sb->s_bdev,
|
||||
map->m_pblk + i);
|
||||
}
|
||||
clean_bdev_aliases(inode->i_sb->s_bdev, map->m_pblk,
|
||||
map->m_len);
|
||||
ret = ext4_issue_zeroout(inode, map->m_lblk,
|
||||
map->m_pblk, map->m_len);
|
||||
if (ret) {
|
||||
|
|
@ -1137,8 +1133,7 @@ static int ext4_block_write_begin(struct page *page, loff_t pos, unsigned len,
|
|||
if (err)
|
||||
break;
|
||||
if (buffer_new(bh)) {
|
||||
unmap_underlying_metadata(bh->b_bdev,
|
||||
bh->b_blocknr);
|
||||
clean_bdev_bh_alias(bh);
|
||||
if (PageUptodate(page)) {
|
||||
clear_buffer_new(bh);
|
||||
set_buffer_uptodate(bh);
|
||||
|
|
@ -2371,11 +2366,8 @@ static int mpage_map_one_extent(handle_t *handle, struct mpage_da_data *mpd)
|
|||
|
||||
BUG_ON(map->m_len == 0);
|
||||
if (map->m_flags & EXT4_MAP_NEW) {
|
||||
struct block_device *bdev = inode->i_sb->s_bdev;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < map->m_len; i++)
|
||||
unmap_underlying_metadata(bdev, map->m_pblk + i);
|
||||
clean_bdev_aliases(inode->i_sb->s_bdev, map->m_pblk,
|
||||
map->m_len);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -457,7 +457,7 @@ int ext4_bio_write_page(struct ext4_io_submit *io,
|
|||
}
|
||||
if (buffer_new(bh)) {
|
||||
clear_buffer_new(bh);
|
||||
unmap_underlying_metadata(bh->b_bdev, bh->b_blocknr);
|
||||
clean_bdev_bh_alias(bh);
|
||||
}
|
||||
set_buffer_async_write(bh);
|
||||
nr_to_submit++;
|
||||
|
|
|
|||
Loading…
Reference in a new issue