btrfs: merge verify_parent_transid and btrfs_buffer_uptodate
authorChristoph Hellwig <hch@lst.de>
Wed, 3 May 2023 15:24:24 +0000 (17:24 +0200)
committerDavid Sterba <dsterba@suse.com>
Mon, 19 Jun 2023 11:59:27 +0000 (13:59 +0200)
verify_parent_transid is only called by btrfs_buffer_uptodate, which
confusingly inverts the return value.  Merge the two functions and
reflow the parent_transid so that error handling is in a branch.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/disk-io.c

index 41045c900c2cef6eb91497db712ad0bf79be9258..d4f7578cda00f62cc3238531efe5afba7e246558 100644 (file)
@@ -110,32 +110,32 @@ static void csum_tree_block(struct extent_buffer *buf, u8 *result)
  * detect blocks that either didn't get written at all or got written
  * in the wrong place.
  */
-static int verify_parent_transid(struct extent_io_tree *io_tree,
-                                struct extent_buffer *eb, u64 parent_transid,
-                                int atomic)
+int btrfs_buffer_uptodate(struct extent_buffer *eb, u64 parent_transid, int atomic)
 {
+       struct inode *btree_inode = eb->pages[0]->mapping->host;
+       struct extent_io_tree *io_tree = &BTRFS_I(btree_inode)->io_tree;
        struct extent_state *cached_state = NULL;
-       int ret;
+       int ret = 1;
 
-       if (!parent_transid || btrfs_header_generation(eb) == parent_transid)
+       if (!extent_buffer_uptodate(eb))
                return 0;
 
+       if (!parent_transid || btrfs_header_generation(eb) == parent_transid)
+               return 1;
+
        if (atomic)
                return -EAGAIN;
 
        lock_extent(io_tree, eb->start, eb->start + eb->len - 1, &cached_state);
-       if (extent_buffer_uptodate(eb) &&
-           btrfs_header_generation(eb) == parent_transid) {
-               ret = 0;
-               goto out;
-       }
-       btrfs_err_rl(eb->fs_info,
+       if (!extent_buffer_uptodate(eb) ||
+           btrfs_header_generation(eb) != parent_transid) {
+               btrfs_err_rl(eb->fs_info,
 "parent transid verify failed on logical %llu mirror %u wanted %llu found %llu",
                        eb->start, eb->read_mirror,
                        parent_transid, btrfs_header_generation(eb));
-       ret = 1;
-       clear_extent_buffer_uptodate(eb);
-out:
+               clear_extent_buffer_uptodate(eb);
+               ret = 0;
+       }
        unlock_extent(io_tree, eb->start, eb->start + eb->len - 1,
                      &cached_state);
        return ret;
@@ -4600,23 +4600,6 @@ void __cold close_ctree(struct btrfs_fs_info *fs_info)
        btrfs_close_devices(fs_info->fs_devices);
 }
 
-int btrfs_buffer_uptodate(struct extent_buffer *buf, u64 parent_transid,
-                         int atomic)
-{
-       int ret;
-       struct inode *btree_inode = buf->pages[0]->mapping->host;
-
-       ret = extent_buffer_uptodate(buf);
-       if (!ret)
-               return ret;
-
-       ret = verify_parent_transid(&BTRFS_I(btree_inode)->io_tree, buf,
-                                   parent_transid, atomic);
-       if (ret == -EAGAIN)
-               return ret;
-       return !ret;
-}
-
 void btrfs_mark_buffer_dirty(struct extent_buffer *buf)
 {
        struct btrfs_fs_info *fs_info = buf->fs_info;