mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-25 05:04:09 +08:00
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>
This commit is contained in:
parent
aebcc1596b
commit
d87e6575e9
@ -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 (!extent_buffer_uptodate(eb))
|
||||
return 0;
|
||||
|
||||
if (!parent_transid || btrfs_header_generation(eb) == parent_transid)
|
||||
return 0;
|
||||
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;
|
||||
|
Loading…
Reference in New Issue
Block a user