]> git.hungrycats.org Git - linux/commitdiff
btrfs: do not ignore error from btrfs_next_leaf() when inserting checksums
authorFilipe Manana <fdmanana@suse.com>
Mon, 18 May 2020 11:15:09 +0000 (12:15 +0100)
committerZygo Blaxell <ce3g8jdj@umail.furryterror.org>
Mon, 31 Aug 2020 19:06:20 +0000 (15:06 -0400)
[ Upstream commit 7e4a3f7ed5d54926ec671bbb13e171cfe179cc50 ]

We are currently treating any non-zero return value from btrfs_next_leaf()
the same way, by going to the code that inserts a new checksum item in the
tree. However if btrfs_next_leaf() returns an error (a value < 0), we
should just stop and return the error, and not behave as if nothing has
happened, since in that case we do not have a way to know if there is a
next leaf or we are currently at the last leaf already.

So fix that by returning the error from btrfs_next_leaf().

Signed-off-by: Filipe Manana <fdmanana@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
(cherry picked from commit 2a005026102e1bc337718a4a9812b6fdd5d9a712)

fs/btrfs/file-item.c

index c2f365662d55045cc530fd81f99a2018c6f87f84..27e39f25cae1d5060a1177033def95dec93f8190 100644 (file)
@@ -796,10 +796,12 @@ again:
                nritems = btrfs_header_nritems(path->nodes[0]);
                if (!nritems || (path->slots[0] >= nritems - 1)) {
                        ret = btrfs_next_leaf(root, path);
-                       if (ret == 1)
+                       if (ret < 0) {
+                               goto out;
+                       } else if (ret > 0) {
                                found_next = 1;
-                       if (ret != 0)
                                goto insert;
+                       }
                        slot = path->slots[0];
                }
                btrfs_item_key_to_cpu(path->nodes[0], &found_key, slot);