From: Filipe Manana <fdmanana@gmail.com>
To: Josef Bacik <josef@toxicpanda.com>
Cc: linux-btrfs <linux-btrfs@vger.kernel.org>, kernel-team@fb.com
Subject: Re: [PATCH 5/5] btrfs: delete the ordered isize update code
Date: Wed, 15 Jan 2020 17:13:53 +0000 [thread overview]
Message-ID: <CAL3q7H4B94tcog2t_QsU0j6v4cRjnWn8zwbGqrcXL9Po2_hLEw@mail.gmail.com> (raw)
In-Reply-To: <20200107194237.145694-6-josef@toxicpanda.com>
On Tue, Jan 7, 2020 at 7:43 PM Josef Bacik <josef@toxicpanda.com> wrote:
>
> Now that we have a safe way to update the isize, remove all of this code
> as it's no longer needed.
>
> Signed-off-by: Josef Bacik <josef@toxicpanda.com>
Reviewed-by: Filipe Manana <fdmanana@suse.com>
Looks good, thanks.
> ---
> fs/btrfs/ordered-data.c | 128 -----------------------------------
> fs/btrfs/ordered-data.h | 7 --
> include/trace/events/btrfs.h | 1 -
> 3 files changed, 136 deletions(-)
>
> diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c
> index 3a3c648bb9d3..b8de2aea36b3 100644
> --- a/fs/btrfs/ordered-data.c
> +++ b/fs/btrfs/ordered-data.c
> @@ -791,134 +791,6 @@ btrfs_lookup_first_ordered_extent(struct inode *inode, u64 file_offset)
> return entry;
> }
>
> -/*
> - * After an extent is done, call this to conditionally update the on disk
> - * i_size. i_size is updated to cover any fully written part of the file.
> - */
> -int btrfs_ordered_update_i_size(struct inode *inode, u64 offset,
> - struct btrfs_ordered_extent *ordered)
> -{
> - struct btrfs_ordered_inode_tree *tree = &BTRFS_I(inode)->ordered_tree;
> - u64 disk_i_size;
> - u64 new_i_size;
> - u64 i_size = i_size_read(inode);
> - struct rb_node *node;
> - struct rb_node *prev = NULL;
> - struct btrfs_ordered_extent *test;
> - int ret = 1;
> - u64 orig_offset = offset;
> -
> - spin_lock_irq(&tree->lock);
> - if (ordered) {
> - offset = entry_end(ordered);
> - if (test_bit(BTRFS_ORDERED_TRUNCATED, &ordered->flags))
> - offset = min(offset,
> - ordered->file_offset +
> - ordered->truncated_len);
> - } else {
> - offset = ALIGN(offset, btrfs_inode_sectorsize(inode));
> - }
> - disk_i_size = BTRFS_I(inode)->disk_i_size;
> -
> - /*
> - * truncate file.
> - * If ordered is not NULL, then this is called from endio and
> - * disk_i_size will be updated by either truncate itself or any
> - * in-flight IOs which are inside the disk_i_size.
> - *
> - * Because btrfs_setsize() may set i_size with disk_i_size if truncate
> - * fails somehow, we need to make sure we have a precise disk_i_size by
> - * updating it as usual.
> - *
> - */
> - if (!ordered && disk_i_size > i_size) {
> - BTRFS_I(inode)->disk_i_size = orig_offset;
> - ret = 0;
> - goto out;
> - }
> -
> - /*
> - * if the disk i_size is already at the inode->i_size, or
> - * this ordered extent is inside the disk i_size, we're done
> - */
> - if (disk_i_size == i_size)
> - goto out;
> -
> - /*
> - * We still need to update disk_i_size if outstanding_isize is greater
> - * than disk_i_size.
> - */
> - if (offset <= disk_i_size &&
> - (!ordered || ordered->outstanding_isize <= disk_i_size))
> - goto out;
> -
> - /*
> - * walk backward from this ordered extent to disk_i_size.
> - * if we find an ordered extent then we can't update disk i_size
> - * yet
> - */
> - if (ordered) {
> - node = rb_prev(&ordered->rb_node);
> - } else {
> - prev = tree_search(tree, offset);
> - /*
> - * we insert file extents without involving ordered struct,
> - * so there should be no ordered struct cover this offset
> - */
> - if (prev) {
> - test = rb_entry(prev, struct btrfs_ordered_extent,
> - rb_node);
> - BUG_ON(offset_in_entry(test, offset));
> - }
> - node = prev;
> - }
> - for (; node; node = rb_prev(node)) {
> - test = rb_entry(node, struct btrfs_ordered_extent, rb_node);
> -
> - /* We treat this entry as if it doesn't exist */
> - if (test_bit(BTRFS_ORDERED_UPDATED_ISIZE, &test->flags))
> - continue;
> -
> - if (entry_end(test) <= disk_i_size)
> - break;
> - if (test->file_offset >= i_size)
> - break;
> -
> - /*
> - * We don't update disk_i_size now, so record this undealt
> - * i_size. Or we will not know the real i_size.
> - */
> - if (test->outstanding_isize < offset)
> - test->outstanding_isize = offset;
> - if (ordered &&
> - ordered->outstanding_isize > test->outstanding_isize)
> - test->outstanding_isize = ordered->outstanding_isize;
> - goto out;
> - }
> - new_i_size = min_t(u64, offset, i_size);
> -
> - /*
> - * Some ordered extents may completed before the current one, and
> - * we hold the real i_size in ->outstanding_isize.
> - */
> - if (ordered && ordered->outstanding_isize > new_i_size)
> - new_i_size = min_t(u64, ordered->outstanding_isize, i_size);
> - BTRFS_I(inode)->disk_i_size = new_i_size;
> - ret = 0;
> -out:
> - /*
> - * We need to do this because we can't remove ordered extents until
> - * after the i_disk_size has been updated and then the inode has been
> - * updated to reflect the change, so we need to tell anybody who finds
> - * this ordered extent that we've already done all the real work, we
> - * just haven't completed all the other work.
> - */
> - if (ordered)
> - set_bit(BTRFS_ORDERED_UPDATED_ISIZE, &ordered->flags);
> - spin_unlock_irq(&tree->lock);
> - return ret;
> -}
> -
> /*
> * search the ordered extents for one corresponding to 'offset' and
> * try to find a checksum. This is used because we allow pages to
> diff --git a/fs/btrfs/ordered-data.h b/fs/btrfs/ordered-data.h
> index 5204171ea962..7f7f9ad091a6 100644
> --- a/fs/btrfs/ordered-data.h
> +++ b/fs/btrfs/ordered-data.h
> @@ -52,11 +52,6 @@ enum {
> BTRFS_ORDERED_DIRECT,
> /* We had an io error when writing this out */
> BTRFS_ORDERED_IOERR,
> - /*
> - * indicates whether this ordered extent has done its due diligence in
> - * updating the isize
> - */
> - BTRFS_ORDERED_UPDATED_ISIZE,
> /* Set when we have to truncate an extent */
> BTRFS_ORDERED_TRUNCATED,
> /* Regular IO for COW */
> @@ -180,8 +175,6 @@ struct btrfs_ordered_extent *btrfs_lookup_ordered_range(
> struct btrfs_inode *inode,
> u64 file_offset,
> u64 len);
> -int btrfs_ordered_update_i_size(struct inode *inode, u64 offset,
> - struct btrfs_ordered_extent *ordered);
> int btrfs_find_ordered_sum(struct inode *inode, u64 offset, u64 disk_bytenr,
> u8 *sum, int len);
> u64 btrfs_wait_ordered_extents(struct btrfs_root *root, u64 nr,
> diff --git a/include/trace/events/btrfs.h b/include/trace/events/btrfs.h
> index 620bf1b38fba..02ac28f0e99e 100644
> --- a/include/trace/events/btrfs.h
> +++ b/include/trace/events/btrfs.h
> @@ -468,7 +468,6 @@ DEFINE_EVENT(
> { (1 << BTRFS_ORDERED_PREALLOC), "PREALLOC" }, \
> { (1 << BTRFS_ORDERED_DIRECT), "DIRECT" }, \
> { (1 << BTRFS_ORDERED_IOERR), "IOERR" }, \
> - { (1 << BTRFS_ORDERED_UPDATED_ISIZE), "UPDATED_ISIZE" }, \
> { (1 << BTRFS_ORDERED_TRUNCATED), "TRUNCATED" })
>
>
> --
> 2.23.0
>
--
Filipe David Manana,
“Whether you think you can, or you think you can't — you're right.”
next prev parent reply other threads:[~2020-01-15 17:14 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-07 19:42 [PATCH 0/5][v2] btrfs: fix hole corruption issue with !NO_HOLES Josef Bacik
2020-01-07 19:42 ` [PATCH 1/5] btrfs: use btrfs_ordered_update_i_size in clone_finish_inode_update Josef Bacik
2020-01-15 17:01 ` Filipe Manana
2020-01-07 19:42 ` [PATCH 2/5] btrfs: introduce the inode->file_extent_tree Josef Bacik
2020-01-15 17:10 ` Filipe Manana
2020-01-07 19:42 ` [PATCH 3/5] btrfs: use the file extent tree infrastructure Josef Bacik
2020-01-15 17:12 ` Filipe Manana
2020-01-15 17:20 ` Josef Bacik
2020-01-15 17:34 ` Filipe Manana
2020-01-16 12:46 ` Filipe Manana
2020-01-07 19:42 ` [PATCH 4/5] btrfs: replace all uses of btrfs_ordered_update_i_size Josef Bacik
2020-01-15 17:13 ` Filipe Manana
2020-01-07 19:42 ` [PATCH 5/5] btrfs: delete the ordered isize update code Josef Bacik
2020-01-15 17:13 ` Filipe Manana [this message]
2020-01-15 17:32 ` [PATCH 0/5][v2] btrfs: fix hole corruption issue with !NO_HOLES Filipe Manana
2020-01-15 18:44 ` Josef Bacik
-- strict thread matches above, loose matches on Subject: below --
2019-12-30 21:31 [RFC][PATCH 0/5] " Josef Bacik
2019-12-30 21:31 ` [PATCH 5/5] btrfs: delete the ordered isize update code 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=CAL3q7H4B94tcog2t_QsU0j6v4cRjnWn8zwbGqrcXL9Po2_hLEw@mail.gmail.com \
--to=fdmanana@gmail.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;
as well as URLs for NNTP newsgroup(s).