On Mon, Feb 22, 2021 at 02:33:54PM +0800, Qu Wenruo wrote:
> +static void end_bio_subpage_eb_writepage(struct btrfs_fs_info *fs_info,
> + struct bio *bio)
> +{
> + struct bio_vec *bvec;
> + struct bvec_iter_all iter_all;
> +
> + ASSERT(!bio_flagged(bio, BIO_CLONED));
> + bio_for_each_segment_all(bvec, bio, iter_all) {
> + struct page *page = bvec->bv_page;
> + u64 bvec_start = page_offset(page) + bvec->bv_offset;
> + u64 bvec_end = bvec_start + bvec->bv_len - 1;
> + u64 cur_bytenr = bvec_start;
> +
> + ASSERT(IS_ALIGNED(bvec->bv_len, fs_info->nodesize));
> +
> + /* Iterate through all extent buffers in the range */
> + while (cur_bytenr <= bvec_end) {
> + struct extent_buffer *eb;
> + int done;
> +
> + /*
> + * Here we can't use find_extent_buffer(), as it may
> + * try to lock eb->refs_lock, which is not safe in
> endio
Please make sure you don't leave whitespace damage in newly added code,
'git am' then fails to apply the patches and I need to fix it manually.
warning: 1 line adds whitespace errors.
*
* You have some suspicious patch lines:
*
* In fs/btrfs/extent_io.c
* trailing whitespace (line 4090)
fs/btrfs/extent_io.c:4090: * try to lock eb->refs_lock,
which is not safe in endio