]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
btrfs: only require sector size alignment for end_bio_extent_writepage()
authorQu Wenruo <wqu@suse.com>
Mon, 31 May 2021 08:50:40 +0000 (16:50 +0800)
committerDavid Sterba <dsterba@suse.com>
Tue, 1 Jun 2021 19:00:04 +0000 (21:00 +0200)
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.

Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/extent_io.c

index 7d0448314c43cb34a58c69ae84d78121c6d3c768..2d3a38f9fe0e02a0d8d12ca4396ce0ad7939015b 100644 (file)
@@ -2824,25 +2824,20 @@ static void end_bio_extent_writepage(struct bio *bio)
                struct page *page = bvec->bv_page;
                struct inode *inode = page->mapping->host;
                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
-                * in a page fails to read, blk_update_request() will
-                * advance bv_offset and adjust bv_len to compensate.
-                * Print a warning for nonzero offsets, and an error
-                * if they don't add up to a full page.  */
-               if (bvec->bv_offset || bvec->bv_len != PAGE_SIZE) {
-                       if (bvec->bv_offset + bvec->bv_len != PAGE_SIZE)
-                               btrfs_err(fs_info,
-                                  "partial page write in btrfs with offset %u and length %u",
-                                       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);
-               }
+               /* Our read/write should always be sector aligned. */
+               if (!IS_ALIGNED(bvec->bv_offset, sectorsize))
+                       btrfs_err(fs_info,
+               "partial page write in btrfs with offset %u and length %u",
+                                 bvec->bv_offset, bvec->bv_len);
+               else if (!IS_ALIGNED(bvec->bv_len, sectorsize))
+                       btrfs_info(fs_info,
+               "incomplete page write with offset %u and length %u",
+                                  bvec->bv_offset, bvec->bv_len);
 
-               start = page_offset(page);
-               end = start + bvec->bv_offset + bvec->bv_len - 1;
+               start = page_offset(page) + bvec->bv_offset;
+               end = start + bvec->bv_len - 1;
 
                if (first_bvec) {
                        btrfs_record_physical_zoned(inode, start, bio);