btrfs: split waiting from read_extent_buffer_pages(), drop parameter wait

There are only 2 WAIT_* values left for wait parameter, we can encode
this to the function name if the waiting functionality is split.

Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2025-01-09 11:24:43 +01:00
parent db9eef2ea8
commit 248c4ff393
3 changed files with 22 additions and 14 deletions

View File

@ -226,7 +226,7 @@ int btrfs_read_extent_buffer(struct extent_buffer *eb,
while (1) { while (1) {
clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags); clear_bit(EXTENT_BUFFER_CORRUPT, &eb->bflags);
ret = read_extent_buffer_pages(eb, WAIT_COMPLETE, mirror_num, check); ret = read_extent_buffer_pages(eb, mirror_num, check);
if (!ret) if (!ret)
break; break;

View File

@ -3479,8 +3479,8 @@ static void end_bbio_meta_read(struct btrfs_bio *bbio)
bio_put(&bbio->bio); bio_put(&bbio->bio);
} }
int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num, int read_extent_buffer_pages_nowait(struct extent_buffer *eb, int mirror_num,
const struct btrfs_tree_parent_check *check) const struct btrfs_tree_parent_check *check)
{ {
struct btrfs_bio *bbio; struct btrfs_bio *bbio;
bool ret; bool ret;
@ -3498,7 +3498,7 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
/* Someone else is already reading the buffer, just wait for it. */ /* Someone else is already reading the buffer, just wait for it. */
if (test_and_set_bit(EXTENT_BUFFER_READING, &eb->bflags)) if (test_and_set_bit(EXTENT_BUFFER_READING, &eb->bflags))
goto done; return 0;
/* /*
* Between the initial test_bit(EXTENT_BUFFER_UPTODATE) and the above * Between the initial test_bit(EXTENT_BUFFER_UPTODATE) and the above
@ -3538,14 +3538,21 @@ int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
} }
} }
btrfs_submit_bbio(bbio, mirror_num); btrfs_submit_bbio(bbio, mirror_num);
return 0;
}
done: int read_extent_buffer_pages(struct extent_buffer *eb, int mirror_num,
if (wait == WAIT_COMPLETE) { const struct btrfs_tree_parent_check *check)
wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_READING, TASK_UNINTERRUPTIBLE); {
if (!test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) int ret;
return -EIO;
}
ret = read_extent_buffer_pages_nowait(eb, mirror_num, check);
if (ret < 0)
return ret;
wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_READING, TASK_UNINTERRUPTIBLE);
if (!test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags))
return -EIO;
return 0; return 0;
} }
@ -4276,7 +4283,7 @@ void btrfs_readahead_tree_block(struct btrfs_fs_info *fs_info,
return; return;
} }
ret = read_extent_buffer_pages(eb, WAIT_NONE, 0, &check); ret = read_extent_buffer_pages_nowait(eb, 0, &check);
if (ret < 0) if (ret < 0)
free_extent_buffer_stale(eb); free_extent_buffer_stale(eb);
else else

View File

@ -261,10 +261,11 @@ struct extent_buffer *find_extent_buffer(struct btrfs_fs_info *fs_info,
u64 start); u64 start);
void free_extent_buffer(struct extent_buffer *eb); void free_extent_buffer(struct extent_buffer *eb);
void free_extent_buffer_stale(struct extent_buffer *eb); void free_extent_buffer_stale(struct extent_buffer *eb);
#define WAIT_NONE 0 int read_extent_buffer_pages(struct extent_buffer *eb, int mirror_num,
#define WAIT_COMPLETE 1
int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num,
const struct btrfs_tree_parent_check *parent_check); const struct btrfs_tree_parent_check *parent_check);
int read_extent_buffer_pages_nowait(struct extent_buffer *eb, int mirror_num,
const struct btrfs_tree_parent_check *parent_check);
static inline void wait_on_extent_buffer_writeback(struct extent_buffer *eb) static inline void wait_on_extent_buffer_writeback(struct extent_buffer *eb)
{ {
wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK, wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK,