linux-btrfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Christoph Hellwig <hch@lst.de>
To: linux-btrfs@vger.kernel.org
Subject: [PATCH 9/9] btrfs: only check bio size to see if a repair bio should have the failfast flag
Date: Wed, 16 Nov 2016 13:52:16 +0100	[thread overview]
Message-ID: <1479300736-9724-10-git-send-email-hch@lst.de> (raw)
In-Reply-To: <1479300736-9724-1-git-send-email-hch@lst.de>

The number of pages in a bio is a bad indicatator for the number of
splits lower levels could do, and with the multipage bio_vec work even
that measure goes away and will become a number of segments of physically
contiguous areas instead.  Check the total bio size vs the sector size
instead, which gives us an indication without any false negatives,
although the false positive rate might increase a bit.

Signed-off-by: Christoph Hellwig <hch@lst.de>
---
 fs/btrfs/extent_io.c | 4 ++--
 fs/btrfs/inode.c     | 4 +---
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c
index ea9ade7..a05fc41 100644
--- a/fs/btrfs/extent_io.c
+++ b/fs/btrfs/extent_io.c
@@ -2296,7 +2296,7 @@ int btrfs_check_repairable(struct inode *inode, struct bio *failed_bio,
 	 *	a) deliver good data to the caller
 	 *	b) correct the bad sectors on disk
 	 */
-	if (failed_bio->bi_vcnt > 1) {
+	if (failed_bio->bi_iter.bi_size > BTRFS_I(inode)->root->sectorsize) {
 		/*
 		 * to fulfill b), we need to know the exact failing sectors, as
 		 * we don't want to rewrite any more than the failed ones. thus,
@@ -2403,7 +2403,7 @@ static int bio_readpage_error(struct bio *failed_bio, u64 phy_offset,
 		return -EIO;
 	}
 
-	if (failed_bio->bi_vcnt > 1)
+	if (failed_bio->bi_iter.bi_size > BTRFS_I(inode)->root->sectorsize)
 		read_mode = READ_SYNC | REQ_FAILFAST_DEV;
 	else
 		read_mode = READ_SYNC;
diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
index 3f09cb6..54afe41 100644
--- a/fs/btrfs/inode.c
+++ b/fs/btrfs/inode.c
@@ -7933,9 +7933,7 @@ static int dio_read_error(struct inode *inode, struct bio *failed_bio,
 		return -EIO;
 	}
 
-	if ((failed_bio->bi_vcnt > 1)
-		|| (failed_bio->bi_io_vec->bv_len
-			> BTRFS_I(inode)->root->sectorsize))
+	if (failed_bio->bi_iter.bi_size > BTRFS_I(inode)->root->sectorsize)
 		read_mode = READ_SYNC | REQ_FAILFAST_DEV;
 	else
 		read_mode = READ_SYNC;
-- 
2.1.4


  parent reply	other threads:[~2016-11-16 12:52 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-16 12:52 don't poke into bio internals Christoph Hellwig
2016-11-16 12:52 ` [PATCH 1/9] btrfs: use bio iterators for the decompression handlers Christoph Hellwig
2016-11-19  1:29   ` Liu Bo
2016-11-22  9:38     ` Christoph Hellwig
2016-11-22 20:32       ` Liu Bo
2016-11-16 12:52 ` [PATCH 2/9] btrfs: don't access the bio directly in the raid5/6 code Christoph Hellwig
2016-11-18 19:05   ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 3/9] " Christoph Hellwig
2016-11-18 19:34   ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 4/9] btrfs: don't access the bio directly in btrfs_csum_one_bio Christoph Hellwig
2016-11-18 19:39   ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 5/9] btrfs: use bi_size Christoph Hellwig
2016-11-18 19:48   ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 6/9] btrfs: calculate end of bio offset properly Christoph Hellwig
2016-11-18 20:04   ` Omar Sandoval
2016-11-22  9:42     ` Christoph Hellwig
2016-11-22 18:58       ` Omar Sandoval
2016-11-23  4:21         ` Anand Jain
2016-11-23  4:21           ` Omar Sandoval
2016-11-23  4:32             ` Anand Jain
2016-11-23  4:47               ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 7/9] btrfs: refactor __btrfs_lookup_bio_sums to use bio_for_each_segment_all Christoph Hellwig
2016-11-18 20:31   ` Omar Sandoval
2016-11-16 12:52 ` [PATCH 8/9] btrfs: use bio_for_each_segment_all in __btrfsic_submit_bio Christoph Hellwig
2016-11-18 20:36   ` Omar Sandoval
2016-11-16 12:52 ` Christoph Hellwig [this message]
2016-11-16 16:19 ` don't poke into bio internals David Sterba

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=1479300736-9724-10-git-send-email-hch@lst.de \
    --to=hch@lst.de \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).