Commit 7aab8b32 authored by Christoph Hellwig's avatar Christoph Hellwig Committed by David Sterba

btrfs: move btrfs_readpage to extent_io.c

Keep btrfs_readpage next to btrfs_do_readpage and the other address
space operations.  This allows to keep submit_one_bio and
struct btrfs_bio_ctrl file local in extent_io.c.
Reviewed-by: default avatarNikolay Borisov <nborisov@suse.com>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent d201238c
...@@ -3313,7 +3313,6 @@ void btrfs_split_delalloc_extent(struct inode *inode, ...@@ -3313,7 +3313,6 @@ void btrfs_split_delalloc_extent(struct inode *inode,
struct extent_state *orig, u64 split); struct extent_state *orig, u64 split);
void btrfs_set_range_writeback(struct btrfs_inode *inode, u64 start, u64 end); void btrfs_set_range_writeback(struct btrfs_inode *inode, u64 start, u64 end);
vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf); vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf);
int btrfs_readpage(struct file *file, struct page *page);
void btrfs_evict_inode(struct inode *inode); void btrfs_evict_inode(struct inode *inode);
int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc); int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc);
struct inode *btrfs_alloc_inode(struct super_block *sb); struct inode *btrfs_alloc_inode(struct super_block *sb);
......
...@@ -137,6 +137,17 @@ struct tree_entry { ...@@ -137,6 +137,17 @@ struct tree_entry {
struct rb_node rb_node; struct rb_node rb_node;
}; };
/*
* Structure to record info about the bio being assembled, and other info like
* how many bytes are there before stripe/ordered extent boundary.
*/
struct btrfs_bio_ctrl {
struct bio *bio;
unsigned long bio_flags;
u32 len_to_stripe_boundary;
u32 len_to_oe_boundary;
};
struct extent_page_data { struct extent_page_data {
struct btrfs_bio_ctrl bio_ctrl; struct btrfs_bio_ctrl bio_ctrl;
/* tells writepage not to lock the state bits for this range /* tells writepage not to lock the state bits for this range
...@@ -166,7 +177,7 @@ static int add_extent_changeset(struct extent_state *state, u32 bits, ...@@ -166,7 +177,7 @@ static int add_extent_changeset(struct extent_state *state, u32 bits,
return ret; return ret;
} }
void submit_one_bio(struct bio *bio, int mirror_num, unsigned long bio_flags) static void submit_one_bio(struct bio *bio, int mirror_num, unsigned long bio_flags)
{ {
struct extent_io_tree *tree = bio->bi_private; struct extent_io_tree *tree = bio->bi_private;
...@@ -3604,7 +3615,7 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset, ...@@ -3604,7 +3615,7 @@ __get_extent_map(struct inode *inode, struct page *page, size_t pg_offset,
* XXX JDM: This needs looking at to ensure proper page locking * XXX JDM: This needs looking at to ensure proper page locking
* return 0 on success, otherwise return error * return 0 on success, otherwise return error
*/ */
int btrfs_do_readpage(struct page *page, struct extent_map **em_cached, static int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
struct btrfs_bio_ctrl *bio_ctrl, struct btrfs_bio_ctrl *bio_ctrl,
unsigned int read_flags, u64 *prev_em_start) unsigned int read_flags, u64 *prev_em_start)
{ {
...@@ -3793,6 +3804,26 @@ int btrfs_do_readpage(struct page *page, struct extent_map **em_cached, ...@@ -3793,6 +3804,26 @@ int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
return ret; return ret;
} }
int btrfs_readpage(struct file *file, struct page *page)
{
struct btrfs_inode *inode = BTRFS_I(page->mapping->host);
u64 start = page_offset(page);
u64 end = start + PAGE_SIZE - 1;
struct btrfs_bio_ctrl bio_ctrl = { 0 };
int ret;
btrfs_lock_and_flush_ordered_range(inode, start, end, NULL);
ret = btrfs_do_readpage(page, NULL, &bio_ctrl, 0, NULL);
/*
* If btrfs_do_readpage() failed we will want to submit the assembled
* bio to do the cleanup.
*/
if (bio_ctrl.bio)
submit_one_bio(bio_ctrl.bio, 0, bio_ctrl.bio_flags);
return ret;
}
static inline void contiguous_readpages(struct page *pages[], int nr_pages, static inline void contiguous_readpages(struct page *pages[], int nr_pages,
u64 start, u64 end, u64 start, u64 end,
struct extent_map **em_cached, struct extent_map **em_cached,
......
...@@ -102,17 +102,6 @@ struct extent_buffer { ...@@ -102,17 +102,6 @@ struct extent_buffer {
#endif #endif
}; };
/*
* Structure to record info about the bio being assembled, and other info like
* how many bytes are there before stripe/ordered extent boundary.
*/
struct btrfs_bio_ctrl {
struct bio *bio;
unsigned long bio_flags;
u32 len_to_stripe_boundary;
u32 len_to_oe_boundary;
};
/* /*
* Structure to record how many bytes and which ranges are set/cleared * Structure to record how many bytes and which ranges are set/cleared
*/ */
...@@ -178,10 +167,7 @@ typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode, ...@@ -178,10 +167,7 @@ typedef struct extent_map *(get_extent_t)(struct btrfs_inode *inode,
int try_release_extent_mapping(struct page *page, gfp_t mask); int try_release_extent_mapping(struct page *page, gfp_t mask);
int try_release_extent_buffer(struct page *page); int try_release_extent_buffer(struct page *page);
void submit_one_bio(struct bio *bio, int mirror_num, unsigned long bio_flags); int btrfs_readpage(struct file *file, struct page *page);
int btrfs_do_readpage(struct page *page, struct extent_map **em_cached,
struct btrfs_bio_ctrl *bio_ctrl,
unsigned int read_flags, u64 *prev_em_start);
int extent_write_full_page(struct page *page, struct writeback_control *wbc); int extent_write_full_page(struct page *page, struct writeback_control *wbc);
int extent_write_locked_range(struct inode *inode, u64 start, u64 end); int extent_write_locked_range(struct inode *inode, u64 start, u64 end);
int extent_writepages(struct address_space *mapping, int extent_writepages(struct address_space *mapping,
......
...@@ -8136,26 +8136,6 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, ...@@ -8136,26 +8136,6 @@ static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo,
return extent_fiemap(BTRFS_I(inode), fieinfo, start, len); return extent_fiemap(BTRFS_I(inode), fieinfo, start, len);
} }
int btrfs_readpage(struct file *file, struct page *page)
{
struct btrfs_inode *inode = BTRFS_I(page->mapping->host);
u64 start = page_offset(page);
u64 end = start + PAGE_SIZE - 1;
struct btrfs_bio_ctrl bio_ctrl = { 0 };
int ret;
btrfs_lock_and_flush_ordered_range(inode, start, end, NULL);
ret = btrfs_do_readpage(page, NULL, &bio_ctrl, 0, NULL);
/*
* If btrfs_do_readpage() failed we will want to submit the assembled
* bio to do the cleanup.
*/
if (bio_ctrl.bio)
submit_one_bio(bio_ctrl.bio, 0, bio_ctrl.bio_flags);
return ret;
}
static int btrfs_writepage(struct page *page, struct writeback_control *wbc) static int btrfs_writepage(struct page *page, struct writeback_control *wbc)
{ {
struct inode *inode = page->mapping->host; struct inode *inode = page->mapping->host;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment