Message ID | 20250121054054.4008049-2-willy@infradead.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [1/3] btrfs: Fix some folio-related comments | expand |
在 2025/1/21 16:10, Matthew Wilcox (Oracle) 写道: > 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. > > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> > --- > fs/btrfs/extent_io.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c > index 289ecb8ce217..c9b0ee841501 100644 > --- a/fs/btrfs/extent_io.c > +++ b/fs/btrfs/extent_io.c > @@ -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); I'd prefer to keep this ASSERT(), as all the btrfs_folio_*() helpers can only handle page sized folio for now. > 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 > @@ -563,7 +560,8 @@ static void end_bbio_data_read(struct btrfs_bio *bbio) > * > * NOTE: i_size is exclusive while end is inclusive. > */ > - if (folio_index(folio) == end_index && i_size <= end) { > + if (folio_contains(folio, i_size >> PAGE_SHIFT) && Although folio_contains() is already a pretty good improvement, can we have a bytenr/i_sized based solution for fs usages? Thanks, Qu > + 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 +954,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) {
diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 289ecb8ce217..c9b0ee841501 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -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 @@ -563,7 +560,8 @@ static void end_bbio_data_read(struct btrfs_bio *bbio) * * NOTE: i_size is exclusive while end is inclusive. */ - 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 +954,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) {
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. Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org> --- fs/btrfs/extent_io.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)