Message ID | 20220630160130.2550001-4-hch@lst.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [1/4] btrfs: simplify the pending I/O counting in struct compressed_bio | expand |
On 30.06.22 г. 19:01 ч., Christoph Hellwig wrote: > Just derive it from the btrfs_bio now that ->file_offset is always valid. > Also make the function available outside of inode.c as we'll need that > soon. > > Signed-off-by: Christoph Hellwig <hch@lst.de> > Reviewed-by: Boris Burkov <boris@bur.io> > --- > fs/btrfs/ctree.h | 2 ++ > fs/btrfs/inode.c | 22 +++++++++------------- > 2 files changed, 11 insertions(+), 13 deletions(-) > > diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h > index 4e2569f84aabc..164f54e6aa447 100644 > --- a/fs/btrfs/ctree.h > +++ b/fs/btrfs/ctree.h > @@ -3293,6 +3293,8 @@ int btrfs_check_sector_csum(struct btrfs_fs_info *fs_info, struct page *page, > unsigned int btrfs_verify_data_csum(struct btrfs_bio *bbio, > u32 bio_offset, struct page *page, > u64 start, u64 end); > +int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, u32 bio_offset, > + struct page *page, u32 pgoff); > struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode, > u64 start, u64 len); > noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, > diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c > index a627b2af9e243..429428fde4a88 100644 > --- a/fs/btrfs/inode.c > +++ b/fs/btrfs/inode.c > @@ -3396,20 +3396,18 @@ int btrfs_check_sector_csum(struct btrfs_fs_info *fs_info, struct page *page, > /* > * check_data_csum - verify checksum of one sector of uncompressed data > * @inode: inode > - * @io_bio: btrfs_io_bio which contains the csum > + * @bbio: btrfs_io_bio which contains the csum > * @bio_offset: offset to the beginning of the bio (in bytes) > * @page: page where is the data to be verified > * @pgoff: offset inside the page > - * @start: logical offset in the file > * > * The length of such check is always one sector size. > * > * When csum mismatch is detected, we will also report the error and fill the > * corrupted range with zero. (Thus it needs the extra parameters) > */ > -static int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, > - u32 bio_offset, struct page *page, u32 pgoff, > - u64 start) > +int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, u32 bio_offset, > + struct page *page, u32 pgoff) nit: The removal of the static could be tucked into the next patch as that's where it's being used for the first time. <snip>
On Tue, Jul 05, 2022 at 06:35:59PM +0300, Nikolay Borisov wrote: >> +int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, u32 bio_offset, >> + struct page *page, u32 pgoff) > > nit: The removal of the static could be tucked into the next patch as > that's where it's being used for the first time. I can do that if is generally preferred, but this version causes less churn, especially with the annoying btrfs style of the variable prototype continuation indentation.
diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 4e2569f84aabc..164f54e6aa447 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -3293,6 +3293,8 @@ int btrfs_check_sector_csum(struct btrfs_fs_info *fs_info, struct page *page, unsigned int btrfs_verify_data_csum(struct btrfs_bio *bbio, u32 bio_offset, struct page *page, u64 start, u64 end); +int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, u32 bio_offset, + struct page *page, u32 pgoff); struct extent_map *btrfs_get_extent_fiemap(struct btrfs_inode *inode, u64 start, u64 len); noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index a627b2af9e243..429428fde4a88 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -3396,20 +3396,18 @@ int btrfs_check_sector_csum(struct btrfs_fs_info *fs_info, struct page *page, /* * check_data_csum - verify checksum of one sector of uncompressed data * @inode: inode - * @io_bio: btrfs_io_bio which contains the csum + * @bbio: btrfs_io_bio which contains the csum * @bio_offset: offset to the beginning of the bio (in bytes) * @page: page where is the data to be verified * @pgoff: offset inside the page - * @start: logical offset in the file * * The length of such check is always one sector size. * * When csum mismatch is detected, we will also report the error and fill the * corrupted range with zero. (Thus it needs the extra parameters) */ -static int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, - u32 bio_offset, struct page *page, u32 pgoff, - u64 start) +int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, u32 bio_offset, + struct page *page, u32 pgoff) { struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb); u32 len = fs_info->sectorsize; @@ -3425,8 +3423,9 @@ static int check_data_csum(struct inode *inode, struct btrfs_bio *bbio, return 0; zeroit: - btrfs_print_data_csum_error(BTRFS_I(inode), start, csum, csum_expected, - bbio->mirror_num); + btrfs_print_data_csum_error(BTRFS_I(inode), + bbio->file_offset + bio_offset, + csum, csum_expected, bbio->mirror_num); if (bbio->device) btrfs_dev_stat_inc_and_print(bbio->device, BTRFS_DEV_STAT_CORRUPTION_ERRS); @@ -3495,8 +3494,7 @@ unsigned int btrfs_verify_data_csum(struct btrfs_bio *bbio, EXTENT_NODATASUM); continue; } - ret = check_data_csum(inode, bbio, bio_offset, page, pg_off, - page_offset(page) + pg_off); + ret = check_data_csum(inode, bbio, bio_offset, page, pg_off); if (ret < 0) { const int nr_bit = (pg_off - offset_in_page(start)) >> root->fs_info->sectorsize_bits; @@ -7946,7 +7944,7 @@ static blk_status_t btrfs_check_read_dio_bio(struct btrfs_dio_private *dip, if (uptodate && (!csum || !check_data_csum(inode, bbio, offset, bv.bv_page, - bv.bv_offset, start))) { + bv.bv_offset))) { clean_io_failure(fs_info, failure_tree, io_tree, start, bv.bv_page, btrfs_ino(BTRFS_I(inode)), bv.bv_offset); @@ -10324,7 +10322,6 @@ static blk_status_t btrfs_encoded_read_verify_csum(struct btrfs_bio *bbio) u32 sectorsize = fs_info->sectorsize; struct bio_vec *bvec; struct bvec_iter_all iter_all; - u64 start = priv->file_offset; u32 bio_offset = 0; if (priv->skip_csum || !uptodate) @@ -10338,9 +10335,8 @@ static blk_status_t btrfs_encoded_read_verify_csum(struct btrfs_bio *bbio) for (i = 0; i < nr_sectors; i++) { ASSERT(pgoff < PAGE_SIZE); if (check_data_csum(&inode->vfs_inode, bbio, bio_offset, - bvec->bv_page, pgoff, start)) + bvec->bv_page, pgoff)) return BLK_STS_IOERR; - start += sectorsize; bio_offset += sectorsize; pgoff += sectorsize; }