Lines Matching refs:eb
66 struct extent_buffer *eb; in btrfs_leak_debug_check() local
79 eb = list_entry(buffers.next, struct extent_buffer, leak_list); in btrfs_leak_debug_check()
81 eb->start, eb->len, atomic_read(&eb->refs), eb->bflags); in btrfs_leak_debug_check()
82 list_del(&eb->leak_list); in btrfs_leak_debug_check()
83 kmem_cache_free(extent_buffer_cache, eb); in btrfs_leak_debug_check()
2259 int btrfs_repair_eb_io_failure(struct extent_buffer *eb, int mirror_num) in btrfs_repair_eb_io_failure() argument
2261 struct btrfs_fs_info *fs_info = eb->fs_info; in btrfs_repair_eb_io_failure()
2262 u64 start = eb->start; in btrfs_repair_eb_io_failure()
2263 int i, num_pages = num_extent_pages(eb); in btrfs_repair_eb_io_failure()
2270 struct page *p = eb->pages[i]; in btrfs_repair_eb_io_failure()
2794 struct extent_buffer *eb; in end_bio_extent_readpage() local
2796 eb = (struct extent_buffer *)page->private; in end_bio_extent_readpage()
2797 set_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); in end_bio_extent_readpage()
2798 eb->read_mirror = mirror; in end_bio_extent_readpage()
2799 atomic_dec(&eb->io_pages); in end_bio_extent_readpage()
2801 &eb->bflags)) in end_bio_extent_readpage()
2802 btree_readahead_hook(eb, -EIO); in end_bio_extent_readpage()
2999 static void attach_extent_buffer_page(struct extent_buffer *eb, in attach_extent_buffer_page() argument
3005 set_page_private(page, (unsigned long)eb); in attach_extent_buffer_page()
3007 WARN_ON(page->private != (unsigned long)eb); in attach_extent_buffer_page()
3628 void wait_on_extent_buffer_writeback(struct extent_buffer *eb) in wait_on_extent_buffer_writeback() argument
3630 wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK, in wait_on_extent_buffer_writeback()
3634 static void end_extent_buffer_writeback(struct extent_buffer *eb) in end_extent_buffer_writeback() argument
3636 clear_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in end_extent_buffer_writeback()
3638 wake_up_bit(&eb->bflags, EXTENT_BUFFER_WRITEBACK); in end_extent_buffer_writeback()
3648 static noinline_for_stack int lock_extent_buffer_for_io(struct extent_buffer *eb, in lock_extent_buffer_for_io() argument
3651 struct btrfs_fs_info *fs_info = eb->fs_info; in lock_extent_buffer_for_io()
3656 if (!btrfs_try_tree_write_lock(eb)) { in lock_extent_buffer_for_io()
3661 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3664 if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { in lock_extent_buffer_for_io()
3665 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3675 wait_on_extent_buffer_writeback(eb); in lock_extent_buffer_for_io()
3676 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3677 if (!test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) in lock_extent_buffer_for_io()
3679 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3688 spin_lock(&eb->refs_lock); in lock_extent_buffer_for_io()
3689 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)) { in lock_extent_buffer_for_io()
3690 set_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in lock_extent_buffer_for_io()
3691 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3692 btrfs_set_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); in lock_extent_buffer_for_io()
3694 -eb->len, in lock_extent_buffer_for_io()
3698 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3701 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3706 num_pages = num_extent_pages(eb); in lock_extent_buffer_for_io()
3708 struct page *p = eb->pages[i]; in lock_extent_buffer_for_io()
3730 unlock_page(eb->pages[i]); in lock_extent_buffer_for_io()
3736 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3737 spin_lock(&eb->refs_lock); in lock_extent_buffer_for_io()
3738 set_bit(EXTENT_BUFFER_DIRTY, &eb->bflags); in lock_extent_buffer_for_io()
3739 end_extent_buffer_writeback(eb); in lock_extent_buffer_for_io()
3740 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3741 percpu_counter_add_batch(&fs_info->dirty_metadata_bytes, eb->len, in lock_extent_buffer_for_io()
3743 btrfs_clear_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); in lock_extent_buffer_for_io()
3744 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3750 struct extent_buffer *eb = (struct extent_buffer *)page->private; in set_btree_ioerr() local
3754 if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) in set_btree_ioerr()
3761 clear_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in set_btree_ioerr()
3767 fs_info = eb->fs_info; in set_btree_ioerr()
3769 eb->len, fs_info->dirty_metadata_batch); in set_btree_ioerr()
3809 switch (eb->log_index) { in set_btree_ioerr()
3811 set_bit(BTRFS_FS_BTREE_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3814 set_bit(BTRFS_FS_LOG1_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3817 set_bit(BTRFS_FS_LOG2_ERR, &eb->fs_info->flags); in set_btree_ioerr()
3827 struct extent_buffer *eb; in end_bio_extent_buffer_writepage() local
3835 eb = (struct extent_buffer *)page->private; in end_bio_extent_buffer_writepage()
3836 BUG_ON(!eb); in end_bio_extent_buffer_writepage()
3837 done = atomic_dec_and_test(&eb->io_pages); in end_bio_extent_buffer_writepage()
3840 test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) { in end_bio_extent_buffer_writepage()
3850 end_extent_buffer_writeback(eb); in end_bio_extent_buffer_writepage()
3856 static noinline_for_stack int write_one_eb(struct extent_buffer *eb, in write_one_eb() argument
3860 struct btrfs_fs_info *fs_info = eb->fs_info; in write_one_eb()
3863 u64 offset = eb->start; in write_one_eb()
3870 clear_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags); in write_one_eb()
3871 num_pages = num_extent_pages(eb); in write_one_eb()
3872 atomic_set(&eb->io_pages, num_pages); in write_one_eb()
3875 nritems = btrfs_header_nritems(eb); in write_one_eb()
3876 if (btrfs_header_level(eb) > 0) { in write_one_eb()
3879 memzero_extent_buffer(eb, end, eb->len - end); in write_one_eb()
3886 end = BTRFS_LEAF_DATA_OFFSET + leaf_data_end(eb); in write_one_eb()
3887 memzero_extent_buffer(eb, start, end - start); in write_one_eb()
3891 struct page *p = eb->pages[i]; in write_one_eb()
3904 if (atomic_sub_and_test(num_pages - i, &eb->io_pages)) in write_one_eb()
3905 end_extent_buffer_writeback(eb); in write_one_eb()
3916 struct page *p = eb->pages[i]; in write_one_eb()
3929 struct extent_buffer *eb, *prev_eb = NULL; in btree_write_cache_pages() local
3985 eb = (struct extent_buffer *)page->private; in btree_write_cache_pages()
3992 if (WARN_ON(!eb)) { in btree_write_cache_pages()
3997 if (eb == prev_eb) { in btree_write_cache_pages()
4002 ret = atomic_inc_not_zero(&eb->refs); in btree_write_cache_pages()
4007 prev_eb = eb; in btree_write_cache_pages()
4008 ret = lock_extent_buffer_for_io(eb, &epd); in btree_write_cache_pages()
4010 free_extent_buffer(eb); in btree_write_cache_pages()
4014 free_extent_buffer(eb); in btree_write_cache_pages()
4018 ret = write_one_eb(eb, wbc, &epd); in btree_write_cache_pages()
4021 free_extent_buffer(eb); in btree_write_cache_pages()
4024 free_extent_buffer(eb); in btree_write_cache_pages()
4871 static void __free_extent_buffer(struct extent_buffer *eb) in __free_extent_buffer() argument
4873 btrfs_leak_debug_del(&eb->leak_list); in __free_extent_buffer()
4874 kmem_cache_free(extent_buffer_cache, eb); in __free_extent_buffer()
4877 int extent_buffer_under_io(struct extent_buffer *eb) in extent_buffer_under_io() argument
4879 return (atomic_read(&eb->io_pages) || in extent_buffer_under_io()
4880 test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags) || in extent_buffer_under_io()
4881 test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in extent_buffer_under_io()
4887 static void btrfs_release_extent_buffer_pages(struct extent_buffer *eb) in btrfs_release_extent_buffer_pages() argument
4891 int mapped = !test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags); in btrfs_release_extent_buffer_pages()
4893 BUG_ON(extent_buffer_under_io(eb)); in btrfs_release_extent_buffer_pages()
4895 num_pages = num_extent_pages(eb); in btrfs_release_extent_buffer_pages()
4897 struct page *page = eb->pages[i]; in btrfs_release_extent_buffer_pages()
4911 page->private == (unsigned long)eb) { in btrfs_release_extent_buffer_pages()
4912 BUG_ON(test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in btrfs_release_extent_buffer_pages()
4936 static inline void btrfs_release_extent_buffer(struct extent_buffer *eb) in btrfs_release_extent_buffer() argument
4938 btrfs_release_extent_buffer_pages(eb); 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_nested = 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(&eb->leak_list, &buffers); in __alloc_extent_buffer()
4962 spin_lock_init(&eb->refs_lock); in __alloc_extent_buffer()
4963 atomic_set(&eb->refs, 1); in __alloc_extent_buffer()
4964 atomic_set(&eb->io_pages, 0); in __alloc_extent_buffer()
4974 eb->spinning_writers = 0; in __alloc_extent_buffer()
4975 atomic_set(&eb->spinning_readers, 0); in __alloc_extent_buffer()
4976 atomic_set(&eb->read_locks, 0); in __alloc_extent_buffer()
4977 eb->write_locks = 0; in __alloc_extent_buffer()
4980 return eb; in __alloc_extent_buffer()
5016 struct extent_buffer *eb; in __alloc_dummy_extent_buffer() local
5020 eb = __alloc_extent_buffer(fs_info, start, len); in __alloc_dummy_extent_buffer()
5021 if (!eb) in __alloc_dummy_extent_buffer()
5024 num_pages = num_extent_pages(eb); in __alloc_dummy_extent_buffer()
5026 eb->pages[i] = alloc_page(GFP_NOFS); in __alloc_dummy_extent_buffer()
5027 if (!eb->pages[i]) in __alloc_dummy_extent_buffer()
5030 set_extent_buffer_uptodate(eb); in __alloc_dummy_extent_buffer()
5031 btrfs_set_header_nritems(eb, 0); in __alloc_dummy_extent_buffer()
5032 set_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags); in __alloc_dummy_extent_buffer()
5034 return eb; in __alloc_dummy_extent_buffer()
5037 __free_page(eb->pages[i - 1]); in __alloc_dummy_extent_buffer()
5038 __free_extent_buffer(eb); in __alloc_dummy_extent_buffer()
5048 static void check_buffer_tree_ref(struct extent_buffer *eb) in check_buffer_tree_ref() argument
5074 refs = atomic_read(&eb->refs); in check_buffer_tree_ref()
5075 if (refs >= 2 && test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
5078 spin_lock(&eb->refs_lock); in check_buffer_tree_ref()
5079 if (!test_and_set_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
5080 atomic_inc(&eb->refs); in check_buffer_tree_ref()
5081 spin_unlock(&eb->refs_lock); in check_buffer_tree_ref()
5084 static void mark_extent_buffer_accessed(struct extent_buffer *eb, in mark_extent_buffer_accessed() argument
5089 check_buffer_tree_ref(eb); in mark_extent_buffer_accessed()
5091 num_pages = num_extent_pages(eb); in mark_extent_buffer_accessed()
5093 struct page *p = eb->pages[i]; in mark_extent_buffer_accessed()
5103 struct extent_buffer *eb; in find_extent_buffer() local
5106 eb = radix_tree_lookup(&fs_info->buffer_radix, in find_extent_buffer()
5108 if (eb && atomic_inc_not_zero(&eb->refs)) { in find_extent_buffer()
5125 if (test_bit(EXTENT_BUFFER_STALE, &eb->bflags)) { in find_extent_buffer()
5126 spin_lock(&eb->refs_lock); in find_extent_buffer()
5127 spin_unlock(&eb->refs_lock); in find_extent_buffer()
5129 mark_extent_buffer_accessed(eb, NULL); in find_extent_buffer()
5130 return eb; in find_extent_buffer()
5141 struct extent_buffer *eb, *exists = NULL; in alloc_test_extent_buffer() local
5144 eb = find_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
5145 if (eb) in alloc_test_extent_buffer()
5146 return eb; in alloc_test_extent_buffer()
5147 eb = alloc_dummy_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
5148 if (!eb) in alloc_test_extent_buffer()
5150 eb->fs_info = fs_info; in alloc_test_extent_buffer()
5159 start >> PAGE_SHIFT, eb); in alloc_test_extent_buffer()
5169 check_buffer_tree_ref(eb); in alloc_test_extent_buffer()
5170 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_test_extent_buffer()
5172 return eb; in alloc_test_extent_buffer()
5174 btrfs_release_extent_buffer(eb); in alloc_test_extent_buffer()
5186 struct extent_buffer *eb; in alloc_extent_buffer() local
5198 eb = find_extent_buffer(fs_info, start); in alloc_extent_buffer()
5199 if (eb) in alloc_extent_buffer()
5200 return eb; in alloc_extent_buffer()
5202 eb = __alloc_extent_buffer(fs_info, start, len); in alloc_extent_buffer()
5203 if (!eb) in alloc_extent_buffer()
5206 num_pages = num_extent_pages(eb); in alloc_extent_buffer()
5241 attach_extent_buffer_page(eb, p); in alloc_extent_buffer()
5244 eb->pages[i] = p; in alloc_extent_buffer()
5257 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in alloc_extent_buffer()
5267 start >> PAGE_SHIFT, eb); in alloc_extent_buffer()
5278 check_buffer_tree_ref(eb); in alloc_extent_buffer()
5279 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_extent_buffer()
5287 unlock_page(eb->pages[i]); in alloc_extent_buffer()
5288 return eb; in alloc_extent_buffer()
5291 WARN_ON(!atomic_dec_and_test(&eb->refs)); in alloc_extent_buffer()
5293 if (eb->pages[i]) in alloc_extent_buffer()
5294 unlock_page(eb->pages[i]); in alloc_extent_buffer()
5297 btrfs_release_extent_buffer(eb); in alloc_extent_buffer()
5303 struct extent_buffer *eb = in btrfs_release_extent_buffer_rcu() local
5306 __free_extent_buffer(eb); in btrfs_release_extent_buffer_rcu()
5309 static int release_extent_buffer(struct extent_buffer *eb) in release_extent_buffer() argument
5311 lockdep_assert_held(&eb->refs_lock); in release_extent_buffer()
5313 WARN_ON(atomic_read(&eb->refs) == 0); in release_extent_buffer()
5314 if (atomic_dec_and_test(&eb->refs)) { in release_extent_buffer()
5315 if (test_and_clear_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags)) { in release_extent_buffer()
5316 struct btrfs_fs_info *fs_info = eb->fs_info; in release_extent_buffer()
5318 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5322 eb->start >> PAGE_SHIFT); in release_extent_buffer()
5325 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5329 btrfs_release_extent_buffer_pages(eb); in release_extent_buffer()
5331 if (unlikely(test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags))) { in release_extent_buffer()
5332 __free_extent_buffer(eb); in release_extent_buffer()
5336 call_rcu(&eb->rcu_head, btrfs_release_extent_buffer_rcu); in release_extent_buffer()
5339 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5344 void free_extent_buffer(struct extent_buffer *eb) in free_extent_buffer() argument
5348 if (!eb) in free_extent_buffer()
5352 refs = atomic_read(&eb->refs); in free_extent_buffer()
5353 if ((!test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && refs <= 3) in free_extent_buffer()
5354 || (test_bit(EXTENT_BUFFER_UNMAPPED, &eb->bflags) && in free_extent_buffer()
5357 old = atomic_cmpxchg(&eb->refs, refs, refs - 1); in free_extent_buffer()
5362 spin_lock(&eb->refs_lock); in free_extent_buffer()
5363 if (atomic_read(&eb->refs) == 2 && in free_extent_buffer()
5364 test_bit(EXTENT_BUFFER_STALE, &eb->bflags) && in free_extent_buffer()
5365 !extent_buffer_under_io(eb) && in free_extent_buffer()
5366 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer()
5367 atomic_dec(&eb->refs); in free_extent_buffer()
5373 release_extent_buffer(eb); in free_extent_buffer()
5376 void free_extent_buffer_stale(struct extent_buffer *eb) in free_extent_buffer_stale() argument
5378 if (!eb) in free_extent_buffer_stale()
5381 spin_lock(&eb->refs_lock); in free_extent_buffer_stale()
5382 set_bit(EXTENT_BUFFER_STALE, &eb->bflags); in free_extent_buffer_stale()
5384 if (atomic_read(&eb->refs) == 2 && !extent_buffer_under_io(eb) && in free_extent_buffer_stale()
5385 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer_stale()
5386 atomic_dec(&eb->refs); in free_extent_buffer_stale()
5387 release_extent_buffer(eb); in free_extent_buffer_stale()
5390 void clear_extent_buffer_dirty(struct extent_buffer *eb) in clear_extent_buffer_dirty() argument
5396 num_pages = num_extent_pages(eb); in clear_extent_buffer_dirty()
5399 page = eb->pages[i]; in clear_extent_buffer_dirty()
5415 WARN_ON(atomic_read(&eb->refs) == 0); in clear_extent_buffer_dirty()
5418 bool set_extent_buffer_dirty(struct extent_buffer *eb) in set_extent_buffer_dirty() argument
5424 check_buffer_tree_ref(eb); in set_extent_buffer_dirty()
5426 was_dirty = test_and_set_bit(EXTENT_BUFFER_DIRTY, &eb->bflags); in set_extent_buffer_dirty()
5428 num_pages = num_extent_pages(eb); in set_extent_buffer_dirty()
5429 WARN_ON(atomic_read(&eb->refs) == 0); in set_extent_buffer_dirty()
5430 WARN_ON(!test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)); in set_extent_buffer_dirty()
5434 set_page_dirty(eb->pages[i]); in set_extent_buffer_dirty()
5438 ASSERT(PageDirty(eb->pages[i])); in set_extent_buffer_dirty()
5444 void clear_extent_buffer_uptodate(struct extent_buffer *eb) in clear_extent_buffer_uptodate() argument
5450 clear_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in clear_extent_buffer_uptodate()
5451 num_pages = num_extent_pages(eb); in clear_extent_buffer_uptodate()
5453 page = eb->pages[i]; in clear_extent_buffer_uptodate()
5459 void set_extent_buffer_uptodate(struct extent_buffer *eb) in set_extent_buffer_uptodate() argument
5465 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in set_extent_buffer_uptodate()
5466 num_pages = num_extent_pages(eb); in set_extent_buffer_uptodate()
5468 page = eb->pages[i]; in set_extent_buffer_uptodate()
5473 int read_extent_buffer_pages(struct extent_buffer *eb, int wait, int mirror_num) in read_extent_buffer_pages() argument
5485 struct extent_io_tree *tree = &BTRFS_I(eb->fs_info->btree_inode)->io_tree; in read_extent_buffer_pages()
5487 if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) in read_extent_buffer_pages()
5490 num_pages = num_extent_pages(eb); in read_extent_buffer_pages()
5492 page = eb->pages[i]; in read_extent_buffer_pages()
5507 page = eb->pages[i]; in read_extent_buffer_pages()
5515 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in read_extent_buffer_pages()
5519 clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); in read_extent_buffer_pages()
5520 eb->read_mirror = 0; in read_extent_buffer_pages()
5521 atomic_set(&eb->io_pages, num_reads); in read_extent_buffer_pages()
5526 check_buffer_tree_ref(eb); in read_extent_buffer_pages()
5528 page = eb->pages[i]; in read_extent_buffer_pages()
5532 atomic_dec(&eb->io_pages); in read_extent_buffer_pages()
5552 atomic_dec(&eb->io_pages); in read_extent_buffer_pages()
5569 page = eb->pages[i]; in read_extent_buffer_pages()
5580 page = eb->pages[locked_pages]; in read_extent_buffer_pages()
5586 void read_extent_buffer(const struct extent_buffer *eb, void *dstv, in read_extent_buffer() argument
5594 size_t start_offset = offset_in_page(eb->start); in read_extent_buffer()
5597 if (start + len > eb->len) { in read_extent_buffer()
5599 eb->start, eb->len, start, len); in read_extent_buffer()
5607 page = eb->pages[i]; in read_extent_buffer()
5620 int read_extent_buffer_to_user_nofault(const struct extent_buffer *eb, in read_extent_buffer_to_user_nofault() argument
5629 size_t start_offset = offset_in_page(eb->start); in read_extent_buffer_to_user_nofault()
5633 WARN_ON(start > eb->len); in read_extent_buffer_to_user_nofault()
5634 WARN_ON(start + len > eb->start + eb->len); in read_extent_buffer_to_user_nofault()
5639 page = eb->pages[i]; in read_extent_buffer_to_user_nofault()
5662 int map_private_extent_buffer(const struct extent_buffer *eb, in map_private_extent_buffer() argument
5670 size_t start_offset = offset_in_page(eb->start); in map_private_extent_buffer()
5675 if (start + min_len > eb->len) { in map_private_extent_buffer()
5677 eb->start, eb->len, start, min_len); in map_private_extent_buffer()
5692 p = eb->pages[i]; in map_private_extent_buffer()
5699 int memcmp_extent_buffer(const struct extent_buffer *eb, const void *ptrv, in memcmp_extent_buffer() argument
5707 size_t start_offset = offset_in_page(eb->start); in memcmp_extent_buffer()
5711 WARN_ON(start > eb->len); in memcmp_extent_buffer()
5712 WARN_ON(start + len > eb->start + eb->len); in memcmp_extent_buffer()
5717 page = eb->pages[i]; in memcmp_extent_buffer()
5734 void write_extent_buffer_chunk_tree_uuid(struct extent_buffer *eb, in write_extent_buffer_chunk_tree_uuid() argument
5739 WARN_ON(!PageUptodate(eb->pages[0])); in write_extent_buffer_chunk_tree_uuid()
5740 kaddr = page_address(eb->pages[0]); in write_extent_buffer_chunk_tree_uuid()
5745 void write_extent_buffer_fsid(struct extent_buffer *eb, const void *srcv) in write_extent_buffer_fsid() argument
5749 WARN_ON(!PageUptodate(eb->pages[0])); in write_extent_buffer_fsid()
5750 kaddr = page_address(eb->pages[0]); in write_extent_buffer_fsid()
5755 void write_extent_buffer(struct extent_buffer *eb, const void *srcv, in write_extent_buffer() argument
5763 size_t start_offset = offset_in_page(eb->start); in write_extent_buffer()
5766 WARN_ON(start > eb->len); in write_extent_buffer()
5767 WARN_ON(start + len > eb->start + eb->len); in write_extent_buffer()
5772 page = eb->pages[i]; in write_extent_buffer()
5786 void memzero_extent_buffer(struct extent_buffer *eb, unsigned long start, in memzero_extent_buffer() argument
5793 size_t start_offset = offset_in_page(eb->start); in memzero_extent_buffer()
5796 WARN_ON(start > eb->len); in memzero_extent_buffer()
5797 WARN_ON(start + len > eb->start + eb->len); in memzero_extent_buffer()
5802 page = eb->pages[i]; in memzero_extent_buffer()
5874 static inline void eb_bitmap_offset(struct extent_buffer *eb, in eb_bitmap_offset() argument
5879 size_t start_offset = offset_in_page(eb->start); in eb_bitmap_offset()
5900 int extent_buffer_test_bit(struct extent_buffer *eb, unsigned long start, in extent_buffer_test_bit() argument
5908 eb_bitmap_offset(eb, start, nr, &i, &offset); in extent_buffer_test_bit()
5909 page = eb->pages[i]; in extent_buffer_test_bit()
5922 void extent_buffer_bitmap_set(struct extent_buffer *eb, unsigned long start, in extent_buffer_bitmap_set() argument
5933 eb_bitmap_offset(eb, start, pos, &i, &offset); in extent_buffer_bitmap_set()
5934 page = eb->pages[i]; in extent_buffer_bitmap_set()
5945 page = eb->pages[++i]; in extent_buffer_bitmap_set()
5964 void extent_buffer_bitmap_clear(struct extent_buffer *eb, unsigned long start, in extent_buffer_bitmap_clear() argument
5975 eb_bitmap_offset(eb, start, pos, &i, &offset); in extent_buffer_bitmap_clear()
5976 page = eb->pages[i]; in extent_buffer_bitmap_clear()
5987 page = eb->pages[++i]; in extent_buffer_bitmap_clear()
6121 struct extent_buffer *eb; in try_release_extent_buffer() local
6133 eb = (struct extent_buffer *)page->private; in try_release_extent_buffer()
6134 BUG_ON(!eb); in try_release_extent_buffer()
6141 spin_lock(&eb->refs_lock); in try_release_extent_buffer()
6142 if (atomic_read(&eb->refs) != 1 || extent_buffer_under_io(eb)) { in try_release_extent_buffer()
6143 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
6153 if (!test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) { in try_release_extent_buffer()
6154 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
6158 return release_extent_buffer(eb); in try_release_extent_buffer()