@@ -504,9 +504,9 @@ int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
size_t num_pages, loff_t pos, size_t write_bytes,
struct extent_state **cached)
{
- struct btrfs_fs_info *fs_info = inode->root->fs_info;
int err = 0;
int i;
+ u32 blocksize = PAGE_SIZE;
u64 num_bytes;
u64 start_pos;
u64 end_of_last_block;
@@ -514,9 +514,8 @@ int btrfs_dirty_pages(struct btrfs_inode *inode, struct page **pages,
loff_t isize = i_size_read(&inode->vfs_inode);
unsigned int extra_bits = 0;
- start_pos = pos & ~((u64) fs_info->sectorsize - 1);
- num_bytes = round_up(write_bytes + pos - start_pos,
- fs_info->sectorsize);
+ start_pos = round_down(pos, blocksize);
+ num_bytes = round_up(write_bytes + pos - start_pos, blocksize);
end_of_last_block = start_pos + num_bytes - 1;
Currently btrfs_dirty_pages() follows sector size to mark extent io tree, but since we currently don't follow subpage data writeback, this could cause extra problem for subpage support. Change it to do page alignement. Signed-off-by: Qu Wenruo <wqu@suse.com> --- fs/btrfs/file.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)