All of lore.kernel.org
 help / color / mirror / Atom feed
From: Qu Wenruo <wqu@suse.com>
To: linux-btrfs@vger.kernel.org
Cc: Nikolay Borisov <nborisov@suse.com>
Subject: [PATCH v2 17/24] btrfs: file-item: remove the btrfs_find_ordered_sum() call in btrfs_lookup_bio_sums()
Date: Fri, 13 Nov 2020 20:51:42 +0800	[thread overview]
Message-ID: <20201113125149.140836-18-wqu@suse.com> (raw)
In-Reply-To: <20201113125149.140836-1-wqu@suse.com>

The function btrfs_lookup_bio_sums() is only called for read bios.
While btrfs_find_ordered_sum() is to search ordered extent sums, which
is only for write path.

This means to read a page we either:
- Submit read bio if it's no uptodate
  This means we only need to search csum tree for csums.

- The page is already uptodate
  It can be marked uptodate for previous read, or being marked dirty.
  As we always mark page uptodate for dirty page.
  In that case, we don't need to submit read bio at all, thus no need
  to search any csum.

So this patch will remove the btrfs_find_ordered_sum() call in
btrfs_lookup_bio_sums().
And since btrfs_lookup_bio_sums() is the only caller for
btrfs_find_ordered_sum(), also remove the implementation.

Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Signed-off-by: Qu Wenruo <wqu@suse.com>
---
 fs/btrfs/file-item.c    | 16 ++++++++++-----
 fs/btrfs/ordered-data.c | 44 -----------------------------------------
 fs/btrfs/ordered-data.h |  2 --
 3 files changed, 11 insertions(+), 51 deletions(-)

diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
index 73896eb9ead0..a3e328406d00 100644
--- a/fs/btrfs/file-item.c
+++ b/fs/btrfs/file-item.c
@@ -239,7 +239,8 @@ int btrfs_lookup_file_extent(struct btrfs_trans_handle *trans,
 }
 
 /**
- * btrfs_lookup_bio_sums - Look up checksums for a bio.
+ * btrfs_lookup_bio_sums - Look up checksums for a read bio.
+ *
  * @inode: inode that the bio is for.
  * @bio: bio to look up.
  * @offset: Unless (u64)-1, look up checksums for this offset in the file.
@@ -274,6 +275,15 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
 	if (!fs_info->csum_root || (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM))
 		return BLK_STS_OK;
 
+	/*
+	 * This function is only called for read bio.
+	 *
+	 * This means several things:
+	 * - All of our csums should only be in csum tree
+	 *   No ordered extents csums. As ordered extents are only for write
+	 *   path.
+	 */
+	ASSERT(bio_op(bio) == REQ_OP_READ);
 	path = btrfs_alloc_path();
 	if (!path)
 		return BLK_STS_RESOURCE;
@@ -324,10 +334,6 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
 
 		if (page_offsets)
 			offset = page_offset(bvec.bv_page) + bvec.bv_offset;
-		count = btrfs_find_ordered_sum(BTRFS_I(inode), offset,
-					       disk_bytenr, csum, nblocks);
-		if (count)
-			goto found;
 
 		if (!item || disk_bytenr < item_start_offset ||
 		    disk_bytenr >= item_last_offset) {
diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
index 0d61f9fefc02..79d366a36223 100644
--- a/fs/btrfs/ordered-data.c
+++ b/fs/btrfs/ordered-data.c
@@ -854,50 +854,6 @@ btrfs_lookup_first_ordered_extent(struct btrfs_inode *inode, u64 file_offset)
 	return entry;
 }
 
-/*
- * search the ordered extents for one corresponding to 'offset' and
- * try to find a checksum.  This is used because we allow pages to
- * be reclaimed before their checksum is actually put into the btree
- */
-int btrfs_find_ordered_sum(struct btrfs_inode *inode, u64 offset,
-			   u64 disk_bytenr, u8 *sum, int len)
-{
-	struct btrfs_fs_info *fs_info = inode->root->fs_info;
-	struct btrfs_ordered_sum *ordered_sum;
-	struct btrfs_ordered_extent *ordered;
-	struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
-	unsigned long num_sectors;
-	unsigned long i;
-	const u32 csum_size = fs_info->csum_size;
-	int index = 0;
-
-	ordered = btrfs_lookup_ordered_extent(inode, offset);
-	if (!ordered)
-		return 0;
-
-	spin_lock_irq(&tree->lock);
-	list_for_each_entry_reverse(ordered_sum, &ordered->list, list) {
-		if (disk_bytenr >= ordered_sum->bytenr &&
-		    disk_bytenr < ordered_sum->bytenr + ordered_sum->len) {
-			i = (disk_bytenr - ordered_sum->bytenr) >>
-			    fs_info->sectorsize_bits;
-			num_sectors = ordered_sum->len >> fs_info->sectorsize_bits;
-			num_sectors = min_t(int, len - index, num_sectors - i);
-			memcpy(sum + index, ordered_sum->sums + i * csum_size,
-			       num_sectors * csum_size);
-
-			index += (int)num_sectors * csum_size;
-			if (index == len)
-				goto out;
-			disk_bytenr += num_sectors * fs_info->sectorsize;
-		}
-	}
-out:
-	spin_unlock_irq(&tree->lock);
-	btrfs_put_ordered_extent(ordered);
-	return index;
-}
-
 /*
  * btrfs_flush_ordered_range - Lock the passed range and ensures all pending
  * ordered extents in it are run to completion.
diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h
index 367269effd6a..0bfa82b58e23 100644
--- a/fs/btrfs/ordered-data.h
+++ b/fs/btrfs/ordered-data.h
@@ -183,8 +183,6 @@ struct btrfs_ordered_extent *btrfs_lookup_ordered_range(
 		u64 len);
 void btrfs_get_ordered_extents_for_logging(struct btrfs_inode *inode,
 					   struct list_head *list);
-int btrfs_find_ordered_sum(struct btrfs_inode *inode, u64 offset,
-			   u64 disk_bytenr, u8 *sum, int len);
 u64 btrfs_wait_ordered_extents(struct btrfs_root *root, u64 nr,
 			       const u64 range_start, const u64 range_len);
 void btrfs_wait_ordered_roots(struct btrfs_fs_info *fs_info, u64 nr,
-- 
2.29.2


  parent reply	other threads:[~2020-11-13 12:52 UTC|newest]

Thread overview: 67+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-11-13 12:51 [PATCH v2 00/24] btrfs: preparation patches for subpage support Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 01/24] btrfs: tests: fix free space tree test failure on 64K page system Qu Wenruo
2020-11-17 11:53   ` Nikolay Borisov
2020-11-13 12:51 ` [PATCH v2 02/24] btrfs: extent-io-tests: remove invalid tests Qu Wenruo
2020-11-13 18:42   ` Josef Bacik
2020-11-19 21:08   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 03/24] btrfs: extent_io: replace extent_start/extent_len with better structure for end_bio_extent_readpage() Qu Wenruo
2020-11-13 19:13   ` Josef Bacik
2020-11-18 16:05   ` David Sterba
2020-11-18 23:49     ` Qu Wenruo
2020-11-19 20:30       ` David Sterba
2020-11-19 21:08   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 04/24] btrfs: extent_io: introduce helper to handle page status update in end_bio_extent_readpage() Qu Wenruo
2020-11-13 19:18   ` Josef Bacik
2020-11-18 20:27   ` David Sterba
2020-11-18 23:43     ` Qu Wenruo
2020-11-19 18:32       ` David Sterba
2020-11-19 21:08   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 05/24] btrfs: extent_io: extract the btree page submission code into its own helper function Qu Wenruo
2020-11-13 19:22   ` Josef Bacik
2020-11-18 20:04   ` David Sterba
2020-11-18 20:09   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 06/24] btrfs: remove the phy_offset parameter for btrfs_validate_metadata_buffer() Qu Wenruo
2020-11-19 21:09   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 07/24] btrfs: pass bio_offset to check_data_csum() directly Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 08/24] btrfs: inode: make btrfs_verify_data_csum() follow sector size Qu Wenruo
2020-11-13 19:43   ` Josef Bacik
2020-11-13 12:51 ` [PATCH v2 09/24] btrfs: extent_io: calculate inline extent buffer page size based on page size Qu Wenruo
2020-11-13 19:47   ` Josef Bacik
2020-11-14  0:11     ` Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 10/24] btrfs: introduce a helper to determine if the sectorsize is smaller than PAGE_SIZE Qu Wenruo
2020-11-16 22:51   ` David Sterba
2020-11-16 23:50     ` Qu Wenruo
2020-11-17  0:24       ` David Sterba
2020-11-13 12:51 ` [PATCH v2 11/24] btrfs: extent_io: don't allow tree block to cross page boundary for subpage support Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 12/24] btrfs: extent_io: update num_extent_pages() to support subpage sized extent buffer Qu Wenruo
2020-11-18 16:22   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 13/24] btrfs: handle sectorsize < PAGE_SIZE case for extent buffer accessors Qu Wenruo
2020-11-18 19:30   ` David Sterba
2020-11-18 19:38   ` David Sterba
2020-11-18 19:48   ` David Sterba
2020-11-24  6:20     ` Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 14/24] btrfs: disk-io: only clear EXTENT_LOCK bit for extent_invalidatepage() Qu Wenruo
2020-11-19 21:09   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 15/24] btrfs: extent-io: make type of extent_state::state to be at least 32 bits Qu Wenruo
2020-11-13 18:40   ` Josef Bacik
2020-11-18 16:11   ` David Sterba
2020-11-18 23:48     ` Qu Wenruo
2020-11-19  7:18       ` Nikolay Borisov
2020-11-19 21:09   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 16/24] btrfs: file-item: use nodesize to determine whether we need readahead for btrfs_lookup_bio_sums() Qu Wenruo
2020-11-19 21:09   ` David Sterba
2020-11-13 12:51 ` Qu Wenruo [this message]
2020-11-13 12:51 ` [PATCH v2 18/24] btrfs: file-item: refactor btrfs_lookup_bio_sums() to handle out-of-order bvecs Qu Wenruo
2020-11-18 16:27   ` David Sterba
2020-11-18 23:57     ` Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 19/24] btrfs: scrub: remove the anonymous structure from scrub_page Qu Wenruo
2020-11-18 19:00   ` David Sterba
2020-11-19 21:09   ` David Sterba
2020-11-13 12:51 ` [PATCH v2 20/24] btrfs: scrub: always allocate one full page for one sector for RAID56 Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 21/24] btrfs: scrub: support subpage tree block scrub Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 22/24] btrfs: scrub: support subpage data scrub Qu Wenruo
2020-11-18 16:29   ` David Sterba
2020-11-18 23:38     ` Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 23/24] btrfs: scrub: allow scrub to work with subpage sectorsize Qu Wenruo
2020-11-13 12:51 ` [PATCH v2 24/24] btrfs: extent_io: Use detach_page_private() for alloc_extent_buffer() Qu Wenruo
2020-11-13 20:05 ` [PATCH v2 00/24] btrfs: preparation patches for subpage support Josef Bacik

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=20201113125149.140836-18-wqu@suse.com \
    --to=wqu@suse.com \
    --cc=linux-btrfs@vger.kernel.org \
    --cc=nborisov@suse.com \
    /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.