mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 19:51:31 -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
|
|
@ -842,24 +842,6 @@ out:
|
|||
return ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Clean any dirty buffers in the blockdev mapping which alias newly-created
|
||||
* file blocks. Only called for S_ISREG files - blockdevs do not set
|
||||
* buffer_new
|
||||
*/
|
||||
static void clean_blockdev_aliases(struct dio *dio, struct buffer_head *map_bh)
|
||||
{
|
||||
unsigned i;
|
||||
unsigned nblocks;
|
||||
|
||||
nblocks = map_bh->b_size >> dio->inode->i_blkbits;
|
||||
|
||||
for (i = 0; i < nblocks; i++) {
|
||||
unmap_underlying_metadata(map_bh->b_bdev,
|
||||
map_bh->b_blocknr + i);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If we are not writing the entire block and get_block() allocated
|
||||
* the block for us, we need to fill-in the unused portion of the
|
||||
|
|
@ -960,11 +942,15 @@ static int do_direct_IO(struct dio *dio, struct dio_submit *sdio,
|
|||
goto do_holes;
|
||||
|
||||
sdio->blocks_available =
|
||||
map_bh->b_size >> sdio->blkbits;
|
||||
map_bh->b_size >> blkbits;
|
||||
sdio->next_block_for_io =
|
||||
map_bh->b_blocknr << sdio->blkfactor;
|
||||
if (buffer_new(map_bh))
|
||||
clean_blockdev_aliases(dio, map_bh);
|
||||
if (buffer_new(map_bh)) {
|
||||
clean_bdev_aliases(
|
||||
map_bh->b_bdev,
|
||||
map_bh->b_blocknr,
|
||||
map_bh->b_size >> blkbits);
|
||||
}
|
||||
|
||||
if (!sdio->blkfactor)
|
||||
goto do_holes;
|
||||
|
|
|
|||
Loading…
Reference in a new issue