btrfs: only require sector size alignment for end_bio_extent_writepage()

Just like read page, for subpage support we only require sector size
alignment.

So change the error message condition to only require sector alignment.

This should not affect existing code, as for regular sectorsize ==
PAGE_SIZE case, we are still requiring page alignment.

Tested-by: Ritesh Harjani <riteshh@linux.ibm.com> # [ppc64]
Tested-by: Anand Jain <anand.jain@oracle.com> # [aarch64]
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
Qu Wenruo 2021-05-31 16:50:40 +08:00 committed by David Sterba
parent 60e2d25500
commit 321a02db32
1 changed files with 12 additions and 17 deletions

View File

@ -2824,25 +2824,20 @@ static void end_bio_extent_writepage(struct bio *bio)
struct page *page = bvec->bv_page; struct page *page = bvec->bv_page;
struct inode *inode = page->mapping->host; struct inode *inode = page->mapping->host;
struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
const u32 sectorsize = fs_info->sectorsize;
/* We always issue full-page reads, but if some block /* Our read/write should always be sector aligned. */
* in a page fails to read, blk_update_request() will if (!IS_ALIGNED(bvec->bv_offset, sectorsize))
* advance bv_offset and adjust bv_len to compensate. btrfs_err(fs_info,
* Print a warning for nonzero offsets, and an error "partial page write in btrfs with offset %u and length %u",
* if they don't add up to a full page. */ bvec->bv_offset, bvec->bv_len);
if (bvec->bv_offset || bvec->bv_len != PAGE_SIZE) { else if (!IS_ALIGNED(bvec->bv_len, sectorsize))
if (bvec->bv_offset + bvec->bv_len != PAGE_SIZE) btrfs_info(fs_info,
btrfs_err(fs_info, "incomplete page write with offset %u and length %u",
"partial page write in btrfs with offset %u and length %u", bvec->bv_offset, bvec->bv_len);
bvec->bv_offset, bvec->bv_len);
else
btrfs_info(fs_info,
"incomplete page write in btrfs with offset %u and length %u",
bvec->bv_offset, bvec->bv_len);
}
start = page_offset(page); start = page_offset(page) + bvec->bv_offset;
end = start + bvec->bv_offset + bvec->bv_len - 1; end = start + bvec->bv_len - 1;
if (first_bvec) { if (first_bvec) {
btrfs_record_physical_zoned(inode, start, bio); btrfs_record_physical_zoned(inode, start, bio);