Lines Matching refs:fs_info
67 bool btrfs_is_subpage(const struct btrfs_fs_info *fs_info, struct page *page)
69 if (fs_info->sectorsize >= PAGE_SIZE)
85 if (fs_info->nodesize < PAGE_SIZE)
118 int btrfs_attach_subpage(const struct btrfs_fs_info *fs_info,
131 if (!btrfs_is_subpage(fs_info, page) || PagePrivate(page))
134 subpage = btrfs_alloc_subpage(fs_info, type);
142 void btrfs_detach_subpage(const struct btrfs_fs_info *fs_info,
148 if (!btrfs_is_subpage(fs_info, page) || !PagePrivate(page))
156 struct btrfs_subpage *btrfs_alloc_subpage(const struct btrfs_fs_info *fs_info,
162 ASSERT(fs_info->sectorsize < PAGE_SIZE);
165 BITS_TO_LONGS(fs_info->subpage_info->total_nr_bits));
194 void btrfs_page_inc_eb_refs(const struct btrfs_fs_info *fs_info,
199 if (!btrfs_is_subpage(fs_info, page))
209 void btrfs_page_dec_eb_refs(const struct btrfs_fs_info *fs_info,
214 if (!btrfs_is_subpage(fs_info, page))
225 static void btrfs_subpage_assert(const struct btrfs_fs_info *fs_info,
230 ASSERT(IS_ALIGNED(start, fs_info->sectorsize) &&
231 IS_ALIGNED(len, fs_info->sectorsize));
241 void btrfs_subpage_start_reader(const struct btrfs_fs_info *fs_info,
245 const int nbits = len >> fs_info->sectorsize_bits;
247 btrfs_subpage_assert(fs_info, page, start, len);
252 void btrfs_subpage_end_reader(const struct btrfs_fs_info *fs_info,
256 const int nbits = len >> fs_info->sectorsize_bits;
260 btrfs_subpage_assert(fs_info, page, start, len);
294 void btrfs_subpage_start_writer(const struct btrfs_fs_info *fs_info,
298 const int nbits = (len >> fs_info->sectorsize_bits);
301 btrfs_subpage_assert(fs_info, page, start, len);
308 bool btrfs_subpage_end_and_test_writer(const struct btrfs_fs_info *fs_info,
312 const int nbits = (len >> fs_info->sectorsize_bits);
314 btrfs_subpage_assert(fs_info, page, start, len);
340 int btrfs_page_start_writer_lock(const struct btrfs_fs_info *fs_info,
343 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) {
353 btrfs_subpage_start_writer(fs_info, page, start, len);
357 void btrfs_page_end_writer_lock(const struct btrfs_fs_info *fs_info,
360 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page))
363 if (btrfs_subpage_end_and_test_writer(fs_info, page, start, len))
367 #define subpage_calc_start_bit(fs_info, page, name, start, len) \
371 btrfs_subpage_assert(fs_info, page, start, len); \
372 start_bit = offset_in_page(start) >> fs_info->sectorsize_bits; \
373 start_bit += fs_info->subpage_info->name##_offset; \
377 #define subpage_test_bitmap_all_set(fs_info, subpage, name) \
379 fs_info->subpage_info->name##_offset, \
380 fs_info->subpage_info->bitmap_nr_bits)
382 #define subpage_test_bitmap_all_zero(fs_info, subpage, name) \
384 fs_info->subpage_info->name##_offset, \
385 fs_info->subpage_info->bitmap_nr_bits)
387 void btrfs_subpage_set_uptodate(const struct btrfs_fs_info *fs_info,
391 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
396 bitmap_set(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
397 if (subpage_test_bitmap_all_set(fs_info, subpage, uptodate))
402 void btrfs_subpage_clear_uptodate(const struct btrfs_fs_info *fs_info,
406 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
411 bitmap_clear(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
416 void btrfs_subpage_set_dirty(const struct btrfs_fs_info *fs_info,
420 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
425 bitmap_set(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
440 bool btrfs_subpage_clear_and_test_dirty(const struct btrfs_fs_info *fs_info,
444 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
450 bitmap_clear(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
451 if (subpage_test_bitmap_all_zero(fs_info, subpage, dirty))
457 void btrfs_subpage_clear_dirty(const struct btrfs_fs_info *fs_info,
462 last = btrfs_subpage_clear_and_test_dirty(fs_info, page, start, len);
467 void btrfs_subpage_set_writeback(const struct btrfs_fs_info *fs_info,
471 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
476 bitmap_set(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
481 void btrfs_subpage_clear_writeback(const struct btrfs_fs_info *fs_info,
485 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
490 bitmap_clear(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
491 if (subpage_test_bitmap_all_zero(fs_info, subpage, writeback)) {
498 void btrfs_subpage_set_ordered(const struct btrfs_fs_info *fs_info,
502 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
507 bitmap_set(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
512 void btrfs_subpage_clear_ordered(const struct btrfs_fs_info *fs_info,
516 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
521 bitmap_clear(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
522 if (subpage_test_bitmap_all_zero(fs_info, subpage, ordered))
527 void btrfs_subpage_set_checked(const struct btrfs_fs_info *fs_info,
531 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
536 bitmap_set(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
537 if (subpage_test_bitmap_all_set(fs_info, subpage, checked))
542 void btrfs_subpage_clear_checked(const struct btrfs_fs_info *fs_info,
546 unsigned int start_bit = subpage_calc_start_bit(fs_info, page,
551 bitmap_clear(subpage->bitmaps, start_bit, len >> fs_info->sectorsize_bits);
561 bool btrfs_subpage_test_##name(const struct btrfs_fs_info *fs_info, \
565 unsigned int start_bit = subpage_calc_start_bit(fs_info, page, \
572 len >> fs_info->sectorsize_bits); \
583 * Note that, in selftests (extent-io-tests), we can have empty fs_info passed
589 void btrfs_page_set_##name(const struct btrfs_fs_info *fs_info, \
592 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) { \
596 btrfs_subpage_set_##name(fs_info, page, start, len); \
598 void btrfs_page_clear_##name(const struct btrfs_fs_info *fs_info, \
601 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) { \
605 btrfs_subpage_clear_##name(fs_info, page, start, len); \
607 bool btrfs_page_test_##name(const struct btrfs_fs_info *fs_info, \
610 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) \
612 return btrfs_subpage_test_##name(fs_info, page, start, len); \
614 void btrfs_page_clamp_set_##name(const struct btrfs_fs_info *fs_info, \
617 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) { \
622 btrfs_subpage_set_##name(fs_info, page, start, len); \
624 void btrfs_page_clamp_clear_##name(const struct btrfs_fs_info *fs_info, \
627 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) { \
632 btrfs_subpage_clear_##name(fs_info, page, start, len); \
634 bool btrfs_page_clamp_test_##name(const struct btrfs_fs_info *fs_info, \
637 if (unlikely(!fs_info) || !btrfs_is_subpage(fs_info, page)) \
640 return btrfs_subpage_test_##name(fs_info, page, start, len); \
656 void btrfs_page_assert_not_dirty(const struct btrfs_fs_info *fs_info,
665 if (!btrfs_is_subpage(fs_info, page))
669 ASSERT(subpage_test_bitmap_all_zero(fs_info, subpage, dirty));
687 void btrfs_page_unlock_writer(struct btrfs_fs_info *fs_info, struct page *page,
694 if (!btrfs_is_subpage(fs_info, page))
712 btrfs_page_end_writer_lock(fs_info, page, start, len);
719 void __cold btrfs_subpage_dump_bitmap(const struct btrfs_fs_info *fs_info,
722 struct btrfs_subpage_info *subpage_info = fs_info->subpage_info;
745 btrfs_warn(fs_info,