mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-03-17 20:54:10 +00:00
f2fs: introduce f2fs_bmap_compress()
to support bmap() on compressed inode: if queried block locates in non-compressed cluster, return its physical block address. Signed-off-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
bf38fbad12
commit
c1c6338786
1 changed files with 34 additions and 0 deletions
|
@ -3666,6 +3666,37 @@ static int f2fs_set_data_page_dirty(struct page *page)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static sector_t f2fs_bmap_compress(struct inode *inode, sector_t block)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_F2FS_FS_COMPRESSION
|
||||||
|
struct dnode_of_data dn;
|
||||||
|
sector_t start_idx, blknr = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
start_idx = round_down(block, F2FS_I(inode)->i_cluster_size);
|
||||||
|
|
||||||
|
set_new_dnode(&dn, inode, NULL, NULL, 0);
|
||||||
|
ret = f2fs_get_dnode_of_data(&dn, start_idx, LOOKUP_NODE);
|
||||||
|
if (ret)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (dn.data_blkaddr != COMPRESS_ADDR) {
|
||||||
|
dn.ofs_in_node += block - start_idx;
|
||||||
|
blknr = f2fs_data_blkaddr(&dn);
|
||||||
|
if (!__is_valid_data_blkaddr(blknr))
|
||||||
|
blknr = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
f2fs_put_dnode(&dn);
|
||||||
|
|
||||||
|
return blknr;
|
||||||
|
#else
|
||||||
|
return -EOPNOTSUPP;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
|
static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
|
||||||
{
|
{
|
||||||
struct inode *inode = mapping->host;
|
struct inode *inode = mapping->host;
|
||||||
|
@ -3677,6 +3708,9 @@ static sector_t f2fs_bmap(struct address_space *mapping, sector_t block)
|
||||||
if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
|
if (mapping_tagged(mapping, PAGECACHE_TAG_DIRTY))
|
||||||
filemap_write_and_wait(mapping);
|
filemap_write_and_wait(mapping);
|
||||||
|
|
||||||
|
if (f2fs_compressed_file(inode))
|
||||||
|
return f2fs_bmap_compress(inode, block);
|
||||||
|
|
||||||
return generic_block_bmap(mapping, block, get_data_block_bmap);
|
return generic_block_bmap(mapping, block, get_data_block_bmap);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue