All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH v3 03/18] btrfs: use correct bio size for error message in btrfs_end_dio_bio()
Date: Mon, 14 Mar 2022 17:07:16 +0800	[thread overview]
Message-ID: <1db2f7469f0304e897eacd2f9f9237d2e80f5d49.1647248613.git.wqu@suse.com> (raw)
In-Reply-To: <cover.1647248613.git.wqu@suse.com>

At endio time, bio->bi_iter is no longer valid (there are some cases
they are still valid, but never ensured).

Thus if we really want to get the full size of bio, we have to iterate
them.

In btrfs_end_dio_bio() when we hit error, we would grab bio size from
bi_iter which can be wrong.

Fix it by iterating the bvecs and calculate the bio size.

Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 fs/btrfs/inode.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index dded46291637..dbcb4ae9e06d 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -7866,12 +7866,19 @@ static void btrfs_end_dio_bio(struct bio *bio)
 	struct btrfs_dio_private *dip = bio->bi_private;
 	blk_status_t err = bio->bi_status;
 
-	if (err)
+	if (err) {
+		struct bvec_iter_all iter_all;
+		struct bio_vec *bvec;
+		u32 bi_size = 0;
+
+		bio_for_each_segment_all(bvec, bio, iter_all)
+			bi_size += bvec->bv_len;
+
 		btrfs_warn(BTRFS_I(dip->inode)->root->fs_info,
 			   "direct IO failed ino %llu rw %d,%u sector %#Lx len %u err no %d",
 			   btrfs_ino(BTRFS_I(dip->inode)), bio_op(bio),
-			   bio->bi_opf, bio->bi_iter.bi_sector,
-			   bio->bi_iter.bi_size, err);
+			   bio->bi_opf, bio->bi_iter.bi_sector, bi_size, err);
+	}
 
 	if (bio_op(bio) == REQ_OP_READ)
 		err = btrfs_check_read_dio_bio(dip, btrfs_bio(bio), !err);
-- 
2.35.1


  parent reply	other threads:[~2022-03-14  9:08 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-14  9:07 [PATCH v3 00/18] btrfs: split bio at btrfs_map_bio() time Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 01/18] btrfs: update an stale comment on btrfs_submit_bio_hook() Qu Wenruo
2022-03-15  7:43   ` Christoph Hellwig
2022-03-14  9:07 ` [PATCH v3 02/18] btrfs: save bio::bi_iter into btrfs_bio::iter before any endio Qu Wenruo
2022-03-14  9:07 ` Qu Wenruo [this message]
2022-03-14  9:07 ` [PATCH v3 04/18] btrfs: refactor btrfs_map_bio() Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 05/18] btrfs: move btrfs_bio_wq_end_io() calls into submit_stripe_bio() Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 06/18] btrfs: replace btrfs_dio_private::refs with btrfs_dio_private::pending_bytes Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 07/18] btrfs: introduce btrfs_bio_split() helper Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 08/18] btrfs: make data buffered read path to handle split bio properly Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 09/18] btrfs: make data buffered write endio function to be split bio compatible Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 10/18] btrfs: make metadata write endio functions " Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 11/18] btrfs: make dec_and_test_compressed_bio() " Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 12/18] btrfs: return proper mapped length for RAID56 profiles in __btrfs_map_block() Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 13/18] btrfs: allow btrfs_map_bio() to split bio according to chunk stripe boundaries Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 14/18] btrfs: remove buffered IO stripe boundary calculation Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 15/18] btrfs: remove stripe boundary calculation for compressed IO Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 16/18] btrfs: remove the stripe boundary calculation for direct IO Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 17/18] btrfs: remove the stripe boundary calcluation for encoded IO Qu Wenruo
2022-03-14  9:07 ` [PATCH v3 18/18] btrfs: unexport btrfs_get_io_geometry() Qu Wenruo
2022-03-22 15:44 ` [PATCH v3 00/18] btrfs: split bio at btrfs_map_bio() time Christoph Hellwig
2022-03-22 23:45   ` Qu Wenruo
2022-04-20 20:11     ` David Sterba
2022-04-20 23:04       ` Qu Wenruo
2022-04-21  5:28         ` Christoph Hellwig
2022-04-21  7:08           ` Qu Wenruo
2022-04-21  5:27       ` Christoph Hellwig

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1db2f7469f0304e897eacd2f9f9237d2e80f5d49.1647248613.git.wqu@suse.com \
    --to=wqu@suse.com \
    --cc=linux-btrfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.