From: Qu Wenruo <quwenruo.btrfs@gmx.com>
To: Josef Bacik <josef@toxicpanda.com>,
linux-btrfs@vger.kernel.org, kernel-team@fb.com
Subject: Re: [PATCH 2/5] btrfs: push the NODATASUM check into btrfs_lookup_bio_sums
Date: Fri, 25 Sep 2020 08:39:53 +0800 [thread overview]
Message-ID: <a3d17402-7e3d-7fb4-9831-2db5be18d5b2@gmx.com> (raw)
In-Reply-To: <bdf1bf5c65679fdf39021e16a242094acd71b270.1600961206.git.josef@toxicpanda.com>
[-- Attachment #1.1: Type: text/plain, Size: 4176 bytes --]
On 2020/9/24 下午11:32, Josef Bacik wrote:
> When we move to being able to handle NULL csum_roots it'll be cleaner to
> just check in btrfs_lookup_bio_sums instead of at all of the caller
> locations, so push the NODATASUM check into it as well so it's unified.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
But an off-topic question inlined below:
> ---
> fs/btrfs/compression.c | 14 +++++---------
> fs/btrfs/file-item.c | 3 +++
> fs/btrfs/inode.c | 12 +++++++++---
> 3 files changed, 17 insertions(+), 12 deletions(-)
>
> diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c
> index eeface30facd..7e1eb57b923c 100644
> --- a/fs/btrfs/compression.c
> +++ b/fs/btrfs/compression.c
> @@ -722,11 +722,9 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
> */
> refcount_inc(&cb->pending_bios);
>
> - if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
> - ret = btrfs_lookup_bio_sums(inode, comp_bio,
> - (u64)-1, sums);
> - BUG_ON(ret); /* -ENOMEM */
Is it really possible to have compressed extent without data csum?
Won't nodatacsum disable compression?
Or are we just here to handle some old compressed but not csumed data?
Thanks,
Qu
> - }
> + ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1,
> + sums);
> + BUG_ON(ret); /* -ENOMEM */
>
> nr_sectors = DIV_ROUND_UP(comp_bio->bi_iter.bi_size,
> fs_info->sectorsize);
> @@ -751,10 +749,8 @@ blk_status_t btrfs_submit_compressed_read(struct inode *inode, struct bio *bio,
> ret = btrfs_bio_wq_end_io(fs_info, comp_bio, BTRFS_WQ_ENDIO_DATA);
> BUG_ON(ret); /* -ENOMEM */
>
> - if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)) {
> - ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums);
> - BUG_ON(ret); /* -ENOMEM */
> - }
> + ret = btrfs_lookup_bio_sums(inode, comp_bio, (u64)-1, sums);
> + BUG_ON(ret); /* -ENOMEM */
>
> ret = btrfs_map_bio(fs_info, comp_bio, mirror_num);
> if (ret) {
> diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c
> index 8f4f2bd6d9b9..8083d71d6af6 100644
> --- a/fs/btrfs/file-item.c
> +++ b/fs/btrfs/file-item.c
> @@ -272,6 +272,9 @@ blk_status_t btrfs_lookup_bio_sums(struct inode *inode, struct bio *bio,
> int count = 0;
> u16 csum_size = btrfs_super_csum_size(fs_info->super_copy);
>
> + if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM)
> + return BLK_STS_OK;
> +
> path = btrfs_alloc_path();
> if (!path)
> return BLK_STS_RESOURCE;
> diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c
> index d526833b5ec0..d262944c4297 100644
> --- a/fs/btrfs/inode.c
> +++ b/fs/btrfs/inode.c
> @@ -2202,7 +2202,12 @@ blk_status_t btrfs_submit_data_bio(struct inode *inode, struct bio *bio,
> mirror_num,
> bio_flags);
> goto out;
> - } else if (!skip_sum) {
> + } else {
> + /*
> + * Lookup bio sums does extra checks around whether we
> + * need to csum or not, which is why we ignore skip_sum
> + * here.
> + */
> ret = btrfs_lookup_bio_sums(inode, bio, (u64)-1, NULL);
> if (ret)
> goto out;
> @@ -7781,7 +7786,6 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
> struct bio *dio_bio, loff_t file_offset)
> {
> const bool write = (bio_op(dio_bio) == REQ_OP_WRITE);
> - const bool csum = !(BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM);
> struct btrfs_fs_info *fs_info = btrfs_sb(inode->i_sb);
> const bool raid56 = (btrfs_data_alloc_profile(fs_info) &
> BTRFS_BLOCK_GROUP_RAID56_MASK);
> @@ -7808,10 +7812,12 @@ static blk_qc_t btrfs_submit_direct(struct inode *inode, struct iomap *iomap,
> return BLK_QC_T_NONE;
> }
>
> - if (!write && csum) {
> + if (!write) {
> /*
> * Load the csums up front to reduce csum tree searches and
> * contention when submitting bios.
> + *
> + * If we have csums disabled this will do nothing.
> */
> status = btrfs_lookup_bio_sums(inode, dio_bio, file_offset,
> dip->csums);
>
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2020-09-25 0:40 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-09-24 15:32 [PATCH 0/5] New rescue mount options Josef Bacik
2020-09-24 15:32 ` [PATCH 1/5] btrfs: unify the ro checking for " Josef Bacik
2020-09-25 0:36 ` Qu Wenruo
2020-09-28 12:37 ` Johannes Thumshirn
2020-09-28 18:23 ` Josef Bacik
2020-09-29 6:36 ` Johannes Thumshirn
2020-09-24 15:32 ` [PATCH 2/5] btrfs: push the NODATASUM check into btrfs_lookup_bio_sums Josef Bacik
2020-09-25 0:39 ` Qu Wenruo [this message]
2020-09-28 18:28 ` Josef Bacik
2020-09-28 12:39 ` Johannes Thumshirn
2020-09-24 15:32 ` [PATCH 3/5] btrfs: introduce rescue=ignorebadroots Josef Bacik
2020-09-25 0:47 ` Qu Wenruo
2020-09-28 18:24 ` Josef Bacik
2020-09-24 15:32 ` [PATCH 4/5] btrfs: introduce rescue=ignoredatacsums Josef Bacik
2020-09-25 0:50 ` Qu Wenruo
2020-09-24 15:32 ` [PATCH 5/5] btrfs: introduce rescue=all Josef Bacik
2020-09-25 0:51 ` Qu Wenruo
2020-09-25 0:34 ` [PATCH 0/5] New rescue mount options Qu Wenruo
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=a3d17402-7e3d-7fb4-9831-2db5be18d5b2@gmx.com \
--to=quwenruo.btrfs@gmx.com \
--cc=josef@toxicpanda.com \
--cc=kernel-team@fb.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox