diff options
Diffstat (limited to 'fs/btrfs/inode.c')
| -rw-r--r-- | fs/btrfs/inode.c | 18 | 
1 files changed, 9 insertions, 9 deletions
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 7cdf65be3707..a520775949a0 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -3099,11 +3099,13 @@ void btrfs_writepage_endio_finish_ordered(struct page *page, u64 start,   * @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.   */  static int check_data_csum(struct inode *inode, struct btrfs_io_bio *io_bio, -			   u32 bio_offset, struct page *page, u32 pgoff) +			   u32 bio_offset, struct page *page, u32 pgoff, +			   u64 start)  {  	struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);  	SHASH_DESC_ON_STACK(shash, fs_info->csum_shash); @@ -3130,8 +3132,8 @@ static int check_data_csum(struct inode *inode, struct btrfs_io_bio *io_bio,  	kunmap_atomic(kaddr);  	return 0;  zeroit: -	btrfs_print_data_csum_error(BTRFS_I(inode), page_offset(page) + pgoff, -				    csum, csum_expected, io_bio->mirror_num); +	btrfs_print_data_csum_error(BTRFS_I(inode), start, csum, csum_expected, +				    io_bio->mirror_num);  	if (io_bio->device)  		btrfs_dev_stat_inc_and_print(io_bio->device,  					     BTRFS_DEV_STAT_CORRUPTION_ERRS); @@ -3184,7 +3186,8 @@ int btrfs_verify_data_csum(struct btrfs_io_bio *io_bio, u32 bio_offset,  	     pg_off += sectorsize, bio_offset += sectorsize) {  		int ret; -		ret = check_data_csum(inode, io_bio, bio_offset, page, pg_off); +		ret = check_data_csum(inode, io_bio, bio_offset, page, pg_off, +				      page_offset(page) + pg_off);  		if (ret < 0)  			return -EIO;  	} @@ -7910,7 +7913,8 @@ static blk_status_t btrfs_check_read_dio_bio(struct inode *inode,  			ASSERT(pgoff < PAGE_SIZE);  			if (uptodate &&  			    (!csum || !check_data_csum(inode, io_bio, -					bio_offset, bvec.bv_page, pgoff))) { +						       bio_offset, bvec.bv_page, +						       pgoff, start))) {  				clean_io_failure(fs_info, failure_tree, io_tree,  						 start, bvec.bv_page,  						 btrfs_ino(BTRFS_I(inode)), @@ -8169,10 +8173,6 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,  		bio->bi_end_io = btrfs_end_dio_bio;  		btrfs_io_bio(bio)->logical = file_offset; -		WARN_ON_ONCE(write && btrfs_is_zoned(fs_info) && -			     fs_info->max_zone_append_size && -			     bio_op(bio) != REQ_OP_ZONE_APPEND); -  		if (bio_op(bio) == REQ_OP_ZONE_APPEND) {  			status = extract_ordered_extent(BTRFS_I(inode), bio,  							file_offset);  |