Merge tag 'pm-5.15-rc1-3' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
[linux-2.6-microblaze.git] / fs / btrfs / ordered-data.c
index 5c0f848..6b51fd2 100644 (file)
@@ -446,7 +446,6 @@ void btrfs_mark_ordered_io_finished(struct btrfs_inode *inode,
  *              Will be also used to store the finished ordered extent.
  * @file_offset: File offset for the finished IO
  * @io_size:    Length of the finish IO range
- * @uptodate:   If the IO finishes without problem
  *
  * Return true if the ordered extent is finished in the range, and update
  * @cached.
@@ -457,7 +456,7 @@ void btrfs_mark_ordered_io_finished(struct btrfs_inode *inode,
  */
 bool btrfs_dec_test_ordered_pending(struct btrfs_inode *inode,
                                    struct btrfs_ordered_extent **cached,
-                                   u64 file_offset, u64 io_size, int uptodate)
+                                   u64 file_offset, u64 io_size)
 {
        struct btrfs_ordered_inode_tree *tree = &inode->ordered_tree;
        struct rb_node *node;
@@ -486,8 +485,6 @@ have_entry:
                       entry->bytes_left, io_size);
 
        entry->bytes_left -= io_size;
-       if (!uptodate)
-               set_bit(BTRFS_ORDERED_IOERR, &entry->flags);
 
        if (entry->bytes_left == 0) {
                /*
@@ -1052,6 +1049,7 @@ static int clone_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pos,
                                u64 len)
 {
        struct inode *inode = ordered->inode;
+       struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info;
        u64 file_offset = ordered->file_offset + pos;
        u64 disk_bytenr = ordered->disk_bytenr + pos;
        u64 num_bytes = len;
@@ -1069,6 +1067,13 @@ static int clone_ordered_extent(struct btrfs_ordered_extent *ordered, u64 pos,
        else
                type = __ffs(flags_masked);
 
+       /*
+        * The splitting extent is already counted and will be added again
+        * in btrfs_add_ordered_extent_*(). Subtract num_bytes to avoid
+        * double counting.
+        */
+       percpu_counter_add_batch(&fs_info->ordered_bytes, -num_bytes,
+                                fs_info->delalloc_batch);
        if (test_bit(BTRFS_ORDERED_COMPRESSED, &ordered->flags)) {
                WARN_ON_ONCE(1);
                ret = btrfs_add_ordered_extent_compress(BTRFS_I(inode),