mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 12:42:02 +00:00
f2fs: use extent cache to optimize f2fs_reserve_block
In some cases, we only need the block address when we call f2fs_reserve_block, other fields of struct dnode_of_data aren't necessary. We can try extent cache first for such cases in order to speed up the process. Signed-off-by: Fan li <fanofcode.li@samsung.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
This commit is contained in:
parent
e90c2d2850
commit
759af1c9c1
@ -263,6 +263,19 @@ int f2fs_reserve_block(struct dnode_of_data *dn, pgoff_t index)
|
||||
return err;
|
||||
}
|
||||
|
||||
int f2fs_get_block(struct dnode_of_data *dn, pgoff_t index)
|
||||
{
|
||||
struct extent_info ei;
|
||||
struct inode *inode = dn->inode;
|
||||
|
||||
if (f2fs_lookup_extent_cache(inode, index, &ei)) {
|
||||
dn->data_blkaddr = ei.blk + index - ei.fofs;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return f2fs_reserve_block(dn, index);
|
||||
}
|
||||
|
||||
struct page *get_read_data_page(struct inode *inode, pgoff_t index, int rw)
|
||||
{
|
||||
struct address_space *mapping = inode->i_mapping;
|
||||
@ -1383,7 +1396,8 @@ repeat:
|
||||
if (err)
|
||||
goto put_fail;
|
||||
}
|
||||
err = f2fs_reserve_block(&dn, index);
|
||||
|
||||
err = f2fs_get_block(&dn, index);
|
||||
if (err)
|
||||
goto put_fail;
|
||||
put_next:
|
||||
|
@ -1768,6 +1768,7 @@ int f2fs_submit_page_bio(struct f2fs_io_info *);
|
||||
void f2fs_submit_page_mbio(struct f2fs_io_info *);
|
||||
void set_data_blkaddr(struct dnode_of_data *);
|
||||
int reserve_new_block(struct dnode_of_data *);
|
||||
int f2fs_get_block(struct dnode_of_data *, pgoff_t);
|
||||
int f2fs_reserve_block(struct dnode_of_data *, pgoff_t);
|
||||
struct page *get_read_data_page(struct inode *, pgoff_t, int);
|
||||
struct page *find_data_page(struct inode *, pgoff_t);
|
||||
|
Loading…
Reference in New Issue
Block a user