Lines Matching refs:eb

64 	struct extent_buffer *eb;  in btrfs_extent_buffer_leak_debug_check()  local
76 eb = list_first_entry(&fs_info->allocated_ebs, in btrfs_extent_buffer_leak_debug_check()
80 eb->start, eb->len, atomic_read(&eb->refs), eb->bflags, in btrfs_extent_buffer_leak_debug_check()
81 btrfs_header_owner(eb)); in btrfs_extent_buffer_leak_debug_check()
82 list_del(&eb->leak_list); in btrfs_extent_buffer_leak_debug_check()
83 kmem_cache_free(extent_buffer_cache, eb); in btrfs_extent_buffer_leak_debug_check()
2336 int btrfs_repair_eb_io_failure(const struct extent_buffer *eb, int mirror_num) in btrfs_repair_eb_io_failure() argument
2338 struct btrfs_fs_info *fs_info = eb->fs_info; in btrfs_repair_eb_io_failure()
2339 u64 start = eb->start; in btrfs_repair_eb_io_failure()
2340 int i, num_pages = num_extent_pages(eb); in btrfs_repair_eb_io_failure()
2347 struct page *p = eb->pages[i]; in btrfs_repair_eb_io_failure()
2891 struct extent_buffer *eb; in end_bio_extent_readpage() local
2893 eb = (struct extent_buffer *)page->private; in end_bio_extent_readpage()
2894 set_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); in end_bio_extent_readpage()
2895 eb->read_mirror = mirror; in end_bio_extent_readpage()
2896 atomic_dec(&eb->io_pages); in end_bio_extent_readpage()
2898 &eb->bflags)) in end_bio_extent_readpage()
2899 btree_readahead_hook(eb, -EIO); in end_bio_extent_readpage()
3096 static void attach_extent_buffer_page(struct extent_buffer *eb, in attach_extent_buffer_page() argument
3100 attach_page_private(page, eb); in attach_extent_buffer_page()
3102 WARN_ON(page->private != (unsigned long)eb); in attach_extent_buffer_page()
3645 void wait_on_extent_buffer_writeback(struct extent_buffer *eb) in wait_on_extent_buffer_writeback() argument
3647 wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK, in wait_on_extent_buffer_writeback()
3651 static void end_extent_buffer_writeback(struct extent_buffer *eb) in end_extent_buffer_writeback() argument
3653 clear_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in end_extent_buffer_writeback()
3655 wake_up_bit(&eb->bflags, EXTENT_BUFFER_WRITEBACK); in end_extent_buffer_writeback()
3665 static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb, in lock_extent_buffer_for_io() argument
3668 struct btrfs_fs_info *fs_info = eb->fs_info; in lock_extent_buffer_for_io()
3673 if (!btrfs_try_tree_write_lock(eb)) { in lock_extent_buffer_for_io()
3678 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3681 if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { in lock_extent_buffer_for_io()
3682 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3692 wait_on_extent_buffer_writeback(eb); in lock_extent_buffer_for_io()
3693 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3694 if (!test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) in lock_extent_buffer_for_io()
3696 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3705 spin_lock(&eb->refs_lock); in lock_extent_buffer_for_io()
3706 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)) { in lock_extent_buffer_for_io()
3707 set_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in lock_extent_buffer_for_io()
3708 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3709 btrfs_set_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); in lock_extent_buffer_for_io()
3711 -eb->len, in lock_extent_buffer_for_io()
3715 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3718 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3723 num_pages = num_extent_pages(eb); in lock_extent_buffer_for_io()
3725 struct page *p = eb->pages[i]; in lock_extent_buffer_for_io()
3747 unlock_page(eb->pages[i]); in lock_extent_buffer_for_io()
3753 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3754 spin_lock(&eb->refs_lock); in lock_extent_buffer_for_io()
3755 set_bit(EXTENT_BUFFER_DIRTY, &eb->bflags); in lock_extent_buffer_for_io()
3756 end_extent_buffer_writeback(eb); in lock_extent_buffer_for_io()
3757 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3758 percpu_counter_add_batch(&fs_info->dirty_metadata_bytes, eb->len, in lock_extent_buffer_for_io()
3760 btrfs_clear_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); in lock_extent_buffer_for_io()
3761 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3767 struct extent_buffer *eb = (struct extent_buffer *)page->private; in set_btree_ioerr() local
3771 if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) in set_btree_ioerr()
3778 fs_info = eb->fs_info; in set_btree_ioerr()
3780 eb->len, fs_info->dirty_metadata_batch); in set_btree_ioerr()
3820 switch (eb->log_index) { in set_btree_ioerr()
3822 set_bit(BTRFS_FS_BTREE_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3825 set_bit(BTRFS_FS_LOG1_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3828 set_bit(BTRFS_FS_LOG2_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3838 struct extent_buffer *eb; in end_bio_extent_buffer_writepage() local
3846 eb = (struct extent_buffer *)page->private; in end_bio_extent_buffer_writepage()
3847 BUG_ON(!eb); in end_bio_extent_buffer_writepage()
3848 done = atomic_dec_and_test(&eb->io_pages); in end_bio_extent_buffer_writepage()
3851 test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) { in end_bio_extent_buffer_writepage()
3861 end_extent_buffer_writeback(eb); in end_bio_extent_buffer_writepage()
3867 static noinline_for_stack int write_one_eb(struct extent_buffer *eb, in write_one_eb() argument
3871 u64 offset = eb->start; in write_one_eb()
3878 clear_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags); in write_one_eb()
3879 num_pages = num_extent_pages(eb); in write_one_eb()
3880 atomic_set(&eb->io_pages, num_pages); in write_one_eb()
3883 nritems = btrfs_header_nritems(eb); in write_one_eb()
3884 if (btrfs_header_level(eb) > 0) { in write_one_eb()
3887 memzero_extent_buffer(eb, end, eb->len - end); in write_one_eb()
3894 end = BTRFS_LEAF_DATA_OFFSET + leaf_data_end(eb); in write_one_eb()
3895 memzero_extent_buffer(eb, start, end - start); in write_one_eb()
3899 struct page *p = eb->pages[i]; in write_one_eb()
3912 if (atomic_sub_and_test(num_pages - i, &eb->io_pages)) in write_one_eb()
3913 end_extent_buffer_writeback(eb); in write_one_eb()
3924 struct page *p = eb->pages[i]; in write_one_eb()
3936 struct extent_buffer *eb, *prev_eb = NULL; in btree_write_cache_pages() local
3991 eb = (struct extent_buffer *)page->private; in btree_write_cache_pages()
3998 if (WARN_ON(!eb)) { in btree_write_cache_pages()
4003 if (eb == prev_eb) { in btree_write_cache_pages()
4008 ret = atomic_inc_not_zero(&eb->refs); in btree_write_cache_pages()
4013 prev_eb = eb; in btree_write_cache_pages()
4014 ret = lock_extent_buffer_for_io(eb, &epd); in btree_write_cache_pages()
4016 free_extent_buffer(eb); in btree_write_cache_pages()
4020 free_extent_buffer(eb); in btree_write_cache_pages()
4024 ret = write_one_eb(eb, wbc, &epd); in btree_write_cache_pages()
4027 free_extent_buffer(eb); in btree_write_cache_pages()
4030 free_extent_buffer(eb); in btree_write_cache_pages()
4874 static void __free_extent_buffer(struct extent_buffer *eb) in __free_extent_buffer() argument
4876 kmem_cache_free(extent_buffer_cache, eb); in __free_extent_buffer()
4879 int extent_buffer_under_io(const struct extent_buffer *eb) in extent_buffer_under_io() argument
4881 return (atomic_read(&eb->io_pages) || in extent_buffer_under_io()
4882 test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags) || in extent_buffer_under_io()
4883 test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in extent_buffer_under_io()
4889 static void btrfs_release_extent_buffer_pages(struct extent_buffer *eb) in btrfs_release_extent_buffer_pages() argument
4893 int mapped = !test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags); in btrfs_release_extent_buffer_pages()
4895 BUG_ON(extent_buffer_under_io(eb)); in btrfs_release_extent_buffer_pages()
4897 num_pages = num_extent_pages(eb); in btrfs_release_extent_buffer_pages()
4899 struct page *page = eb->pages[i]; in btrfs_release_extent_buffer_pages()
4913 page->private == (unsigned long)eb) { in btrfs_release_extent_buffer_pages()
4914 BUG_ON(test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in btrfs_release_extent_buffer_pages()
4935 static inline void btrfs_release_extent_buffer(struct extent_buffer *eb) in btrfs_release_extent_buffer() argument
4937 btrfs_release_extent_buffer_pages(eb); in btrfs_release_extent_buffer()
4938 btrfs_leak_debug_del(&eb->fs_info->eb_leak_lock, &eb->leak_list); in btrfs_release_extent_buffer()
4939 __free_extent_buffer(eb); in btrfs_release_extent_buffer()
4946 struct extent_buffer *eb = NULL; in __alloc_extent_buffer() local
4948 eb = kmem_cache_zalloc(extent_buffer_cache, GFP_NOFS|__GFP_NOFAIL); in __alloc_extent_buffer()
4949 eb->start = start; in __alloc_extent_buffer()
4950 eb->len = len; in __alloc_extent_buffer()
4951 eb->fs_info = fs_info; in __alloc_extent_buffer()
4952 eb->bflags = 0; in __alloc_extent_buffer()
4953 rwlock_init(&eb->lock); in __alloc_extent_buffer()
4954 atomic_set(&eb->blocking_readers, 0); in __alloc_extent_buffer()
4955 eb->blocking_writers = 0; in __alloc_extent_buffer()
4956 eb->lock_recursed = false; in __alloc_extent_buffer()
4957 init_waitqueue_head(&eb->write_lock_wq); in __alloc_extent_buffer()
4958 init_waitqueue_head(&eb->read_lock_wq); in __alloc_extent_buffer()
4960 btrfs_leak_debug_add(&fs_info->eb_leak_lock, &eb->leak_list, in __alloc_extent_buffer()
4963 spin_lock_init(&eb->refs_lock); in __alloc_extent_buffer()
4964 atomic_set(&eb->refs, 1); in __alloc_extent_buffer()
4965 atomic_set(&eb->io_pages, 0); in __alloc_extent_buffer()
4975 eb->spinning_writers = 0; in __alloc_extent_buffer()
4976 atomic_set(&eb->spinning_readers, 0); in __alloc_extent_buffer()
4977 atomic_set(&eb->read_locks, 0); in __alloc_extent_buffer()
4978 eb->write_locks = 0; in __alloc_extent_buffer()
4981 return eb; in __alloc_extent_buffer()
5017 struct extent_buffer *eb; in __alloc_dummy_extent_buffer() local
5021 eb = __alloc_extent_buffer(fs_info, start, len); in __alloc_dummy_extent_buffer()
5022 if (!eb) in __alloc_dummy_extent_buffer()
5025 num_pages = num_extent_pages(eb); in __alloc_dummy_extent_buffer()
5027 eb->pages[i] = alloc_page(GFP_NOFS); in __alloc_dummy_extent_buffer()
5028 if (!eb->pages[i]) in __alloc_dummy_extent_buffer()
5031 set_extent_buffer_uptodate(eb); in __alloc_dummy_extent_buffer()
5032 btrfs_set_header_nritems(eb, 0); in __alloc_dummy_extent_buffer()
5033 set_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags); in __alloc_dummy_extent_buffer()
5035 return eb; in __alloc_dummy_extent_buffer()
5038 __free_page(eb->pages[i - 1]); in __alloc_dummy_extent_buffer()
5039 __free_extent_buffer(eb); in __alloc_dummy_extent_buffer()
5049 static void check_buffer_tree_ref(struct extent_buffer *eb) in check_buffer_tree_ref() argument
5075 refs = atomic_read(&eb->refs); in check_buffer_tree_ref()
5076 if (refs >= 2 && test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
5079 spin_lock(&eb->refs_lock); in check_buffer_tree_ref()
5080 if (!test_and_set_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
5081 atomic_inc(&eb->refs); in check_buffer_tree_ref()
5082 spin_unlock(&eb->refs_lock); in check_buffer_tree_ref()
5085 static void mark_extent_buffer_accessed(struct extent_buffer *eb, in mark_extent_buffer_accessed() argument
5090 check_buffer_tree_ref(eb); in mark_extent_buffer_accessed()
5092 num_pages = num_extent_pages(eb); in mark_extent_buffer_accessed()
5094 struct page *p = eb->pages[i]; in mark_extent_buffer_accessed()
5104 struct extent_buffer *eb; in find_extent_buffer() local
5107 eb = radix_tree_lookup(&fs_info->buffer_radix, in find_extent_buffer()
5109 if (eb && atomic_inc_not_zero(&eb->refs)) { in find_extent_buffer()
5126 if (test_bit(EXTENT_BUFFER_STALE, &eb->bflags)) { in find_extent_buffer()
5127 spin_lock(&eb->refs_lock); in find_extent_buffer()
5128 spin_unlock(&eb->refs_lock); in find_extent_buffer()
5130 mark_extent_buffer_accessed(eb, NULL); in find_extent_buffer()
5131 return eb; in find_extent_buffer()
5142 struct extent_buffer *eb, *exists = NULL; in alloc_test_extent_buffer() local
5145 eb = find_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
5146 if (eb) in alloc_test_extent_buffer()
5147 return eb; in alloc_test_extent_buffer()
5148 eb = alloc_dummy_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
5149 if (!eb) in alloc_test_extent_buffer()
5151 eb->fs_info = fs_info; in alloc_test_extent_buffer()
5160 start >> PAGE_SHIFT, eb); in alloc_test_extent_buffer()
5170 check_buffer_tree_ref(eb); in alloc_test_extent_buffer()
5171 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_test_extent_buffer()
5173 return eb; in alloc_test_extent_buffer()
5175 btrfs_release_extent_buffer(eb); in alloc_test_extent_buffer()
5187 struct extent_buffer *eb; in alloc_extent_buffer() local
5199 eb = find_extent_buffer(fs_info, start); in alloc_extent_buffer()
5200 if (eb) in alloc_extent_buffer()
5201 return eb; in alloc_extent_buffer()
5203 eb = __alloc_extent_buffer(fs_info, start, len); in alloc_extent_buffer()
5204 if (!eb) in alloc_extent_buffer()
5207 num_pages = num_extent_pages(eb); in alloc_extent_buffer()
5242 attach_extent_buffer_page(eb, p); in alloc_extent_buffer()
5245 eb->pages[i] = p; in alloc_extent_buffer()
5258 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in alloc_extent_buffer()
5268 start >> PAGE_SHIFT, eb); in alloc_extent_buffer()
5279 check_buffer_tree_ref(eb); in alloc_extent_buffer()
5280 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_extent_buffer()
5288 unlock_page(eb->pages[i]); in alloc_extent_buffer()
5289 return eb; in alloc_extent_buffer()
5292 WARN_ON(!atomic_dec_and_test(&eb->refs)); in alloc_extent_buffer()
5294 if (eb->pages[i]) in alloc_extent_buffer()
5295 unlock_page(eb->pages[i]); in alloc_extent_buffer()
5298 btrfs_release_extent_buffer(eb); in alloc_extent_buffer()
5304 struct extent_buffer *eb = in btrfs_release_extent_buffer_rcu() local
5307 __free_extent_buffer(eb); in btrfs_release_extent_buffer_rcu()
5310 static int release_extent_buffer(struct extent_buffer *eb) in release_extent_buffer() argument
5311 __releases(&eb->refs_lock) in release_extent_buffer()
5313 lockdep_assert_held(&eb->refs_lock); in release_extent_buffer()
5315 WARN_ON(atomic_read(&eb->refs) == 0); in release_extent_buffer()
5316 if (atomic_dec_and_test(&eb->refs)) { in release_extent_buffer()
5317 if (test_and_clear_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags)) { in release_extent_buffer()
5318 struct btrfs_fs_info *fs_info = eb->fs_info; in release_extent_buffer()
5320 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5324 eb->start >> PAGE_SHIFT); in release_extent_buffer()
5327 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5330 btrfs_leak_debug_del(&eb->fs_info->eb_leak_lock, &eb->leak_list); in release_extent_buffer()
5332 btrfs_release_extent_buffer_pages(eb); in release_extent_buffer()
5334 if (unlikely(test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags))) { in release_extent_buffer()
5335 __free_extent_buffer(eb); in release_extent_buffer()
5339 call_rcu(&eb->rcu_head, btrfs_release_extent_buffer_rcu); in release_extent_buffer()
5342 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5347 void free_extent_buffer(struct extent_buffer *eb) in free_extent_buffer() argument
5351 if (!eb) in free_extent_buffer()
5355 refs = atomic_read(&eb->refs); in free_extent_buffer()
5356 if ((!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && refs <= 3) in free_extent_buffer()
5357 || (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && in free_extent_buffer()
5360 old = atomic_cmpxchg(&eb->refs, refs, refs - 1); in free_extent_buffer()
5365 spin_lock(&eb->refs_lock); in free_extent_buffer()
5366 if (atomic_read(&eb->refs) == 2 && in free_extent_buffer()
5367 test_bit(EXTENT_BUFFER_STALE, &eb->bflags) && in free_extent_buffer()
5368 !extent_buffer_under_io(eb) && in free_extent_buffer()
5369 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer()
5370 atomic_dec(&eb->refs); in free_extent_buffer()
5376 release_extent_buffer(eb); in free_extent_buffer()
5379 void free_extent_buffer_stale(struct extent_buffer *eb) in free_extent_buffer_stale() argument
5381 if (!eb) in free_extent_buffer_stale()
5384 spin_lock(&eb->refs_lock); in free_extent_buffer_stale()
5385 set_bit(EXTENT_BUFFER_STALE, &eb->bflags); in free_extent_buffer_stale()
5387 if (atomic_read(&eb->refs) == 2 && !extent_buffer_under_io(eb) && in free_extent_buffer_stale()
5388 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer_stale()
5389 atomic_dec(&eb->refs); in free_extent_buffer_stale()
5390 release_extent_buffer(eb); in free_extent_buffer_stale()
5393 void clear_extent_buffer_dirty(const struct extent_buffer *eb) in clear_extent_buffer_dirty() argument
5399 num_pages = num_extent_pages(eb); in clear_extent_buffer_dirty()
5402 page = eb->pages[i]; in clear_extent_buffer_dirty()
5418 WARN_ON(atomic_read(&eb->refs) == 0); in clear_extent_buffer_dirty()
5421 bool set_extent_buffer_dirty(struct extent_buffer *eb) in set_extent_buffer_dirty() argument
5427 check_buffer_tree_ref(eb); in set_extent_buffer_dirty()
5429 was_dirty = test_and_set_bit(EXTENT_BUFFER_DIRTY, &eb->bflags); in set_extent_buffer_dirty()
5431 num_pages = num_extent_pages(eb); in set_extent_buffer_dirty()
5432 WARN_ON(atomic_read(&eb->refs) == 0); in set_extent_buffer_dirty()
5433 WARN_ON(!test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)); in set_extent_buffer_dirty()
5437 set_page_dirty(eb->pages[i]); in set_extent_buffer_dirty()
5441 ASSERT(PageDirty(eb->pages[i])); in set_extent_buffer_dirty()
5447 void clear_extent_buffer_uptodate(struct extent_buffer *eb) in clear_extent_buffer_uptodate() argument
5453 clear_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in clear_extent_buffer_uptodate()
5454 num_pages = num_extent_pages(eb); in clear_extent_buffer_uptodate()
5456 page = eb->pages[i]; in clear_extent_buffer_uptodate()
5462 void set_extent_buffer_uptodate(struct extent_buffer *eb) in set_extent_buffer_uptodate() argument
5468 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in set_extent_buffer_uptodate()
5469 num_pages = num_extent_pages(eb); in set_extent_buffer_uptodate()
5471 page = eb->pages[i]; in set_extent_buffer_uptodate()
5476 int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num) in read_extent_buffer_pages() argument
5489 if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) in read_extent_buffer_pages()
5492 num_pages = num_extent_pages(eb); in read_extent_buffer_pages()
5494 page = eb->pages[i]; in read_extent_buffer_pages()
5509 page = eb->pages[i]; in read_extent_buffer_pages()
5517 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in read_extent_buffer_pages()
5521 clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); in read_extent_buffer_pages()
5522 eb->read_mirror = 0; in read_extent_buffer_pages()
5523 atomic_set(&eb->io_pages, num_reads); in read_extent_buffer_pages()
5528 check_buffer_tree_ref(eb); in read_extent_buffer_pages()
5530 page = eb->pages[i]; in read_extent_buffer_pages()
5534 atomic_dec(&eb->io_pages); in read_extent_buffer_pages()
5553 atomic_dec(&eb->io_pages); in read_extent_buffer_pages()
5570 page = eb->pages[i]; in read_extent_buffer_pages()
5581 page = eb->pages[locked_pages]; in read_extent_buffer_pages()
5587 static bool report_eb_range(const struct extent_buffer *eb, unsigned long start, in report_eb_range() argument
5590 btrfs_warn(eb->fs_info, in report_eb_range()
5592 eb->start, eb->len, start, len); in report_eb_range()
5605 static inline int check_eb_range(const struct extent_buffer *eb, in check_eb_range() argument
5611 if (unlikely(check_add_overflow(start, len, &offset) || offset > eb->len)) in check_eb_range()
5612 return report_eb_range(eb, start, len); in check_eb_range()
5617 void read_extent_buffer(const struct extent_buffer *eb, void *dstv, in read_extent_buffer() argument
5627 if (check_eb_range(eb, start, len)) in read_extent_buffer()
5633 page = eb->pages[i]; in read_extent_buffer()
5646 int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb, in read_extent_buffer_to_user_nofault() argument
5658 WARN_ON(start > eb->len); in read_extent_buffer_to_user_nofault()
5659 WARN_ON(start + len > eb->start + eb->len); in read_extent_buffer_to_user_nofault()
5664 page = eb->pages[i]; in read_extent_buffer_to_user_nofault()
5682 int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv, in memcmp_extent_buffer() argument
5693 if (check_eb_range(eb, start, len)) in memcmp_extent_buffer()
5699 page = eb->pages[i]; in memcmp_extent_buffer()
5716 void write_extent_buffer_chunk_tree_uuid(const struct extent_buffer *eb, in write_extent_buffer_chunk_tree_uuid() argument
5721 WARN_ON(!PageUptodate(eb->pages[0])); in write_extent_buffer_chunk_tree_uuid()
5722 kaddr = page_address(eb->pages[0]); in write_extent_buffer_chunk_tree_uuid()
5727 void write_extent_buffer_fsid(const struct extent_buffer *eb, const void *srcv) in write_extent_buffer_fsid() argument
5731 WARN_ON(!PageUptodate(eb->pages[0])); in write_extent_buffer_fsid()
5732 kaddr = page_address(eb->pages[0]); in write_extent_buffer_fsid()
5737 void write_extent_buffer(const struct extent_buffer *eb, const void *srcv, in write_extent_buffer() argument
5747 if (check_eb_range(eb, start, len)) in write_extent_buffer()
5753 page = eb->pages[i]; in write_extent_buffer()
5767 void memzero_extent_buffer(const struct extent_buffer *eb, unsigned long start, in memzero_extent_buffer() argument
5776 if (check_eb_range(eb, start, len)) in memzero_extent_buffer()
5782 page = eb->pages[i]; in memzero_extent_buffer()
5858 static inline void eb_bitmap_offset(const struct extent_buffer *eb, in eb_bitmap_offset() argument
5883 int extent_buffer_test_bit(const struct extent_buffer *eb, unsigned long start, in extent_buffer_test_bit() argument
5891 eb_bitmap_offset(eb, start, nr, &i, &offset); in extent_buffer_test_bit()
5892 page = eb->pages[i]; in extent_buffer_test_bit()
5905 void extent_buffer_bitmap_set(const struct extent_buffer *eb, unsigned long start, in extent_buffer_bitmap_set() argument
5916 eb_bitmap_offset(eb, start, pos, &i, &offset); in extent_buffer_bitmap_set()
5917 page = eb->pages[i]; in extent_buffer_bitmap_set()
5928 page = eb->pages[++i]; in extent_buffer_bitmap_set()
5947 void extent_buffer_bitmap_clear(const struct extent_buffer *eb, in extent_buffer_bitmap_clear() argument
5959 eb_bitmap_offset(eb, start, pos, &i, &offset); in extent_buffer_bitmap_clear()
5960 page = eb->pages[i]; in extent_buffer_bitmap_clear()
5971 page = eb->pages[++i]; in extent_buffer_bitmap_clear()
6085 struct extent_buffer *eb; in try_release_extent_buffer() local
6097 eb = (struct extent_buffer *)page->private; in try_release_extent_buffer()
6098 BUG_ON(!eb); in try_release_extent_buffer()
6105 spin_lock(&eb->refs_lock); in try_release_extent_buffer()
6106 if (atomic_read(&eb->refs) != 1 || extent_buffer_under_io(eb)) { in try_release_extent_buffer()
6107 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
6117 if (!test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) { in try_release_extent_buffer()
6118 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
6122 return release_extent_buffer(eb); in try_release_extent_buffer()