summaryrefslogtreecommitdiff
path: root/fs/btrfs/disk-io.c
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2023-05-03 17:24:24 +0200
committerDavid Sterba <dsterba@suse.com>2023-06-19 13:59:27 +0200
commitd87e6575e9d1c9d43e223c3fe858e4e453265707 (patch)
tree839b8794e799ee53693b3c4d8db2297d383b44b6 /fs/btrfs/disk-io.c
parentaebcc1596b5c37095385ecd930cf335254828538 (diff)
downloadlwn-d87e6575e9d1c9d43e223c3fe858e4e453265707.tar.gz
lwn-d87e6575e9d1c9d43e223c3fe858e4e453265707.zip
btrfs: merge verify_parent_transid and btrfs_buffer_uptodate
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>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r--fs/btrfs/disk-io.c45
1 files changed, 14 insertions, 31 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c
index 41045c900c2c..d4f7578cda00 100644
--- a/fs/btrfs/disk-io.c
+++ b/fs/btrfs/disk-io.c
@@ -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;