btrfs: fix two misuses of folio_shift()
It is meaningless to shift a byte count by folio_shift(). The folio index is in units of PAGE_SIZE, not folio_size(). We can use folio_contains() to make this work for arbitrary-order folios, so remove the assertion that the folios are of order 0. Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
parent
fdef89ce6f
commit
01af106a07
1 changed files with 5 additions and 6 deletions
|
@ -523,8 +523,6 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
|||
u64 end;
|
||||
u32 len;
|
||||
|
||||
/* For now only order 0 folios are supported for data. */
|
||||
ASSERT(folio_order(folio) == 0);
|
||||
btrfs_debug(fs_info,
|
||||
"%s: bi_sector=%llu, err=%d, mirror=%u",
|
||||
__func__, bio->bi_iter.bi_sector, bio->bi_status,
|
||||
|
@ -552,7 +550,6 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
|||
|
||||
if (likely(uptodate)) {
|
||||
loff_t i_size = i_size_read(inode);
|
||||
pgoff_t end_index = i_size >> folio_shift(folio);
|
||||
|
||||
/*
|
||||
* Zero out the remaining part if this range straddles
|
||||
|
@ -561,9 +558,11 @@ static void end_bbio_data_read(struct btrfs_bio *bbio)
|
|||
* Here we should only zero the range inside the folio,
|
||||
* not touch anything else.
|
||||
*
|
||||
* NOTE: i_size is exclusive while end is inclusive.
|
||||
* NOTE: i_size is exclusive while end is inclusive and
|
||||
* folio_contains() takes PAGE_SIZE units.
|
||||
*/
|
||||
if (folio_index(folio) == end_index && i_size <= end) {
|
||||
if (folio_contains(folio, i_size >> PAGE_SHIFT) &&
|
||||
i_size <= end) {
|
||||
u32 zero_start = max(offset_in_folio(folio, i_size),
|
||||
offset_in_folio(folio, start));
|
||||
u32 zero_len = offset_in_folio(folio, end) + 1 -
|
||||
|
@ -956,7 +955,7 @@ static int btrfs_do_readpage(struct folio *folio, struct extent_map **em_cached,
|
|||
return ret;
|
||||
}
|
||||
|
||||
if (folio->index == last_byte >> folio_shift(folio)) {
|
||||
if (folio_contains(folio, last_byte >> PAGE_SHIFT)) {
|
||||
size_t zero_offset = offset_in_folio(folio, last_byte);
|
||||
|
||||
if (zero_offset) {
|
||||
|
|
Loading…
Add table
Reference in a new issue