Lines Matching refs:eb

63 	struct extent_buffer *eb;  in btrfs_leak_debug_check()  local
76 eb = list_entry(buffers.next, struct extent_buffer, leak_list); in btrfs_leak_debug_check()
79 eb->start, eb->len, atomic_read(&eb->refs)); in btrfs_leak_debug_check()
80 list_del(&eb->leak_list); in btrfs_leak_debug_check()
81 kmem_cache_free(extent_buffer_cache, eb); in btrfs_leak_debug_check()
2084 int repair_eb_io_failure(struct btrfs_root *root, struct extent_buffer *eb, in repair_eb_io_failure() argument
2087 u64 start = eb->start; in repair_eb_io_failure()
2088 unsigned long i, num_pages = num_extent_pages(eb->start, eb->len); in repair_eb_io_failure()
2095 struct page *p = eb->pages[i]; in repair_eb_io_failure()
2852 static void attach_extent_buffer_page(struct extent_buffer *eb, in attach_extent_buffer_page() argument
2858 set_page_private(page, (unsigned long)eb); in attach_extent_buffer_page()
2860 WARN_ON(page->private != (unsigned long)eb); in attach_extent_buffer_page()
3601 void wait_on_extent_buffer_writeback(struct extent_buffer *eb) in wait_on_extent_buffer_writeback() argument
3603 wait_on_bit_io(&eb->bflags, EXTENT_BUFFER_WRITEBACK, in wait_on_extent_buffer_writeback()
3608 lock_extent_buffer_for_io(struct extent_buffer *eb, in lock_extent_buffer_for_io() argument
3616 if (!btrfs_try_tree_write_lock(eb)) { in lock_extent_buffer_for_io()
3619 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3622 if (test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) { in lock_extent_buffer_for_io()
3623 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3631 wait_on_extent_buffer_writeback(eb); in lock_extent_buffer_for_io()
3632 btrfs_tree_lock(eb); in lock_extent_buffer_for_io()
3633 if (!test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags)) in lock_extent_buffer_for_io()
3635 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3644 spin_lock(&eb->refs_lock); in lock_extent_buffer_for_io()
3645 if (test_and_clear_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)) { in lock_extent_buffer_for_io()
3646 set_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in lock_extent_buffer_for_io()
3647 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3648 btrfs_set_header_flag(eb, BTRFS_HEADER_FLAG_WRITTEN); in lock_extent_buffer_for_io()
3650 -eb->len, in lock_extent_buffer_for_io()
3654 spin_unlock(&eb->refs_lock); in lock_extent_buffer_for_io()
3657 btrfs_tree_unlock(eb); in lock_extent_buffer_for_io()
3662 num_pages = num_extent_pages(eb->start, eb->len); in lock_extent_buffer_for_io()
3664 struct page *p = eb->pages[i]; in lock_extent_buffer_for_io()
3678 static void end_extent_buffer_writeback(struct extent_buffer *eb) in end_extent_buffer_writeback() argument
3680 clear_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags); in end_extent_buffer_writeback()
3682 wake_up_bit(&eb->bflags, EXTENT_BUFFER_WRITEBACK); in end_extent_buffer_writeback()
3687 struct extent_buffer *eb = (struct extent_buffer *)page->private; in set_btree_ioerr() local
3688 struct btrfs_inode *btree_ino = BTRFS_I(eb->fs_info->btree_inode); in set_btree_ioerr()
3691 if (test_and_set_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) in set_btree_ioerr()
3732 switch (eb->log_index) { in set_btree_ioerr()
3750 struct extent_buffer *eb; in end_bio_extent_buffer_writepage() local
3756 eb = (struct extent_buffer *)page->private; in end_bio_extent_buffer_writepage()
3757 BUG_ON(!eb); in end_bio_extent_buffer_writepage()
3758 done = atomic_dec_and_test(&eb->io_pages); in end_bio_extent_buffer_writepage()
3760 if (err || test_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags)) { in end_bio_extent_buffer_writepage()
3770 end_extent_buffer_writeback(eb); in end_bio_extent_buffer_writepage()
3776 static noinline_for_stack int write_one_eb(struct extent_buffer *eb, in write_one_eb() argument
3783 u64 offset = eb->start; in write_one_eb()
3789 clear_bit(EXTENT_BUFFER_WRITE_ERR, &eb->bflags); in write_one_eb()
3790 num_pages = num_extent_pages(eb->start, eb->len); in write_one_eb()
3791 atomic_set(&eb->io_pages, num_pages); in write_one_eb()
3792 if (btrfs_header_owner(eb) == BTRFS_TREE_LOG_OBJECTID) in write_one_eb()
3796 struct page *p = eb->pages[i]; in write_one_eb()
3808 if (atomic_sub_and_test(num_pages - i, &eb->io_pages)) in write_one_eb()
3809 end_extent_buffer_writeback(eb); in write_one_eb()
3820 struct page *p = eb->pages[i]; in write_one_eb()
3834 struct extent_buffer *eb, *prev_eb = NULL; in btree_write_cache_pages() local
3891 eb = (struct extent_buffer *)page->private; in btree_write_cache_pages()
3898 if (WARN_ON(!eb)) { in btree_write_cache_pages()
3903 if (eb == prev_eb) { in btree_write_cache_pages()
3908 ret = atomic_inc_not_zero(&eb->refs); in btree_write_cache_pages()
3913 prev_eb = eb; in btree_write_cache_pages()
3914 ret = lock_extent_buffer_for_io(eb, fs_info, &epd); in btree_write_cache_pages()
3916 free_extent_buffer(eb); in btree_write_cache_pages()
3920 ret = write_one_eb(eb, fs_info, wbc, &epd); in btree_write_cache_pages()
3923 free_extent_buffer(eb); in btree_write_cache_pages()
3926 free_extent_buffer(eb); in btree_write_cache_pages()
4584 static void __free_extent_buffer(struct extent_buffer *eb) in __free_extent_buffer() argument
4586 btrfs_leak_debug_del(&eb->leak_list); in __free_extent_buffer()
4587 kmem_cache_free(extent_buffer_cache, eb); in __free_extent_buffer()
4590 int extent_buffer_under_io(struct extent_buffer *eb) in extent_buffer_under_io() argument
4592 return (atomic_read(&eb->io_pages) || in extent_buffer_under_io()
4593 test_bit(EXTENT_BUFFER_WRITEBACK, &eb->bflags) || in extent_buffer_under_io()
4594 test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in extent_buffer_under_io()
4600 static void btrfs_release_extent_buffer_page(struct extent_buffer *eb) in btrfs_release_extent_buffer_page() argument
4604 int mapped = !test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags); in btrfs_release_extent_buffer_page()
4606 BUG_ON(extent_buffer_under_io(eb)); in btrfs_release_extent_buffer_page()
4608 index = num_extent_pages(eb->start, eb->len); in btrfs_release_extent_buffer_page()
4614 page = eb->pages[index]; in btrfs_release_extent_buffer_page()
4627 page->private == (unsigned long)eb) { in btrfs_release_extent_buffer_page()
4628 BUG_ON(test_bit(EXTENT_BUFFER_DIRTY, &eb->bflags)); in btrfs_release_extent_buffer_page()
4652 static inline void btrfs_release_extent_buffer(struct extent_buffer *eb) in btrfs_release_extent_buffer() argument
4654 btrfs_release_extent_buffer_page(eb); in btrfs_release_extent_buffer()
4655 __free_extent_buffer(eb); in btrfs_release_extent_buffer()
4662 struct extent_buffer *eb = NULL; in __alloc_extent_buffer() local
4664 eb = kmem_cache_zalloc(extent_buffer_cache, GFP_NOFS); in __alloc_extent_buffer()
4665 if (eb == NULL) in __alloc_extent_buffer()
4667 eb->start = start; in __alloc_extent_buffer()
4668 eb->len = len; in __alloc_extent_buffer()
4669 eb->fs_info = fs_info; in __alloc_extent_buffer()
4670 eb->bflags = 0; in __alloc_extent_buffer()
4671 rwlock_init(&eb->lock); in __alloc_extent_buffer()
4672 atomic_set(&eb->write_locks, 0); in __alloc_extent_buffer()
4673 atomic_set(&eb->read_locks, 0); in __alloc_extent_buffer()
4674 atomic_set(&eb->blocking_readers, 0); in __alloc_extent_buffer()
4675 atomic_set(&eb->blocking_writers, 0); in __alloc_extent_buffer()
4676 atomic_set(&eb->spinning_readers, 0); in __alloc_extent_buffer()
4677 atomic_set(&eb->spinning_writers, 0); in __alloc_extent_buffer()
4678 eb->lock_nested = 0; in __alloc_extent_buffer()
4679 init_waitqueue_head(&eb->write_lock_wq); in __alloc_extent_buffer()
4680 init_waitqueue_head(&eb->read_lock_wq); in __alloc_extent_buffer()
4682 btrfs_leak_debug_add(&eb->leak_list, &buffers); in __alloc_extent_buffer()
4684 spin_lock_init(&eb->refs_lock); in __alloc_extent_buffer()
4685 atomic_set(&eb->refs, 1); in __alloc_extent_buffer()
4686 atomic_set(&eb->io_pages, 0); in __alloc_extent_buffer()
4695 return eb; in __alloc_extent_buffer()
4731 struct extent_buffer *eb; in alloc_dummy_extent_buffer() local
4747 eb = __alloc_extent_buffer(fs_info, start, len); in alloc_dummy_extent_buffer()
4748 if (!eb) in alloc_dummy_extent_buffer()
4752 eb->pages[i] = alloc_page(GFP_NOFS); in alloc_dummy_extent_buffer()
4753 if (!eb->pages[i]) in alloc_dummy_extent_buffer()
4756 set_extent_buffer_uptodate(eb); in alloc_dummy_extent_buffer()
4757 btrfs_set_header_nritems(eb, 0); in alloc_dummy_extent_buffer()
4758 set_bit(EXTENT_BUFFER_DUMMY, &eb->bflags); in alloc_dummy_extent_buffer()
4760 return eb; in alloc_dummy_extent_buffer()
4763 __free_page(eb->pages[i - 1]); in alloc_dummy_extent_buffer()
4764 __free_extent_buffer(eb); in alloc_dummy_extent_buffer()
4768 static void check_buffer_tree_ref(struct extent_buffer *eb) in check_buffer_tree_ref() argument
4791 refs = atomic_read(&eb->refs); in check_buffer_tree_ref()
4792 if (refs >= 2 && test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
4795 spin_lock(&eb->refs_lock); in check_buffer_tree_ref()
4796 if (!test_and_set_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in check_buffer_tree_ref()
4797 atomic_inc(&eb->refs); in check_buffer_tree_ref()
4798 spin_unlock(&eb->refs_lock); in check_buffer_tree_ref()
4801 static void mark_extent_buffer_accessed(struct extent_buffer *eb, in mark_extent_buffer_accessed() argument
4806 check_buffer_tree_ref(eb); in mark_extent_buffer_accessed()
4808 num_pages = num_extent_pages(eb->start, eb->len); in mark_extent_buffer_accessed()
4810 struct page *p = eb->pages[i]; in mark_extent_buffer_accessed()
4820 struct extent_buffer *eb; in find_extent_buffer() local
4823 eb = radix_tree_lookup(&fs_info->buffer_radix, in find_extent_buffer()
4825 if (eb && atomic_inc_not_zero(&eb->refs)) { in find_extent_buffer()
4842 if (test_bit(EXTENT_BUFFER_STALE, &eb->bflags)) { in find_extent_buffer()
4843 spin_lock(&eb->refs_lock); in find_extent_buffer()
4844 spin_unlock(&eb->refs_lock); in find_extent_buffer()
4846 mark_extent_buffer_accessed(eb, NULL); in find_extent_buffer()
4847 return eb; in find_extent_buffer()
4858 struct extent_buffer *eb, *exists = NULL; in alloc_test_extent_buffer() local
4861 eb = find_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
4862 if (eb) in alloc_test_extent_buffer()
4863 return eb; in alloc_test_extent_buffer()
4864 eb = alloc_dummy_extent_buffer(fs_info, start); in alloc_test_extent_buffer()
4865 if (!eb) in alloc_test_extent_buffer()
4867 eb->fs_info = fs_info; in alloc_test_extent_buffer()
4874 start >> PAGE_CACHE_SHIFT, eb); in alloc_test_extent_buffer()
4884 check_buffer_tree_ref(eb); in alloc_test_extent_buffer()
4885 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_test_extent_buffer()
4893 atomic_inc(&eb->refs); in alloc_test_extent_buffer()
4894 return eb; in alloc_test_extent_buffer()
4896 btrfs_release_extent_buffer(eb); in alloc_test_extent_buffer()
4908 struct extent_buffer *eb; in alloc_extent_buffer() local
4915 eb = find_extent_buffer(fs_info, start); in alloc_extent_buffer()
4916 if (eb) in alloc_extent_buffer()
4917 return eb; in alloc_extent_buffer()
4919 eb = __alloc_extent_buffer(fs_info, start, len); in alloc_extent_buffer()
4920 if (!eb) in alloc_extent_buffer()
4955 attach_extent_buffer_page(eb, p); in alloc_extent_buffer()
4958 eb->pages[i] = p; in alloc_extent_buffer()
4968 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in alloc_extent_buffer()
4976 start >> PAGE_CACHE_SHIFT, eb); in alloc_extent_buffer()
4987 check_buffer_tree_ref(eb); in alloc_extent_buffer()
4988 set_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags); in alloc_extent_buffer()
4999 SetPageChecked(eb->pages[0]); in alloc_extent_buffer()
5001 p = eb->pages[i]; in alloc_extent_buffer()
5005 unlock_page(eb->pages[0]); in alloc_extent_buffer()
5006 return eb; in alloc_extent_buffer()
5009 WARN_ON(!atomic_dec_and_test(&eb->refs)); in alloc_extent_buffer()
5011 if (eb->pages[i]) in alloc_extent_buffer()
5012 unlock_page(eb->pages[i]); in alloc_extent_buffer()
5015 btrfs_release_extent_buffer(eb); in alloc_extent_buffer()
5021 struct extent_buffer *eb = in btrfs_release_extent_buffer_rcu() local
5024 __free_extent_buffer(eb); in btrfs_release_extent_buffer_rcu()
5028 static int release_extent_buffer(struct extent_buffer *eb) in release_extent_buffer() argument
5030 WARN_ON(atomic_read(&eb->refs) == 0); in release_extent_buffer()
5031 if (atomic_dec_and_test(&eb->refs)) { in release_extent_buffer()
5032 if (test_and_clear_bit(EXTENT_BUFFER_IN_TREE, &eb->bflags)) { in release_extent_buffer()
5033 struct btrfs_fs_info *fs_info = eb->fs_info; in release_extent_buffer()
5035 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5039 eb->start >> PAGE_CACHE_SHIFT); in release_extent_buffer()
5042 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5046 btrfs_release_extent_buffer_page(eb); in release_extent_buffer()
5048 if (unlikely(test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags))) { in release_extent_buffer()
5049 __free_extent_buffer(eb); in release_extent_buffer()
5053 call_rcu(&eb->rcu_head, btrfs_release_extent_buffer_rcu); in release_extent_buffer()
5056 spin_unlock(&eb->refs_lock); in release_extent_buffer()
5061 void free_extent_buffer(struct extent_buffer *eb) in free_extent_buffer() argument
5065 if (!eb) in free_extent_buffer()
5069 refs = atomic_read(&eb->refs); in free_extent_buffer()
5072 old = atomic_cmpxchg(&eb->refs, refs, refs - 1); in free_extent_buffer()
5077 spin_lock(&eb->refs_lock); in free_extent_buffer()
5078 if (atomic_read(&eb->refs) == 2 && in free_extent_buffer()
5079 test_bit(EXTENT_BUFFER_DUMMY, &eb->bflags)) in free_extent_buffer()
5080 atomic_dec(&eb->refs); in free_extent_buffer()
5082 if (atomic_read(&eb->refs) == 2 && in free_extent_buffer()
5083 test_bit(EXTENT_BUFFER_STALE, &eb->bflags) && in free_extent_buffer()
5084 !extent_buffer_under_io(eb) && in free_extent_buffer()
5085 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer()
5086 atomic_dec(&eb->refs); in free_extent_buffer()
5092 release_extent_buffer(eb); in free_extent_buffer()
5095 void free_extent_buffer_stale(struct extent_buffer *eb) in free_extent_buffer_stale() argument
5097 if (!eb) in free_extent_buffer_stale()
5100 spin_lock(&eb->refs_lock); in free_extent_buffer_stale()
5101 set_bit(EXTENT_BUFFER_STALE, &eb->bflags); in free_extent_buffer_stale()
5103 if (atomic_read(&eb->refs) == 2 && !extent_buffer_under_io(eb) && in free_extent_buffer_stale()
5104 test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) in free_extent_buffer_stale()
5105 atomic_dec(&eb->refs); in free_extent_buffer_stale()
5106 release_extent_buffer(eb); in free_extent_buffer_stale()
5109 void clear_extent_buffer_dirty(struct extent_buffer *eb) in clear_extent_buffer_dirty() argument
5115 num_pages = num_extent_pages(eb->start, eb->len); in clear_extent_buffer_dirty()
5118 page = eb->pages[i]; in clear_extent_buffer_dirty()
5136 WARN_ON(atomic_read(&eb->refs) == 0); in clear_extent_buffer_dirty()
5139 int set_extent_buffer_dirty(struct extent_buffer *eb) in set_extent_buffer_dirty() argument
5145 check_buffer_tree_ref(eb); in set_extent_buffer_dirty()
5147 was_dirty = test_and_set_bit(EXTENT_BUFFER_DIRTY, &eb->bflags); in set_extent_buffer_dirty()
5149 num_pages = num_extent_pages(eb->start, eb->len); in set_extent_buffer_dirty()
5150 WARN_ON(atomic_read(&eb->refs) == 0); in set_extent_buffer_dirty()
5151 WARN_ON(!test_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)); in set_extent_buffer_dirty()
5154 set_page_dirty(eb->pages[i]); in set_extent_buffer_dirty()
5158 int clear_extent_buffer_uptodate(struct extent_buffer *eb) in clear_extent_buffer_uptodate() argument
5164 clear_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in clear_extent_buffer_uptodate()
5165 num_pages = num_extent_pages(eb->start, eb->len); in clear_extent_buffer_uptodate()
5167 page = eb->pages[i]; in clear_extent_buffer_uptodate()
5174 int set_extent_buffer_uptodate(struct extent_buffer *eb) in set_extent_buffer_uptodate() argument
5180 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in set_extent_buffer_uptodate()
5181 num_pages = num_extent_pages(eb->start, eb->len); in set_extent_buffer_uptodate()
5183 page = eb->pages[i]; in set_extent_buffer_uptodate()
5189 int extent_buffer_uptodate(struct extent_buffer *eb) in extent_buffer_uptodate() argument
5191 return test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in extent_buffer_uptodate()
5195 struct extent_buffer *eb, u64 start, int wait, in read_extent_buffer_pages() argument
5210 if (test_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags)) in read_extent_buffer_pages()
5214 WARN_ON(start < eb->start); in read_extent_buffer_pages()
5216 (eb->start >> PAGE_CACHE_SHIFT); in read_extent_buffer_pages()
5221 num_pages = num_extent_pages(eb->start, eb->len); in read_extent_buffer_pages()
5223 page = eb->pages[i]; in read_extent_buffer_pages()
5238 set_bit(EXTENT_BUFFER_UPTODATE, &eb->bflags); in read_extent_buffer_pages()
5242 clear_bit(EXTENT_BUFFER_READ_ERR, &eb->bflags); in read_extent_buffer_pages()
5243 eb->read_mirror = 0; in read_extent_buffer_pages()
5244 atomic_set(&eb->io_pages, num_reads); in read_extent_buffer_pages()
5246 page = eb->pages[i]; in read_extent_buffer_pages()
5271 page = eb->pages[i]; in read_extent_buffer_pages()
5282 page = eb->pages[i]; in read_extent_buffer_pages()
5290 void read_extent_buffer(struct extent_buffer *eb, void *dstv, in read_extent_buffer() argument
5299 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in read_extent_buffer()
5302 WARN_ON(start > eb->len); in read_extent_buffer()
5303 WARN_ON(start + len > eb->start + eb->len); in read_extent_buffer()
5308 page = eb->pages[i]; in read_extent_buffer()
5321 int read_extent_buffer_to_user(struct extent_buffer *eb, void __user *dstv, in read_extent_buffer_to_user() argument
5330 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in read_extent_buffer_to_user()
5334 WARN_ON(start > eb->len); in read_extent_buffer_to_user()
5335 WARN_ON(start + len > eb->start + eb->len); in read_extent_buffer_to_user()
5340 page = eb->pages[i]; in read_extent_buffer_to_user()
5358 int map_private_extent_buffer(struct extent_buffer *eb, unsigned long start, in map_private_extent_buffer() argument
5366 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in map_private_extent_buffer()
5382 if (start + min_len > eb->len) { in map_private_extent_buffer()
5385 eb->start, eb->len, start, min_len); in map_private_extent_buffer()
5389 p = eb->pages[i]; in map_private_extent_buffer()
5396 int memcmp_extent_buffer(struct extent_buffer *eb, const void *ptrv, in memcmp_extent_buffer() argument
5405 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in memcmp_extent_buffer()
5409 WARN_ON(start > eb->len); in memcmp_extent_buffer()
5410 WARN_ON(start + len > eb->start + eb->len); in memcmp_extent_buffer()
5415 page = eb->pages[i]; in memcmp_extent_buffer()
5432 void write_extent_buffer(struct extent_buffer *eb, const void *srcv, in write_extent_buffer() argument
5440 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in write_extent_buffer()
5443 WARN_ON(start > eb->len); in write_extent_buffer()
5444 WARN_ON(start + len > eb->start + eb->len); in write_extent_buffer()
5449 page = eb->pages[i]; in write_extent_buffer()
5463 void memset_extent_buffer(struct extent_buffer *eb, char c, in memset_extent_buffer() argument
5470 size_t start_offset = eb->start & ((u64)PAGE_CACHE_SIZE - 1); in memset_extent_buffer()
5473 WARN_ON(start > eb->len); in memset_extent_buffer()
5474 WARN_ON(start + len > eb->start + eb->len); in memset_extent_buffer()
5479 page = eb->pages[i]; in memset_extent_buffer()
5646 struct extent_buffer *eb; in try_release_extent_buffer() local
5658 eb = (struct extent_buffer *)page->private; in try_release_extent_buffer()
5659 BUG_ON(!eb); in try_release_extent_buffer()
5666 spin_lock(&eb->refs_lock); in try_release_extent_buffer()
5667 if (atomic_read(&eb->refs) != 1 || extent_buffer_under_io(eb)) { in try_release_extent_buffer()
5668 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
5678 if (!test_and_clear_bit(EXTENT_BUFFER_TREE_REF, &eb->bflags)) { in try_release_extent_buffer()
5679 spin_unlock(&eb->refs_lock); in try_release_extent_buffer()
5683 return release_extent_buffer(eb); in try_release_extent_buffer()