diff mbox series

[5/5] btrfs: delete the ordered isize update code

Message ID 20200107194237.145694-6-josef@toxicpanda.com (mailing list archive)
State New, archived
Headers show
Series btrfs: fix hole corruption issue with !NO_HOLES | expand

Commit Message

Josef Bacik Jan. 7, 2020, 7:42 p.m. UTC
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>
---
 fs/btrfs/ordered-data.c      | 128 -----------------------------------
 fs/btrfs/ordered-data.h      |   7 --
 include/trace/events/btrfs.h |   1 -
 3 files changed, 136 deletions(-)

Comments

Filipe Manana Jan. 15, 2020, 5:13 p.m. UTC | #1
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
>
diff mbox series

Patch

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"	})