static int folio_data_offset(struct folio *folio, unsigned offset)
{
struct bch_folio *s = bch2_folio(folio);
- unsigned i;
+ unsigned i, sectors = folio_sectors(folio);
if (s)
- for (i = offset >> 9; i < PAGE_SECTORS; i++)
+ for (i = offset >> 9; i < sectors; i++)
if (s->s[i].state >= SECTOR_DIRTY)
return i << 9;
folio_lock(folio);
offset = folio_data_offset(folio,
- folio->index == start_index
- ? start_offset & (PAGE_SIZE - 1)
- : 0);
+ max(folio_pos(folio), start_offset) -
+ folio_pos(folio));
if (offset >= 0) {
- ret = clamp(((loff_t) folio->index << PAGE_SHIFT) +
- offset,
+ ret = clamp(folio_pos(folio) + offset,
start_offset, end_offset);
folio_unlock(folio);
folio_batch_release(&fbatch);