Lines Matching refs:inode
97 static int btrfs_setsize(struct inode *inode, struct iattr *attr);
98 static int btrfs_truncate(struct inode *inode);
100 static noinline int cow_file_range(struct inode *inode,
104 static struct extent_map *create_pinned_em(struct inode *inode, u64 start,
110 static int btrfs_dirty_inode(struct inode *inode);
113 void btrfs_test_inode_set_ops(struct inode *inode) in btrfs_test_inode_set_ops() argument
115 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; in btrfs_test_inode_set_ops()
120 struct inode *inode, struct inode *dir, in btrfs_init_inode_security() argument
125 err = btrfs_init_acl(trans, inode, dir); in btrfs_init_inode_security()
127 err = btrfs_xattr_security_init(trans, inode, dir, qstr); in btrfs_init_inode_security()
138 struct btrfs_root *root, struct inode *inode, in insert_inline_extent() argument
156 inode_add_bytes(inode, size); in insert_inline_extent()
162 key.objectid = btrfs_ino(inode); in insert_inline_extent()
204 page = find_get_page(inode->i_mapping, in insert_inline_extent()
225 BTRFS_I(inode)->disk_i_size = inode->i_size; in insert_inline_extent()
226 ret = btrfs_update_inode(trans, root, inode); in insert_inline_extent()
240 struct inode *inode, u64 start, in cow_file_range_inline() argument
246 u64 isize = i_size_read(inode); in cow_file_range_inline()
287 ret = __btrfs_drop_extents(trans, root, inode, path, in cow_file_range_inline()
298 root, inode, start, in cow_file_range_inline()
309 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); in cow_file_range_inline()
310 btrfs_delalloc_release_metadata(inode, end + 1 - start); in cow_file_range_inline()
311 btrfs_drop_extent_cache(inode, start, aligned_end - 1, 0); in cow_file_range_inline()
329 struct inode *inode; member
359 static inline int inode_need_compress(struct inode *inode) in inode_need_compress() argument
361 struct btrfs_root *root = BTRFS_I(inode)->root; in inode_need_compress()
367 if (BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS) in inode_need_compress()
370 BTRFS_I(inode)->flags & BTRFS_INODE_COMPRESS || in inode_need_compress()
371 BTRFS_I(inode)->force_compress) in inode_need_compress()
393 static noinline void compress_file_range(struct inode *inode, in compress_file_range() argument
399 struct btrfs_root *root = BTRFS_I(inode)->root; in compress_file_range()
403 u64 isize = i_size_read(inode); in compress_file_range()
419 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size)) in compress_file_range()
420 btrfs_add_inode_defrag(NULL, inode); in compress_file_range()
448 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size)) in compress_file_range()
472 if (inode_need_compress(inode)) { in compress_file_range()
480 if (BTRFS_I(inode)->force_compress) in compress_file_range()
481 compress_type = BTRFS_I(inode)->force_compress; in compress_file_range()
492 extent_range_clear_dirty_for_io(inode, start, end); in compress_file_range()
495 inode->i_mapping, start, in compress_file_range()
527 ret = cow_file_range_inline(root, inode, start, end, in compress_file_range()
531 ret = cow_file_range_inline(root, inode, start, end, in compress_file_range()
548 extent_clear_unlock_delalloc(inode, start, end, NULL, in compress_file_range()
593 !(BTRFS_I(inode)->force_compress)) { in compress_file_range()
594 BTRFS_I(inode)->flags |= BTRFS_INODE_NOCOMPRESS; in compress_file_range()
629 extent_range_redirty_for_io(inode, start, end); in compress_file_range()
667 static noinline void submit_compressed_extents(struct inode *inode, in submit_compressed_extents() argument
674 struct btrfs_root *root = BTRFS_I(inode)->root; in submit_compressed_extents()
675 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in submit_compressed_extents()
685 io_tree = &BTRFS_I(inode)->io_tree; in submit_compressed_extents()
698 ret = cow_file_range(inode, async_cow->locked_page, in submit_compressed_extents()
714 inode, async_extent->start, in submit_compressed_extents()
747 extent_range_redirty_for_io(inode, in submit_compressed_extents()
760 btrfs_drop_extent_cache(inode, async_extent->start, in submit_compressed_extents()
793 btrfs_drop_extent_cache(inode, async_extent->start, in submit_compressed_extents()
801 ret = btrfs_add_ordered_extent_compress(inode, in submit_compressed_extents()
809 btrfs_drop_extent_cache(inode, async_extent->start, in submit_compressed_extents()
818 extent_clear_unlock_delalloc(inode, async_extent->start, in submit_compressed_extents()
824 ret = btrfs_submit_compressed_write(inode, in submit_compressed_extents()
831 struct extent_io_tree *tree = &BTRFS_I(inode)->io_tree; in submit_compressed_extents()
836 p->mapping = inode->i_mapping; in submit_compressed_extents()
840 extent_clear_unlock_delalloc(inode, start, end, NULL, 0, in submit_compressed_extents()
853 extent_clear_unlock_delalloc(inode, async_extent->start, in submit_compressed_extents()
866 static u64 get_extent_allocation_hint(struct inode *inode, u64 start, in get_extent_allocation_hint() argument
869 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in get_extent_allocation_hint()
911 static noinline int cow_file_range(struct inode *inode, in cow_file_range() argument
917 struct btrfs_root *root = BTRFS_I(inode)->root; in cow_file_range()
926 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in cow_file_range()
929 if (btrfs_is_free_space_inode(inode)) { in cow_file_range()
941 (start > 0 || end + 1 < BTRFS_I(inode)->disk_i_size)) in cow_file_range()
942 btrfs_add_inode_defrag(NULL, inode); in cow_file_range()
946 ret = cow_file_range_inline(root, inode, start, end, 0, 0, in cow_file_range()
949 extent_clear_unlock_delalloc(inode, start, end, NULL, in cow_file_range()
967 alloc_hint = get_extent_allocation_hint(inode, start, num_bytes); in cow_file_range()
968 btrfs_drop_extent_cache(inode, start, start + num_bytes - 1, 0); in cow_file_range()
1008 btrfs_drop_extent_cache(inode, start, in cow_file_range()
1015 ret = btrfs_add_ordered_extent(inode, start, ins.objectid, in cow_file_range()
1022 ret = btrfs_reloc_clone_csums(inode, start, in cow_file_range()
1041 extent_clear_unlock_delalloc(inode, start, in cow_file_range()
1054 btrfs_drop_extent_cache(inode, start, start + ram_size - 1, 0); in cow_file_range()
1058 extent_clear_unlock_delalloc(inode, start, end, locked_page, in cow_file_range()
1075 compress_file_range(async_cow->inode, async_cow->locked_page, in async_cow_start()
1079 btrfs_add_delayed_iput(async_cow->inode); in async_cow_start()
1080 async_cow->inode = NULL; in async_cow_start()
1104 if (async_cow->inode) in async_cow_submit()
1105 submit_compressed_extents(async_cow->inode, async_cow); in async_cow_submit()
1112 if (async_cow->inode) in async_cow_free()
1113 btrfs_add_delayed_iput(async_cow->inode); in async_cow_free()
1117 static int cow_file_range_async(struct inode *inode, struct page *locked_page, in cow_file_range_async() argument
1122 struct btrfs_root *root = BTRFS_I(inode)->root; in cow_file_range_async()
1127 clear_extent_bit(&BTRFS_I(inode)->io_tree, start, end, EXTENT_LOCKED, in cow_file_range_async()
1132 async_cow->inode = igrab(inode); in cow_file_range_async()
1137 if (BTRFS_I(inode)->flags & BTRFS_INODE_NOCOMPRESS && in cow_file_range_async()
1205 static noinline int run_delalloc_nocow(struct inode *inode, in run_delalloc_nocow() argument
1210 struct btrfs_root *root = BTRFS_I(inode)->root; in run_delalloc_nocow()
1230 u64 ino = btrfs_ino(inode); in run_delalloc_nocow()
1234 extent_clear_unlock_delalloc(inode, start, end, locked_page, in run_delalloc_nocow()
1244 nolock = btrfs_is_free_space_inode(inode); in run_delalloc_nocow()
1252 extent_clear_unlock_delalloc(inode, start, end, locked_page, in run_delalloc_nocow()
1392 ret = cow_file_range(inode, locked_page, in run_delalloc_nocow()
1406 em_tree = &BTRFS_I(inode)->extent_tree; in run_delalloc_nocow()
1430 btrfs_drop_extent_cache(inode, em->start, in run_delalloc_nocow()
1438 ret = btrfs_add_ordered_extent(inode, cur_offset, disk_bytenr, in run_delalloc_nocow()
1444 ret = btrfs_reloc_clone_csums(inode, cur_offset, in run_delalloc_nocow()
1453 extent_clear_unlock_delalloc(inode, cur_offset, in run_delalloc_nocow()
1472 ret = cow_file_range(inode, locked_page, cow_start, end, in run_delalloc_nocow()
1484 extent_clear_unlock_delalloc(inode, cur_offset, end, in run_delalloc_nocow()
1495 static inline int need_force_cow(struct inode *inode, u64 start, u64 end) in need_force_cow() argument
1498 if (!(BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) && in need_force_cow()
1499 !(BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC)) in need_force_cow()
1507 if (BTRFS_I(inode)->defrag_bytes && in need_force_cow()
1508 test_range_bit(&BTRFS_I(inode)->io_tree, start, end, in need_force_cow()
1518 static int run_delalloc_range(struct inode *inode, struct page *locked_page, in run_delalloc_range() argument
1523 int force_cow = need_force_cow(inode, start, end); in run_delalloc_range()
1525 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW && !force_cow) { in run_delalloc_range()
1526 ret = run_delalloc_nocow(inode, locked_page, start, end, in run_delalloc_range()
1528 } else if (BTRFS_I(inode)->flags & BTRFS_INODE_PREALLOC && !force_cow) { in run_delalloc_range()
1529 ret = run_delalloc_nocow(inode, locked_page, start, end, in run_delalloc_range()
1531 } else if (!inode_need_compress(inode)) { in run_delalloc_range()
1532 ret = cow_file_range(inode, locked_page, start, end, in run_delalloc_range()
1536 &BTRFS_I(inode)->runtime_flags); in run_delalloc_range()
1537 ret = cow_file_range_async(inode, locked_page, start, end, in run_delalloc_range()
1543 static void btrfs_split_extent_hook(struct inode *inode, in btrfs_split_extent_hook() argument
1572 spin_lock(&BTRFS_I(inode)->lock); in btrfs_split_extent_hook()
1573 BTRFS_I(inode)->outstanding_extents++; in btrfs_split_extent_hook()
1574 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_split_extent_hook()
1583 static void btrfs_merge_extent_hook(struct inode *inode, in btrfs_merge_extent_hook() argument
1601 spin_lock(&BTRFS_I(inode)->lock); in btrfs_merge_extent_hook()
1602 BTRFS_I(inode)->outstanding_extents--; in btrfs_merge_extent_hook()
1603 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_merge_extent_hook()
1636 spin_lock(&BTRFS_I(inode)->lock); in btrfs_merge_extent_hook()
1637 BTRFS_I(inode)->outstanding_extents--; in btrfs_merge_extent_hook()
1638 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_merge_extent_hook()
1642 struct inode *inode) in btrfs_add_delalloc_inodes() argument
1645 if (list_empty(&BTRFS_I(inode)->delalloc_inodes)) { in btrfs_add_delalloc_inodes()
1646 list_add_tail(&BTRFS_I(inode)->delalloc_inodes, in btrfs_add_delalloc_inodes()
1649 &BTRFS_I(inode)->runtime_flags); in btrfs_add_delalloc_inodes()
1663 struct inode *inode) in btrfs_del_delalloc_inode() argument
1666 if (!list_empty(&BTRFS_I(inode)->delalloc_inodes)) { in btrfs_del_delalloc_inode()
1667 list_del_init(&BTRFS_I(inode)->delalloc_inodes); in btrfs_del_delalloc_inode()
1669 &BTRFS_I(inode)->runtime_flags); in btrfs_del_delalloc_inode()
1686 static void btrfs_set_bit_hook(struct inode *inode, in btrfs_set_bit_hook() argument
1698 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_set_bit_hook()
1700 bool do_list = !btrfs_is_free_space_inode(inode); in btrfs_set_bit_hook()
1705 spin_lock(&BTRFS_I(inode)->lock); in btrfs_set_bit_hook()
1706 BTRFS_I(inode)->outstanding_extents++; in btrfs_set_bit_hook()
1707 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_set_bit_hook()
1716 spin_lock(&BTRFS_I(inode)->lock); in btrfs_set_bit_hook()
1717 BTRFS_I(inode)->delalloc_bytes += len; in btrfs_set_bit_hook()
1719 BTRFS_I(inode)->defrag_bytes += len; in btrfs_set_bit_hook()
1721 &BTRFS_I(inode)->runtime_flags)) in btrfs_set_bit_hook()
1722 btrfs_add_delalloc_inodes(root, inode); in btrfs_set_bit_hook()
1723 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_set_bit_hook()
1730 static void btrfs_clear_bit_hook(struct inode *inode, in btrfs_clear_bit_hook() argument
1738 spin_lock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1740 BTRFS_I(inode)->defrag_bytes -= len; in btrfs_clear_bit_hook()
1741 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1749 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_clear_bit_hook()
1750 bool do_list = !btrfs_is_free_space_inode(inode); in btrfs_clear_bit_hook()
1755 spin_lock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1756 BTRFS_I(inode)->outstanding_extents -= num_extents; in btrfs_clear_bit_hook()
1757 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1767 btrfs_delalloc_release_metadata(inode, len); in btrfs_clear_bit_hook()
1775 btrfs_free_reserved_data_space(inode, len); in btrfs_clear_bit_hook()
1779 spin_lock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1780 BTRFS_I(inode)->delalloc_bytes -= len; in btrfs_clear_bit_hook()
1781 if (do_list && BTRFS_I(inode)->delalloc_bytes == 0 && in btrfs_clear_bit_hook()
1783 &BTRFS_I(inode)->runtime_flags)) in btrfs_clear_bit_hook()
1784 btrfs_del_delalloc_inode(root, inode); in btrfs_clear_bit_hook()
1785 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_clear_bit_hook()
1825 static int __btrfs_submit_bio_start(struct inode *inode, int rw, in __btrfs_submit_bio_start() argument
1830 struct btrfs_root *root = BTRFS_I(inode)->root; in __btrfs_submit_bio_start()
1833 ret = btrfs_csum_one_bio(root, inode, bio, 0, 0); in __btrfs_submit_bio_start()
1846 static int __btrfs_submit_bio_done(struct inode *inode, int rw, struct bio *bio, in __btrfs_submit_bio_done() argument
1850 struct btrfs_root *root = BTRFS_I(inode)->root; in __btrfs_submit_bio_done()
1863 static int btrfs_submit_bio_hook(struct inode *inode, int rw, struct bio *bio, in btrfs_submit_bio_hook() argument
1867 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_submit_bio_hook()
1871 int async = !atomic_read(&BTRFS_I(inode)->sync_writers); in btrfs_submit_bio_hook()
1873 skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; in btrfs_submit_bio_hook()
1875 if (btrfs_is_free_space_inode(inode)) in btrfs_submit_bio_hook()
1884 ret = btrfs_submit_compressed_read(inode, bio, in btrfs_submit_bio_hook()
1889 ret = btrfs_lookup_bio_sums(root, inode, bio, NULL); in btrfs_submit_bio_hook()
1899 ret = btrfs_wq_submit_bio(BTRFS_I(inode)->root->fs_info, in btrfs_submit_bio_hook()
1900 inode, rw, bio, mirror_num, in btrfs_submit_bio_hook()
1906 ret = btrfs_csum_one_bio(root, inode, bio, 0, 0); in btrfs_submit_bio_hook()
1925 struct inode *inode, u64 file_offset, in add_pending_csums() argument
1933 BTRFS_I(inode)->root->fs_info->csum_root, sum); in add_pending_csums()
1939 int btrfs_set_extent_delalloc(struct inode *inode, u64 start, u64 end, in btrfs_set_extent_delalloc() argument
1943 return set_extent_delalloc(&BTRFS_I(inode)->io_tree, start, end, in btrfs_set_extent_delalloc()
1959 struct inode *inode; in btrfs_writepage_fixup_worker() local
1973 inode = page->mapping->host; in btrfs_writepage_fixup_worker()
1977 lock_extent_bits(&BTRFS_I(inode)->io_tree, page_start, page_end, 0, in btrfs_writepage_fixup_worker()
1984 ordered = btrfs_lookup_ordered_extent(inode, page_start); in btrfs_writepage_fixup_worker()
1986 unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, in btrfs_writepage_fixup_worker()
1989 btrfs_start_ordered_extent(inode, ordered, 1); in btrfs_writepage_fixup_worker()
1994 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); in btrfs_writepage_fixup_worker()
2002 btrfs_set_extent_delalloc(inode, page_start, page_end, &cached_state); in btrfs_writepage_fixup_worker()
2006 unlock_extent_cached(&BTRFS_I(inode)->io_tree, page_start, page_end, in btrfs_writepage_fixup_worker()
2027 struct inode *inode = page->mapping->host; in btrfs_writepage_start_hook() local
2029 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_writepage_start_hook()
2052 struct inode *inode, u64 file_pos, in insert_reserved_file_extent() argument
2058 struct btrfs_root *root = BTRFS_I(inode)->root; in insert_reserved_file_extent()
2079 ret = __btrfs_drop_extents(trans, root, inode, path, file_pos, in insert_reserved_file_extent()
2086 ins.objectid = btrfs_ino(inode); in insert_reserved_file_extent()
2113 inode_add_bytes(inode, num_bytes); in insert_reserved_file_extent()
2120 btrfs_ino(inode), file_pos, &ins); in insert_reserved_file_extent()
2154 struct inode *inode; member
2233 struct inode *inode = new->inode; in record_one_backref() local
2239 if (BTRFS_I(inode)->root->root_key.objectid == root_id && in record_one_backref()
2240 inum == btrfs_ino(inode)) in record_one_backref()
2247 fs_info = BTRFS_I(inode)->root->fs_info; in record_one_backref()
2345 struct btrfs_fs_info *fs_info = BTRFS_I(new->inode)->root->fs_info; in record_extent_backrefs()
2409 struct inode *src_inode = new->inode; in relink_extent_backref()
2410 struct inode *inode; in relink_extent_backref() local
2451 inode = btrfs_iget(fs_info->sb, &key, root, NULL); in relink_extent_backref()
2452 if (IS_ERR(inode)) { in relink_extent_backref()
2462 lock_extent_bits(&BTRFS_I(inode)->io_tree, lock_start, lock_end, in relink_extent_backref()
2465 ordered = btrfs_lookup_first_ordered_extent(inode, lock_end); in relink_extent_backref()
2507 ret = btrfs_drop_extents(trans, root, inode, start, in relink_extent_backref()
2512 key.objectid = btrfs_ino(inode); in relink_extent_backref()
2539 inode_add_bytes(inode, len); in relink_extent_backref()
2572 inode_add_bytes(inode, len); in relink_extent_backref()
2590 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lock_start, lock_end, in relink_extent_backref()
2592 iput(inode); in relink_extent_backref()
2615 struct inode *inode; in relink_file_extents() local
2620 inode = new->inode; in relink_file_extents()
2621 root = BTRFS_I(inode)->root; in relink_file_extents()
2663 record_old_file_extents(struct inode *inode, in record_old_file_extents() argument
2666 struct btrfs_root *root = BTRFS_I(inode)->root; in record_old_file_extents()
2677 new->inode = inode; in record_old_file_extents()
2690 key.objectid = btrfs_ino(inode); in record_old_file_extents()
2725 if (key.objectid != btrfs_ino(inode)) in record_old_file_extents()
2796 struct inode *inode = ordered_extent->inode; in btrfs_finish_ordered_io() local
2797 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_finish_ordered_io()
2799 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_finish_ordered_io()
2808 nolock = btrfs_is_free_space_inode(inode); in btrfs_finish_ordered_io()
2815 btrfs_free_io_failure_record(inode, ordered_extent->file_offset, in btrfs_finish_ordered_io()
2829 btrfs_ordered_update_i_size(inode, 0, ordered_extent); in btrfs_finish_ordered_io()
2840 ret = btrfs_update_inode_fallback(trans, root, inode); in btrfs_finish_ordered_io()
2855 if (0 && last_snapshot >= BTRFS_I(inode)->generation) in btrfs_finish_ordered_io()
2857 new = record_old_file_extents(inode, ordered_extent); in btrfs_finish_ordered_io()
2880 ret = btrfs_mark_extent_written(trans, inode, in btrfs_finish_ordered_io()
2886 ret = insert_reserved_file_extent(trans, inode, in btrfs_finish_ordered_io()
2898 unpin_extent_cache(&BTRFS_I(inode)->extent_tree, in btrfs_finish_ordered_io()
2906 add_pending_csums(trans, inode, ordered_extent->file_offset, in btrfs_finish_ordered_io()
2909 btrfs_ordered_update_i_size(inode, 0, ordered_extent); in btrfs_finish_ordered_io()
2910 ret = btrfs_update_inode_fallback(trans, root, inode); in btrfs_finish_ordered_io()
2922 btrfs_delalloc_release_metadata(inode, ordered_extent->len); in btrfs_finish_ordered_io()
2937 btrfs_drop_extent_cache(inode, start, end, 0); in btrfs_finish_ordered_io()
2957 btrfs_remove_ordered_extent(inode, ordered_extent); in btrfs_finish_ordered_io()
2987 struct inode *inode = page->mapping->host; in btrfs_writepage_end_io_hook() local
2988 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_writepage_end_io_hook()
2996 if (!btrfs_dec_test_ordered_pending(inode, &ordered_extent, start, in btrfs_writepage_end_io_hook()
3000 if (btrfs_is_free_space_inode(inode)) { in btrfs_writepage_end_io_hook()
3015 static int __readpage_endio_check(struct inode *inode, in __readpage_endio_check() argument
3038 btrfs_warn(BTRFS_I(inode)->root->fs_info, in __readpage_endio_check()
3040 btrfs_ino(inode), start, csum, csum_expected); in __readpage_endio_check()
3059 struct inode *inode = page->mapping->host; in btrfs_readpage_end_io_hook() local
3060 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_readpage_end_io_hook()
3061 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_readpage_end_io_hook()
3068 if (BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM) in btrfs_readpage_end_io_hook()
3078 phy_offset >>= inode->i_sb->s_blocksize_bits; in btrfs_readpage_end_io_hook()
3079 return __readpage_endio_check(inode, io_bio, phy_offset, page, offset, in btrfs_readpage_end_io_hook()
3083 void btrfs_add_delayed_iput(struct inode *inode) in btrfs_add_delayed_iput() argument
3085 struct btrfs_fs_info *fs_info = BTRFS_I(inode)->root->fs_info; in btrfs_add_delayed_iput()
3086 struct btrfs_inode *binode = BTRFS_I(inode); in btrfs_add_delayed_iput()
3088 if (atomic_add_unless(&inode->i_count, -1, 1)) in btrfs_add_delayed_iput()
3107 struct btrfs_inode *inode; in btrfs_run_delayed_iputs() local
3109 inode = list_first_entry(&fs_info->delayed_iputs, in btrfs_run_delayed_iputs()
3111 if (inode->delayed_iput_count) { in btrfs_run_delayed_iputs()
3112 inode->delayed_iput_count--; in btrfs_run_delayed_iputs()
3113 list_move_tail(&inode->delayed_iput, in btrfs_run_delayed_iputs()
3116 list_del_init(&inode->delayed_iput); in btrfs_run_delayed_iputs()
3119 iput(&inode->vfs_inode); in btrfs_run_delayed_iputs()
3179 int btrfs_orphan_add(struct btrfs_trans_handle *trans, struct inode *inode) in btrfs_orphan_add() argument
3181 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_add()
3202 &BTRFS_I(inode)->runtime_flags)) { in btrfs_orphan_add()
3219 &BTRFS_I(inode)->runtime_flags)) in btrfs_orphan_add()
3225 ret = btrfs_orphan_reserve_metadata(trans, inode); in btrfs_orphan_add()
3231 ret = btrfs_insert_orphan_item(trans, root, btrfs_ino(inode)); in btrfs_orphan_add()
3236 &BTRFS_I(inode)->runtime_flags); in btrfs_orphan_add()
3237 btrfs_orphan_release_metadata(inode); in btrfs_orphan_add()
3241 &BTRFS_I(inode)->runtime_flags); in btrfs_orphan_add()
3266 struct inode *inode) in btrfs_orphan_del() argument
3268 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_orphan_del()
3275 &BTRFS_I(inode)->runtime_flags)) in btrfs_orphan_del()
3279 &BTRFS_I(inode)->runtime_flags)) in btrfs_orphan_del()
3287 btrfs_ino(inode)); in btrfs_orphan_del()
3291 btrfs_orphan_release_metadata(inode); in btrfs_orphan_del()
3306 struct inode *inode; in btrfs_orphan_cleanup() local
3372 inode = btrfs_iget(root->fs_info->sb, &found_key, root, NULL); in btrfs_orphan_cleanup()
3373 ret = PTR_ERR_OR_ZERO(inode); in btrfs_orphan_cleanup()
3434 &BTRFS_I(inode)->runtime_flags); in btrfs_orphan_cleanup()
3438 if (inode->i_nlink) { in btrfs_orphan_cleanup()
3439 if (WARN_ON(!S_ISREG(inode->i_mode))) { in btrfs_orphan_cleanup()
3440 iput(inode); in btrfs_orphan_cleanup()
3448 iput(inode); in btrfs_orphan_cleanup()
3452 ret = btrfs_orphan_add(trans, inode); in btrfs_orphan_cleanup()
3455 iput(inode); in btrfs_orphan_cleanup()
3459 ret = btrfs_truncate(inode); in btrfs_orphan_cleanup()
3461 btrfs_orphan_del(NULL, inode); in btrfs_orphan_cleanup()
3467 iput(inode); in btrfs_orphan_cleanup()
3572 static void btrfs_read_locked_inode(struct inode *inode) in btrfs_read_locked_inode() argument
3577 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_read_locked_inode()
3586 ret = btrfs_fill_inode(inode, &rdev); in btrfs_read_locked_inode()
3594 memcpy(&location, &BTRFS_I(inode)->location, sizeof(location)); in btrfs_read_locked_inode()
3607 inode->i_mode = btrfs_inode_mode(leaf, inode_item); in btrfs_read_locked_inode()
3608 set_nlink(inode, btrfs_inode_nlink(leaf, inode_item)); in btrfs_read_locked_inode()
3609 i_uid_write(inode, btrfs_inode_uid(leaf, inode_item)); in btrfs_read_locked_inode()
3610 i_gid_write(inode, btrfs_inode_gid(leaf, inode_item)); in btrfs_read_locked_inode()
3611 btrfs_i_size_write(inode, btrfs_inode_size(leaf, inode_item)); in btrfs_read_locked_inode()
3613 inode->i_atime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->atime); in btrfs_read_locked_inode()
3614 inode->i_atime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->atime); in btrfs_read_locked_inode()
3616 inode->i_mtime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->mtime); in btrfs_read_locked_inode()
3617 inode->i_mtime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->mtime); in btrfs_read_locked_inode()
3619 inode->i_ctime.tv_sec = btrfs_timespec_sec(leaf, &inode_item->ctime); in btrfs_read_locked_inode()
3620 inode->i_ctime.tv_nsec = btrfs_timespec_nsec(leaf, &inode_item->ctime); in btrfs_read_locked_inode()
3622 BTRFS_I(inode)->i_otime.tv_sec = in btrfs_read_locked_inode()
3624 BTRFS_I(inode)->i_otime.tv_nsec = in btrfs_read_locked_inode()
3627 inode_set_bytes(inode, btrfs_inode_nbytes(leaf, inode_item)); in btrfs_read_locked_inode()
3628 BTRFS_I(inode)->generation = btrfs_inode_generation(leaf, inode_item); in btrfs_read_locked_inode()
3629 BTRFS_I(inode)->last_trans = btrfs_inode_transid(leaf, inode_item); in btrfs_read_locked_inode()
3631 inode->i_version = btrfs_inode_sequence(leaf, inode_item); in btrfs_read_locked_inode()
3632 inode->i_generation = BTRFS_I(inode)->generation; in btrfs_read_locked_inode()
3633 inode->i_rdev = 0; in btrfs_read_locked_inode()
3636 BTRFS_I(inode)->index_cnt = (u64)-1; in btrfs_read_locked_inode()
3637 BTRFS_I(inode)->flags = btrfs_inode_flags(leaf, inode_item); in btrfs_read_locked_inode()
3649 if (BTRFS_I(inode)->last_trans == root->fs_info->generation) in btrfs_read_locked_inode()
3651 &BTRFS_I(inode)->runtime_flags); in btrfs_read_locked_inode()
3654 if (inode->i_nlink != 1 || in btrfs_read_locked_inode()
3659 if (location.objectid != btrfs_ino(inode)) in btrfs_read_locked_inode()
3667 BTRFS_I(inode)->dir_index = btrfs_inode_ref_index(leaf, ref); in btrfs_read_locked_inode()
3672 BTRFS_I(inode)->dir_index = btrfs_inode_extref_index(leaf, in btrfs_read_locked_inode()
3681 btrfs_ino(inode), &first_xattr_slot); in btrfs_read_locked_inode()
3684 ret = btrfs_load_inode_props(inode, path); in btrfs_read_locked_inode()
3688 btrfs_ino(inode), in btrfs_read_locked_inode()
3694 cache_no_acl(inode); in btrfs_read_locked_inode()
3696 switch (inode->i_mode & S_IFMT) { in btrfs_read_locked_inode()
3698 inode->i_mapping->a_ops = &btrfs_aops; in btrfs_read_locked_inode()
3699 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; in btrfs_read_locked_inode()
3700 inode->i_fop = &btrfs_file_operations; in btrfs_read_locked_inode()
3701 inode->i_op = &btrfs_file_inode_operations; in btrfs_read_locked_inode()
3704 inode->i_fop = &btrfs_dir_file_operations; in btrfs_read_locked_inode()
3706 inode->i_op = &btrfs_dir_ro_inode_operations; in btrfs_read_locked_inode()
3708 inode->i_op = &btrfs_dir_inode_operations; in btrfs_read_locked_inode()
3711 inode->i_op = &btrfs_symlink_inode_operations; in btrfs_read_locked_inode()
3712 inode->i_mapping->a_ops = &btrfs_symlink_aops; in btrfs_read_locked_inode()
3715 inode->i_op = &btrfs_special_inode_operations; in btrfs_read_locked_inode()
3716 init_special_inode(inode, inode->i_mode, rdev); in btrfs_read_locked_inode()
3720 btrfs_update_iflags(inode); in btrfs_read_locked_inode()
3725 make_bad_inode(inode); in btrfs_read_locked_inode()
3734 struct inode *inode) in fill_inode_item() argument
3740 btrfs_set_token_inode_uid(leaf, item, i_uid_read(inode), &token); in fill_inode_item()
3741 btrfs_set_token_inode_gid(leaf, item, i_gid_read(inode), &token); in fill_inode_item()
3742 btrfs_set_token_inode_size(leaf, item, BTRFS_I(inode)->disk_i_size, in fill_inode_item()
3744 btrfs_set_token_inode_mode(leaf, item, inode->i_mode, &token); in fill_inode_item()
3745 btrfs_set_token_inode_nlink(leaf, item, inode->i_nlink, &token); in fill_inode_item()
3748 inode->i_atime.tv_sec, &token); in fill_inode_item()
3750 inode->i_atime.tv_nsec, &token); in fill_inode_item()
3753 inode->i_mtime.tv_sec, &token); in fill_inode_item()
3755 inode->i_mtime.tv_nsec, &token); in fill_inode_item()
3758 inode->i_ctime.tv_sec, &token); in fill_inode_item()
3760 inode->i_ctime.tv_nsec, &token); in fill_inode_item()
3763 BTRFS_I(inode)->i_otime.tv_sec, &token); in fill_inode_item()
3765 BTRFS_I(inode)->i_otime.tv_nsec, &token); in fill_inode_item()
3767 btrfs_set_token_inode_nbytes(leaf, item, inode_get_bytes(inode), in fill_inode_item()
3769 btrfs_set_token_inode_generation(leaf, item, BTRFS_I(inode)->generation, in fill_inode_item()
3771 btrfs_set_token_inode_sequence(leaf, item, inode->i_version, &token); in fill_inode_item()
3773 btrfs_set_token_inode_rdev(leaf, item, inode->i_rdev, &token); in fill_inode_item()
3774 btrfs_set_token_inode_flags(leaf, item, BTRFS_I(inode)->flags, &token); in fill_inode_item()
3782 struct btrfs_root *root, struct inode *inode) in btrfs_update_inode_item() argument
3794 ret = btrfs_lookup_inode(trans, root, path, &BTRFS_I(inode)->location, in btrfs_update_inode_item()
3806 fill_inode_item(trans, leaf, inode_item, inode); in btrfs_update_inode_item()
3808 btrfs_set_inode_last_trans(trans, inode); in btrfs_update_inode_item()
3819 struct btrfs_root *root, struct inode *inode) in btrfs_update_inode() argument
3830 if (!btrfs_is_free_space_inode(inode) in btrfs_update_inode()
3835 ret = btrfs_delayed_update_inode(trans, root, inode); in btrfs_update_inode()
3837 btrfs_set_inode_last_trans(trans, inode); in btrfs_update_inode()
3841 return btrfs_update_inode_item(trans, root, inode); in btrfs_update_inode()
3846 struct inode *inode) in btrfs_update_inode_fallback() argument
3850 ret = btrfs_update_inode(trans, root, inode); in btrfs_update_inode_fallback()
3852 return btrfs_update_inode_item(trans, root, inode); in btrfs_update_inode_fallback()
3863 struct inode *dir, struct inode *inode, in __btrfs_unlink_inode() argument
3872 u64 ino = btrfs_ino(inode); in __btrfs_unlink_inode()
3909 if (BTRFS_I(inode)->dir_index) { in __btrfs_unlink_inode()
3910 ret = btrfs_delayed_delete_inode_ref(inode); in __btrfs_unlink_inode()
3912 index = BTRFS_I(inode)->dir_index; in __btrfs_unlink_inode()
3934 inode, dir_ino); in __btrfs_unlink_inode()
3952 inode_inc_iversion(inode); in __btrfs_unlink_inode()
3954 inode->i_ctime = dir->i_mtime = dir->i_ctime = CURRENT_TIME; in __btrfs_unlink_inode()
3962 struct inode *dir, struct inode *inode, in btrfs_unlink_inode() argument
3966 ret = __btrfs_unlink_inode(trans, root, dir, inode, name, name_len); in btrfs_unlink_inode()
3968 drop_nlink(inode); in btrfs_unlink_inode()
3969 ret = btrfs_update_inode(trans, root, inode); in btrfs_unlink_inode()
3982 static struct btrfs_trans_handle *__unlink_start_trans(struct inode *dir) in __unlink_start_trans()
4018 static int btrfs_unlink(struct inode *dir, struct dentry *dentry) in btrfs_unlink()
4022 struct inode *inode = d_inode(dentry); in btrfs_unlink() local
4036 if (inode->i_nlink == 0) { in btrfs_unlink()
4037 ret = btrfs_orphan_add(trans, inode); in btrfs_unlink()
4050 struct inode *dir, u64 objectid, in btrfs_unlink_subvol()
4128 static int btrfs_rmdir(struct inode *dir, struct dentry *dentry) in btrfs_rmdir()
4130 struct inode *inode = d_inode(dentry); in btrfs_rmdir() local
4135 if (inode->i_size > BTRFS_EMPTY_DIR_SIZE) in btrfs_rmdir()
4137 if (btrfs_ino(inode) == BTRFS_FIRST_FREE_OBJECTID) in btrfs_rmdir()
4144 if (unlikely(btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID)) { in btrfs_rmdir()
4146 BTRFS_I(inode)->location.objectid, in btrfs_rmdir()
4152 err = btrfs_orphan_add(trans, inode); in btrfs_rmdir()
4160 btrfs_i_size_write(inode, 0); in btrfs_rmdir()
4183 static int truncate_inline_extent(struct inode *inode, in truncate_inline_extent() argument
4193 struct btrfs_root *root = BTRFS_I(inode)->root; in truncate_inline_extent()
4211 return btrfs_truncate_page(inode, offset, page_end - offset, 0); in truncate_inline_extent()
4219 inode_sub_bytes(inode, item_end + 1 - new_size); in truncate_inline_extent()
4237 struct inode *inode, in btrfs_truncate_inode_items() argument
4258 u64 ino = btrfs_ino(inode); in btrfs_truncate_inode_items()
4270 if (!btrfs_is_free_space_inode(inode) && in btrfs_truncate_inode_items()
4286 btrfs_drop_extent_cache(inode, ALIGN(new_size, in btrfs_truncate_inode_items()
4295 if (min_type == 0 && root == BTRFS_I(inode)->root) in btrfs_truncate_inode_items()
4296 btrfs_kill_delayed_inode_items(inode); in btrfs_truncate_inode_items()
4394 inode_sub_bytes(inode, num_dec); in btrfs_truncate_inode_items()
4409 inode_sub_bytes(inode, num_dec); in btrfs_truncate_inode_items()
4440 err = truncate_inline_extent(inode, path, in btrfs_truncate_inode_items()
4451 inode_sub_bytes(inode, item_end + 1 - new_size); in btrfs_truncate_inode_items()
4548 btrfs_ordered_update_i_size(inode, last_size, NULL); in btrfs_truncate_inode_items()
4575 int btrfs_truncate_page(struct inode *inode, loff_t from, loff_t len, in btrfs_truncate_page() argument
4578 struct address_space *mapping = inode->i_mapping; in btrfs_truncate_page()
4579 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_truncate_page()
4580 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_truncate_page()
4596 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); in btrfs_truncate_page()
4603 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); in btrfs_truncate_page()
4629 ordered = btrfs_lookup_ordered_extent(inode, page_start); in btrfs_truncate_page()
4635 btrfs_start_ordered_extent(inode, ordered, 1); in btrfs_truncate_page()
4640 clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end, in btrfs_truncate_page()
4645 ret = btrfs_set_extent_delalloc(inode, page_start, page_end, in btrfs_truncate_page()
4671 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); in btrfs_truncate_page()
4678 static int maybe_insert_hole(struct btrfs_root *root, struct inode *inode, in maybe_insert_hole() argument
4689 BTRFS_I(inode)->last_trans = root->fs_info->generation; in maybe_insert_hole()
4690 BTRFS_I(inode)->last_sub_trans = root->log_transid; in maybe_insert_hole()
4691 BTRFS_I(inode)->last_log_commit = root->last_log_commit; in maybe_insert_hole()
4704 ret = btrfs_drop_extents(trans, root, inode, offset, offset + len, 1); in maybe_insert_hole()
4711 ret = btrfs_insert_file_extent(trans, root, btrfs_ino(inode), offset, in maybe_insert_hole()
4716 btrfs_update_inode(trans, root, inode); in maybe_insert_hole()
4727 int btrfs_cont_expand(struct inode *inode, loff_t oldsize, loff_t size) in btrfs_cont_expand() argument
4729 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_cont_expand()
4730 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_cont_expand()
4733 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in btrfs_cont_expand()
4746 err = btrfs_truncate_page(inode, oldsize, 0, 0); in btrfs_cont_expand()
4758 ordered = btrfs_lookup_ordered_range(inode, hole_start, in btrfs_cont_expand()
4764 btrfs_start_ordered_extent(inode, ordered, 1); in btrfs_cont_expand()
4770 em = btrfs_get_extent(inode, NULL, 0, cur_offset, in btrfs_cont_expand()
4783 err = maybe_insert_hole(root, inode, cur_offset, in btrfs_cont_expand()
4787 btrfs_drop_extent_cache(inode, cur_offset, in btrfs_cont_expand()
4792 &BTRFS_I(inode)->runtime_flags); in btrfs_cont_expand()
4813 btrfs_drop_extent_cache(inode, cur_offset, in btrfs_cont_expand()
4852 static int btrfs_setsize(struct inode *inode, struct iattr *attr) in btrfs_setsize() argument
4854 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_setsize()
4856 loff_t oldsize = i_size_read(inode); in btrfs_setsize()
4868 inode_inc_iversion(inode); in btrfs_setsize()
4870 inode->i_ctime = inode->i_mtime = in btrfs_setsize()
4871 current_fs_time(inode->i_sb); in btrfs_setsize()
4875 truncate_pagecache(inode, newsize); in btrfs_setsize()
4884 ret = btrfs_cont_expand(inode, oldsize, newsize); in btrfs_setsize()
4896 i_size_write(inode, newsize); in btrfs_setsize()
4897 btrfs_ordered_update_i_size(inode, i_size_read(inode), NULL); in btrfs_setsize()
4898 ret = btrfs_update_inode(trans, root, inode); in btrfs_setsize()
4910 &BTRFS_I(inode)->runtime_flags); in btrfs_setsize()
4930 ret = btrfs_orphan_add(trans, inode); in btrfs_setsize()
4936 truncate_setsize(inode, newsize); in btrfs_setsize()
4939 btrfs_inode_block_unlocked_dio(inode); in btrfs_setsize()
4940 inode_dio_wait(inode); in btrfs_setsize()
4941 btrfs_inode_resume_unlocked_dio(inode); in btrfs_setsize()
4943 ret = btrfs_truncate(inode); in btrfs_setsize()
4944 if (ret && inode->i_nlink) { in btrfs_setsize()
4955 btrfs_orphan_del(NULL, inode); in btrfs_setsize()
4958 i_size_write(inode, BTRFS_I(inode)->disk_i_size); in btrfs_setsize()
4959 err = btrfs_orphan_del(trans, inode); in btrfs_setsize()
4971 struct inode *inode = d_inode(dentry); in btrfs_setattr() local
4972 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_setattr()
4978 err = inode_change_ok(inode, attr); in btrfs_setattr()
4982 if (S_ISREG(inode->i_mode) && (attr->ia_valid & ATTR_SIZE)) { in btrfs_setattr()
4983 err = btrfs_setsize(inode, attr); in btrfs_setattr()
4989 setattr_copy(inode, attr); in btrfs_setattr()
4990 inode_inc_iversion(inode); in btrfs_setattr()
4991 err = btrfs_dirty_inode(inode); in btrfs_setattr()
4994 err = posix_acl_chmod(inode, inode->i_mode); in btrfs_setattr()
5012 static void evict_inode_truncate_pages(struct inode *inode) in evict_inode_truncate_pages() argument
5014 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in evict_inode_truncate_pages()
5015 struct extent_map_tree *map_tree = &BTRFS_I(inode)->extent_tree; in evict_inode_truncate_pages()
5018 ASSERT(inode->i_state & I_FREEING); in evict_inode_truncate_pages()
5019 truncate_inode_pages_final(&inode->i_data); in evict_inode_truncate_pages()
5064 void btrfs_evict_inode(struct inode *inode) in btrfs_evict_inode() argument
5067 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_evict_inode()
5073 trace_btrfs_inode_evict(inode); in btrfs_evict_inode()
5075 evict_inode_truncate_pages(inode); in btrfs_evict_inode()
5077 if (inode->i_nlink && in btrfs_evict_inode()
5080 btrfs_is_free_space_inode(inode))) in btrfs_evict_inode()
5083 if (is_bad_inode(inode)) { in btrfs_evict_inode()
5084 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5088 if (!special_file(inode->i_mode)) in btrfs_evict_inode()
5089 btrfs_wait_ordered_range(inode, 0, (u64)-1); in btrfs_evict_inode()
5091 btrfs_free_io_failure_record(inode, 0, (u64)-1); in btrfs_evict_inode()
5095 &BTRFS_I(inode)->runtime_flags)); in btrfs_evict_inode()
5099 if (inode->i_nlink > 0) { in btrfs_evict_inode()
5105 ret = btrfs_commit_inode_delayed_inode(inode); in btrfs_evict_inode()
5107 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5113 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5120 btrfs_i_size_write(inode, 0); in btrfs_evict_inode()
5155 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5162 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5188 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5199 ret = btrfs_truncate_inode_items(trans, root, inode, 0, 0); in btrfs_evict_inode()
5217 btrfs_orphan_del(trans, inode); in btrfs_evict_inode()
5219 btrfs_orphan_del(NULL, inode); in btrfs_evict_inode()
5225 btrfs_return_ino(root, btrfs_ino(inode)); in btrfs_evict_inode()
5230 btrfs_remove_delayed_node(inode); in btrfs_evict_inode()
5231 clear_inode(inode); in btrfs_evict_inode()
5239 static int btrfs_inode_by_name(struct inode *dir, struct dentry *dentry, in btrfs_inode_by_name()
5276 struct inode *dir, in fixup_tree_root_location()
5338 static void inode_tree_add(struct inode *inode) in inode_tree_add() argument
5340 struct btrfs_root *root = BTRFS_I(inode)->root; in inode_tree_add()
5344 struct rb_node *new = &BTRFS_I(inode)->rb_node; in inode_tree_add()
5345 u64 ino = btrfs_ino(inode); in inode_tree_add()
5347 if (inode_unhashed(inode)) in inode_tree_add()
5374 static void inode_tree_del(struct inode *inode) in inode_tree_del() argument
5376 struct btrfs_root *root = BTRFS_I(inode)->root; in inode_tree_del()
5380 if (!RB_EMPTY_NODE(&BTRFS_I(inode)->rb_node)) { in inode_tree_del()
5381 rb_erase(&BTRFS_I(inode)->rb_node, &root->inode_tree); in inode_tree_del()
5382 RB_CLEAR_NODE(&BTRFS_I(inode)->rb_node); in inode_tree_del()
5402 struct inode *inode; in btrfs_invalidate_inodes() local
5436 inode = igrab(&entry->vfs_inode); in btrfs_invalidate_inodes()
5437 if (inode) { in btrfs_invalidate_inodes()
5439 if (atomic_read(&inode->i_count) > 1) in btrfs_invalidate_inodes()
5440 d_prune_aliases(inode); in btrfs_invalidate_inodes()
5446 iput(inode); in btrfs_invalidate_inodes()
5460 static int btrfs_init_locked_inode(struct inode *inode, void *p) in btrfs_init_locked_inode() argument
5463 inode->i_ino = args->location->objectid; in btrfs_init_locked_inode()
5464 memcpy(&BTRFS_I(inode)->location, args->location, in btrfs_init_locked_inode()
5466 BTRFS_I(inode)->root = args->root; in btrfs_init_locked_inode()
5470 static int btrfs_find_actor(struct inode *inode, void *opaque) in btrfs_find_actor() argument
5473 return args->location->objectid == BTRFS_I(inode)->location.objectid && in btrfs_find_actor()
5474 args->root == BTRFS_I(inode)->root; in btrfs_find_actor()
5477 static struct inode *btrfs_iget_locked(struct super_block *s, in btrfs_iget_locked()
5481 struct inode *inode; in btrfs_iget_locked() local
5488 inode = iget5_locked(s, hashval, btrfs_find_actor, in btrfs_iget_locked()
5491 return inode; in btrfs_iget_locked()
5497 struct inode *btrfs_iget(struct super_block *s, struct btrfs_key *location, in btrfs_iget()
5500 struct inode *inode; in btrfs_iget() local
5502 inode = btrfs_iget_locked(s, location, root); in btrfs_iget()
5503 if (!inode) in btrfs_iget()
5506 if (inode->i_state & I_NEW) { in btrfs_iget()
5507 btrfs_read_locked_inode(inode); in btrfs_iget()
5508 if (!is_bad_inode(inode)) { in btrfs_iget()
5509 inode_tree_add(inode); in btrfs_iget()
5510 unlock_new_inode(inode); in btrfs_iget()
5514 unlock_new_inode(inode); in btrfs_iget()
5515 iput(inode); in btrfs_iget()
5516 inode = ERR_PTR(-ESTALE); in btrfs_iget()
5520 return inode; in btrfs_iget()
5523 static struct inode *new_simple_dir(struct super_block *s, in new_simple_dir()
5527 struct inode *inode = new_inode(s); in new_simple_dir() local
5529 if (!inode) in new_simple_dir()
5532 BTRFS_I(inode)->root = root; in new_simple_dir()
5533 memcpy(&BTRFS_I(inode)->location, key, sizeof(*key)); in new_simple_dir()
5534 set_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags); in new_simple_dir()
5536 inode->i_ino = BTRFS_EMPTY_SUBVOL_DIR_OBJECTID; in new_simple_dir()
5537 inode->i_op = &btrfs_dir_ro_inode_operations; in new_simple_dir()
5538 inode->i_fop = &simple_dir_operations; in new_simple_dir()
5539 inode->i_mode = S_IFDIR | S_IRUGO | S_IWUSR | S_IXUGO; in new_simple_dir()
5540 inode->i_mtime = CURRENT_TIME; in new_simple_dir()
5541 inode->i_atime = inode->i_mtime; in new_simple_dir()
5542 inode->i_ctime = inode->i_mtime; in new_simple_dir()
5543 BTRFS_I(inode)->i_otime = inode->i_mtime; in new_simple_dir()
5545 return inode; in new_simple_dir()
5548 struct inode *btrfs_lookup_dentry(struct inode *dir, struct dentry *dentry) in btrfs_lookup_dentry()
5550 struct inode *inode; in btrfs_lookup_dentry() local
5568 inode = btrfs_iget(dir->i_sb, &location, root, NULL); in btrfs_lookup_dentry()
5569 return inode; in btrfs_lookup_dentry()
5579 inode = ERR_PTR(ret); in btrfs_lookup_dentry()
5581 inode = new_simple_dir(dir->i_sb, &location, sub_root); in btrfs_lookup_dentry()
5583 inode = btrfs_iget(dir->i_sb, &location, sub_root, NULL); in btrfs_lookup_dentry()
5587 if (!IS_ERR(inode) && root != sub_root) { in btrfs_lookup_dentry()
5589 if (!(inode->i_sb->s_flags & MS_RDONLY)) in btrfs_lookup_dentry()
5593 iput(inode); in btrfs_lookup_dentry()
5594 inode = ERR_PTR(ret); in btrfs_lookup_dentry()
5598 return inode; in btrfs_lookup_dentry()
5604 struct inode *inode = d_inode(dentry); in btrfs_dentry_delete() local
5606 if (!inode && !IS_ROOT(dentry)) in btrfs_dentry_delete()
5607 inode = d_inode(dentry->d_parent); in btrfs_dentry_delete()
5609 if (inode) { in btrfs_dentry_delete()
5610 root = BTRFS_I(inode)->root; in btrfs_dentry_delete()
5614 if (btrfs_ino(inode) == BTRFS_EMPTY_SUBVOL_DIR_OBJECTID) in btrfs_dentry_delete()
5625 static struct dentry *btrfs_lookup(struct inode *dir, struct dentry *dentry, in btrfs_lookup()
5628 struct inode *inode; in btrfs_lookup() local
5630 inode = btrfs_lookup_dentry(dir, dentry); in btrfs_lookup()
5631 if (IS_ERR(inode)) { in btrfs_lookup()
5632 if (PTR_ERR(inode) == -ENOENT) in btrfs_lookup()
5633 inode = NULL; in btrfs_lookup()
5635 return ERR_CAST(inode); in btrfs_lookup()
5638 return d_splice_alias(inode, dentry); in btrfs_lookup()
5647 struct inode *inode = file_inode(file); in btrfs_real_readdir() local
5648 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_real_readdir()
5687 btrfs_get_delayed_items(inode, &ins_list, &del_list); in btrfs_real_readdir()
5692 key.objectid = btrfs_ino(inode); in btrfs_real_readdir()
5840 int btrfs_write_inode(struct inode *inode, struct writeback_control *wbc) in btrfs_write_inode() argument
5842 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_write_inode()
5847 if (test_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags)) in btrfs_write_inode()
5850 if (btrfs_fs_closing(root->fs_info) && btrfs_is_free_space_inode(inode)) in btrfs_write_inode()
5871 static int btrfs_dirty_inode(struct inode *inode) in btrfs_dirty_inode() argument
5873 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_dirty_inode()
5877 if (test_bit(BTRFS_INODE_DUMMY, &BTRFS_I(inode)->runtime_flags)) in btrfs_dirty_inode()
5884 ret = btrfs_update_inode(trans, root, inode); in btrfs_dirty_inode()
5892 ret = btrfs_update_inode(trans, root, inode); in btrfs_dirty_inode()
5895 if (BTRFS_I(inode)->delayed_node) in btrfs_dirty_inode()
5905 static int btrfs_update_time(struct inode *inode, struct timespec *now, in btrfs_update_time() argument
5908 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_update_time()
5914 inode_inc_iversion(inode); in btrfs_update_time()
5916 inode->i_ctime = *now; in btrfs_update_time()
5918 inode->i_mtime = *now; in btrfs_update_time()
5920 inode->i_atime = *now; in btrfs_update_time()
5921 return btrfs_dirty_inode(inode); in btrfs_update_time()
5929 static int btrfs_set_inode_index_count(struct inode *inode) in btrfs_set_inode_index_count() argument
5931 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_set_inode_index_count()
5937 key.objectid = btrfs_ino(inode); in btrfs_set_inode_index_count()
5960 BTRFS_I(inode)->index_cnt = 2; in btrfs_set_inode_index_count()
5969 if (found_key.objectid != btrfs_ino(inode) || in btrfs_set_inode_index_count()
5971 BTRFS_I(inode)->index_cnt = 2; in btrfs_set_inode_index_count()
5975 BTRFS_I(inode)->index_cnt = found_key.offset + 1; in btrfs_set_inode_index_count()
5985 int btrfs_set_inode_index(struct inode *dir, u64 *index) in btrfs_set_inode_index()
6004 static int btrfs_insert_inode_locked(struct inode *inode) in btrfs_insert_inode_locked() argument
6007 args.location = &BTRFS_I(inode)->location; in btrfs_insert_inode_locked()
6008 args.root = BTRFS_I(inode)->root; in btrfs_insert_inode_locked()
6010 return insert_inode_locked4(inode, in btrfs_insert_inode_locked()
6011 btrfs_inode_hash(inode->i_ino, BTRFS_I(inode)->root), in btrfs_insert_inode_locked()
6015 static struct inode *btrfs_new_inode(struct btrfs_trans_handle *trans, in btrfs_new_inode()
6017 struct inode *dir, in btrfs_new_inode()
6022 struct inode *inode; in btrfs_new_inode() local
6037 inode = new_inode(root->fs_info->sb); in btrfs_new_inode()
6038 if (!inode) { in btrfs_new_inode()
6048 set_nlink(inode, 0); in btrfs_new_inode()
6054 inode->i_ino = objectid; in btrfs_new_inode()
6062 iput(inode); in btrfs_new_inode()
6073 BTRFS_I(inode)->index_cnt = 2; in btrfs_new_inode()
6074 BTRFS_I(inode)->dir_index = *index; in btrfs_new_inode()
6075 BTRFS_I(inode)->root = root; in btrfs_new_inode()
6076 BTRFS_I(inode)->generation = trans->transid; in btrfs_new_inode()
6077 inode->i_generation = BTRFS_I(inode)->generation; in btrfs_new_inode()
6085 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); in btrfs_new_inode()
6107 location = &BTRFS_I(inode)->location; in btrfs_new_inode()
6112 ret = btrfs_insert_inode_locked(inode); in btrfs_new_inode()
6121 inode_init_owner(inode, dir, mode); in btrfs_new_inode()
6122 inode_set_bytes(inode, 0); in btrfs_new_inode()
6124 inode->i_mtime = CURRENT_TIME; in btrfs_new_inode()
6125 inode->i_atime = inode->i_mtime; in btrfs_new_inode()
6126 inode->i_ctime = inode->i_mtime; in btrfs_new_inode()
6127 BTRFS_I(inode)->i_otime = inode->i_mtime; in btrfs_new_inode()
6133 fill_inode_item(trans, path->nodes[0], inode_item, inode); in btrfs_new_inode()
6147 btrfs_inherit_iflags(inode, dir); in btrfs_new_inode()
6151 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATASUM; in btrfs_new_inode()
6153 BTRFS_I(inode)->flags |= BTRFS_INODE_NODATACOW | in btrfs_new_inode()
6157 inode_tree_add(inode); in btrfs_new_inode()
6159 trace_btrfs_inode_new(inode); in btrfs_new_inode()
6160 btrfs_set_inode_last_trans(trans, inode); in btrfs_new_inode()
6164 ret = btrfs_inode_inherit_props(trans, inode, dir); in btrfs_new_inode()
6168 btrfs_ino(inode), root->root_key.objectid, ret); in btrfs_new_inode()
6170 return inode; in btrfs_new_inode()
6173 unlock_new_inode(inode); in btrfs_new_inode()
6178 iput(inode); in btrfs_new_inode()
6182 static inline u8 btrfs_inode_type(struct inode *inode) in btrfs_inode_type() argument
6184 return btrfs_type_by_mode[(inode->i_mode & S_IFMT) >> S_SHIFT]; in btrfs_inode_type()
6194 struct inode *parent_inode, struct inode *inode, in btrfs_add_link() argument
6200 u64 ino = btrfs_ino(inode); in btrfs_add_link()
6204 memcpy(&key, &BTRFS_I(inode)->root->root_key, sizeof(key)); in btrfs_add_link()
6226 btrfs_inode_type(inode), index); in btrfs_add_link()
6262 struct inode *dir, struct dentry *dentry, in btrfs_add_nondir()
6263 struct inode *inode, int backref, u64 index) in btrfs_add_nondir() argument
6265 int err = btrfs_add_link(trans, dir, inode, in btrfs_add_nondir()
6273 static int btrfs_mknod(struct inode *dir, struct dentry *dentry, in btrfs_mknod()
6278 struct inode *inode = NULL; in btrfs_mknod() local
6300 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, in btrfs_mknod()
6303 if (IS_ERR(inode)) { in btrfs_mknod()
6304 err = PTR_ERR(inode); in btrfs_mknod()
6314 inode->i_op = &btrfs_special_inode_operations; in btrfs_mknod()
6315 init_special_inode(inode, inode->i_mode, rdev); in btrfs_mknod()
6317 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); in btrfs_mknod()
6321 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); in btrfs_mknod()
6325 btrfs_update_inode(trans, root, inode); in btrfs_mknod()
6326 unlock_new_inode(inode); in btrfs_mknod()
6327 d_instantiate(dentry, inode); in btrfs_mknod()
6335 inode_dec_link_count(inode); in btrfs_mknod()
6336 iput(inode); in btrfs_mknod()
6342 unlock_new_inode(inode); in btrfs_mknod()
6347 static int btrfs_create(struct inode *dir, struct dentry *dentry, in btrfs_create()
6352 struct inode *inode = NULL; in btrfs_create() local
6371 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, in btrfs_create()
6374 if (IS_ERR(inode)) { in btrfs_create()
6375 err = PTR_ERR(inode); in btrfs_create()
6385 inode->i_fop = &btrfs_file_operations; in btrfs_create()
6386 inode->i_op = &btrfs_file_inode_operations; in btrfs_create()
6387 inode->i_mapping->a_ops = &btrfs_aops; in btrfs_create()
6389 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); in btrfs_create()
6393 err = btrfs_update_inode(trans, root, inode); in btrfs_create()
6397 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); in btrfs_create()
6401 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; in btrfs_create()
6402 unlock_new_inode(inode); in btrfs_create()
6403 d_instantiate(dentry, inode); in btrfs_create()
6408 inode_dec_link_count(inode); in btrfs_create()
6409 iput(inode); in btrfs_create()
6416 unlock_new_inode(inode); in btrfs_create()
6421 static int btrfs_link(struct dentry *old_dentry, struct inode *dir, in btrfs_link()
6426 struct inode *inode = d_inode(old_dentry); in btrfs_link() local
6432 if (root->objectid != BTRFS_I(inode)->root->objectid) in btrfs_link()
6435 if (inode->i_nlink >= BTRFS_LINK_MAX) in btrfs_link()
6455 BTRFS_I(inode)->dir_index = 0ULL; in btrfs_link()
6456 inc_nlink(inode); in btrfs_link()
6457 inode_inc_iversion(inode); in btrfs_link()
6458 inode->i_ctime = CURRENT_TIME; in btrfs_link()
6459 ihold(inode); in btrfs_link()
6460 set_bit(BTRFS_INODE_COPY_EVERYTHING, &BTRFS_I(inode)->runtime_flags); in btrfs_link()
6462 err = btrfs_add_nondir(trans, dir, dentry, inode, 1, index); in btrfs_link()
6468 err = btrfs_update_inode(trans, root, inode); in btrfs_link()
6471 if (inode->i_nlink == 1) { in btrfs_link()
6476 err = btrfs_orphan_del(trans, inode); in btrfs_link()
6480 d_instantiate(dentry, inode); in btrfs_link()
6481 btrfs_log_new_name(trans, inode, NULL, parent); in btrfs_link()
6489 inode_dec_link_count(inode); in btrfs_link()
6490 iput(inode); in btrfs_link()
6496 static int btrfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) in btrfs_mkdir()
6498 struct inode *inode = NULL; in btrfs_mkdir() local
6519 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, in btrfs_mkdir()
6522 if (IS_ERR(inode)) { in btrfs_mkdir()
6523 err = PTR_ERR(inode); in btrfs_mkdir()
6529 inode->i_op = &btrfs_dir_inode_operations; in btrfs_mkdir()
6530 inode->i_fop = &btrfs_dir_file_operations; in btrfs_mkdir()
6532 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); in btrfs_mkdir()
6536 btrfs_i_size_write(inode, 0); in btrfs_mkdir()
6537 err = btrfs_update_inode(trans, root, inode); in btrfs_mkdir()
6541 err = btrfs_add_link(trans, dir, inode, dentry->d_name.name, in btrfs_mkdir()
6546 d_instantiate(dentry, inode); in btrfs_mkdir()
6551 unlock_new_inode(inode); in btrfs_mkdir()
6557 inode_dec_link_count(inode); in btrfs_mkdir()
6558 iput(inode); in btrfs_mkdir()
6565 unlock_new_inode(inode); in btrfs_mkdir()
6632 struct inode *inode, struct page *page, in uncompress_inline() argument
6672 struct extent_map *btrfs_get_extent(struct inode *inode, struct page *page, in btrfs_get_extent() argument
6680 u64 objectid = btrfs_ino(inode); in btrfs_get_extent()
6683 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_get_extent()
6688 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in btrfs_get_extent()
6689 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_get_extent()
6801 btrfs_extent_item_to_extent_map(inode, path, item, new_inline, em); in btrfs_get_extent()
6828 ret = uncompress_inline(path, inode, page, in btrfs_get_extent()
6943 struct extent_map *btrfs_get_extent_fiemap(struct inode *inode, struct page *page, in btrfs_get_extent_fiemap() argument
6955 em = btrfs_get_extent(inode, page, pg_offset, start, len, create); in btrfs_get_extent_fiemap()
6982 found = count_range_bits(&BTRFS_I(inode)->io_tree, &range_start, in btrfs_get_extent_fiemap()
7070 static struct extent_map *btrfs_new_extent_direct(struct inode *inode, in btrfs_new_extent_direct() argument
7073 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_new_extent_direct()
7079 alloc_hint = get_extent_allocation_hint(inode, start, len); in btrfs_new_extent_direct()
7085 em = create_pinned_em(inode, start, ins.offset, start, ins.objectid, in btrfs_new_extent_direct()
7092 ret = btrfs_add_ordered_extent_dio(inode, start, ins.objectid, in btrfs_new_extent_direct()
7107 noinline int can_nocow_extent(struct inode *inode, u64 offset, u64 *len, in can_nocow_extent() argument
7115 struct btrfs_root *root = BTRFS_I(inode)->root; in can_nocow_extent()
7116 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in can_nocow_extent()
7125 bool nocow = (BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW); in can_nocow_extent()
7131 ret = btrfs_lookup_file_extent(NULL, root, path, btrfs_ino(inode), in can_nocow_extent()
7148 if (key.objectid != btrfs_ino(inode) || in can_nocow_extent()
7219 ret = btrfs_cross_ref_exist(trans, root, btrfs_ino(inode), in can_nocow_extent()
7248 bool btrfs_page_exists_in_range(struct inode *inode, loff_t start, loff_t end) in btrfs_page_exists_in_range() argument
7250 struct radix_tree_root *root = &inode->i_mapping->page_tree; in btrfs_page_exists_in_range()
7318 static int lock_extent_direct(struct inode *inode, u64 lockstart, u64 lockend, in lock_extent_direct() argument
7325 lock_extent_bits(&BTRFS_I(inode)->io_tree, lockstart, lockend, in lock_extent_direct()
7332 ordered = btrfs_lookup_ordered_range(inode, lockstart, in lock_extent_direct()
7344 !btrfs_page_exists_in_range(inode, lockstart, lockend))) in lock_extent_direct()
7347 unlock_extent_cached(&BTRFS_I(inode)->io_tree, lockstart, lockend, in lock_extent_direct()
7351 btrfs_start_ordered_extent(inode, ordered, 1); in lock_extent_direct()
7355 ret = btrfs_fdatawrite_range(inode, lockstart, lockend); in lock_extent_direct()
7358 ret = filemap_fdatawait_range(inode->i_mapping, in lock_extent_direct()
7368 ret = invalidate_inode_pages2_range(inode->i_mapping, in lock_extent_direct()
7381 static struct extent_map *create_pinned_em(struct inode *inode, u64 start, in create_pinned_em() argument
7389 struct btrfs_root *root = BTRFS_I(inode)->root; in create_pinned_em()
7392 em_tree = &BTRFS_I(inode)->extent_tree; in create_pinned_em()
7413 btrfs_drop_extent_cache(inode, em->start, in create_pinned_em()
7429 static int btrfs_get_blocks_direct(struct inode *inode, sector_t iblock, in btrfs_get_blocks_direct() argument
7433 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_get_blocks_direct()
7435 u64 start = iblock << inode->i_blkbits; in btrfs_get_blocks_direct()
7464 if (lock_extent_direct(inode, lockstart, lockend, &cached_state, create)) in btrfs_get_blocks_direct()
7467 em = btrfs_get_extent(inode, NULL, 0, start, len, 0); in btrfs_get_blocks_direct()
7517 ((BTRFS_I(inode)->flags & BTRFS_INODE_NODATACOW) && in btrfs_get_blocks_direct()
7529 if (can_nocow_extent(inode, start, &len, &orig_start, in btrfs_get_blocks_direct()
7533 em = create_pinned_em(inode, start, len, in btrfs_get_blocks_direct()
7544 ret = btrfs_add_ordered_extent_dio(inode, start, in btrfs_get_blocks_direct()
7560 em = btrfs_new_extent_direct(inode, start, len); in btrfs_get_blocks_direct()
7568 inode->i_blkbits; in btrfs_get_blocks_direct()
7580 if (start + len > i_size_read(inode)) in btrfs_get_blocks_direct()
7581 i_size_write(inode, start + len); in btrfs_get_blocks_direct()
7591 spin_lock(&BTRFS_I(inode)->lock); in btrfs_get_blocks_direct()
7592 BTRFS_I(inode)->outstanding_extents++; in btrfs_get_blocks_direct()
7593 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_get_blocks_direct()
7597 btrfs_free_reserved_data_space(inode, len); in btrfs_get_blocks_direct()
7606 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, in btrfs_get_blocks_direct()
7618 clear_extent_bit(&BTRFS_I(inode)->io_tree, lockstart, lockend, in btrfs_get_blocks_direct()
7625 static inline int submit_dio_repair_bio(struct inode *inode, struct bio *bio, in submit_dio_repair_bio() argument
7628 struct btrfs_root *root = BTRFS_I(inode)->root; in submit_dio_repair_bio()
7646 static int btrfs_check_dio_repairable(struct inode *inode, in btrfs_check_dio_repairable() argument
7653 num_copies = btrfs_num_copies(BTRFS_I(inode)->root->fs_info, in btrfs_check_dio_repairable()
7680 static int dio_read_error(struct inode *inode, struct bio *failed_bio, in dio_read_error() argument
7693 ret = btrfs_get_io_failure_record(inode, start, end, &failrec); in dio_read_error()
7697 ret = btrfs_check_dio_repairable(inode, failed_bio, failrec, in dio_read_error()
7700 free_io_failure(inode, failrec); in dio_read_error()
7710 isector >>= inode->i_sb->s_blocksize_bits; in dio_read_error()
7711 bio = btrfs_create_repair_bio(inode, failed_bio, failrec, page, in dio_read_error()
7714 free_io_failure(inode, failrec); in dio_read_error()
7718 btrfs_debug(BTRFS_I(inode)->root->fs_info, in dio_read_error()
7722 ret = submit_dio_repair_bio(inode, bio, read_mode, in dio_read_error()
7725 free_io_failure(inode, failrec); in dio_read_error()
7734 struct inode *inode; member
7750 clean_io_failure(done->inode, done->start, bvec->bv_page, 0); in btrfs_retry_endio_nocsum()
7756 static int __btrfs_correct_data_nocsum(struct inode *inode, in __btrfs_correct_data_nocsum() argument
7766 done.inode = inode; in __btrfs_correct_data_nocsum()
7774 ret = dio_read_error(inode, &io_bio->bio, bvec->bv_page, start, in __btrfs_correct_data_nocsum()
7808 ret = __readpage_endio_check(done->inode, io_bio, i, in btrfs_retry_endio()
7812 clean_io_failure(done->inode, done->start, in btrfs_retry_endio()
7824 static int __btrfs_subio_endio_read(struct inode *inode, in __btrfs_subio_endio_read() argument
7836 done.inode = inode; in __btrfs_subio_endio_read()
7839 ret = __readpage_endio_check(inode, io_bio, i, bvec->bv_page, in __btrfs_subio_endio_read()
7848 ret = dio_read_error(inode, &io_bio->bio, bvec->bv_page, start, in __btrfs_subio_endio_read()
7871 static int btrfs_subio_endio_read(struct inode *inode, in btrfs_subio_endio_read() argument
7874 bool skip_csum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; in btrfs_subio_endio_read()
7878 return __btrfs_correct_data_nocsum(inode, io_bio); in btrfs_subio_endio_read()
7882 return __btrfs_subio_endio_read(inode, io_bio, err); in btrfs_subio_endio_read()
7889 struct inode *inode = dip->inode; in btrfs_endio_direct_read() local
7894 err = btrfs_subio_endio_read(inode, io_bio, err); in btrfs_endio_direct_read()
7896 unlock_extent(&BTRFS_I(inode)->io_tree, dip->logical_offset, in btrfs_endio_direct_read()
7915 struct inode *inode = dip->inode; in btrfs_endio_direct_write() local
7916 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_endio_direct_write()
7926 ret = btrfs_dec_test_first_ordered_pending(inode, &ordered, in btrfs_endio_direct_write()
7959 static int __btrfs_submit_bio_start_direct_io(struct inode *inode, int rw, in __btrfs_submit_bio_start_direct_io() argument
7964 struct btrfs_root *root = BTRFS_I(inode)->root; in __btrfs_submit_bio_start_direct_io()
7965 ret = btrfs_csum_one_bio(root, inode, bio, offset, 1); in __btrfs_submit_bio_start_direct_io()
7975 btrfs_warn(BTRFS_I(dip->inode)->root->fs_info, in btrfs_end_dio_bio()
7977 btrfs_ino(dip->inode), bio->bi_rw, in btrfs_end_dio_bio()
7982 err = dip->subio_endio(dip->inode, btrfs_io_bio(bio), err); in btrfs_end_dio_bio()
8016 struct inode *inode, in btrfs_lookup_and_bind_dio_csum() argument
8031 ret = btrfs_lookup_bio_sums_dio(root, inode, dip->orig_bio, in btrfs_lookup_and_bind_dio_csum()
8041 file_offset >>= inode->i_sb->s_blocksize_bits; in btrfs_lookup_and_bind_dio_csum()
8047 static inline int __btrfs_submit_dio_bio(struct bio *bio, struct inode *inode, in __btrfs_submit_dio_bio() argument
8053 struct btrfs_root *root = BTRFS_I(inode)->root; in __btrfs_submit_dio_bio()
8057 async_submit = !atomic_read(&BTRFS_I(inode)->sync_writers); in __btrfs_submit_dio_bio()
8073 inode, rw, bio, 0, 0, in __btrfs_submit_dio_bio()
8083 ret = btrfs_csum_one_bio(root, inode, bio, file_offset, 1); in __btrfs_submit_dio_bio()
8087 ret = btrfs_lookup_and_bind_dio_csum(root, inode, dip, bio, in __btrfs_submit_dio_bio()
8102 struct inode *inode = dip->inode; in btrfs_submit_direct_hook() local
8103 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_submit_direct_hook()
8153 ret = __btrfs_submit_dio_bio(bio, inode, rw, in btrfs_submit_direct_hook()
8192 ret = __btrfs_submit_dio_bio(bio, inode, rw, file_offset, skip_sum, in btrfs_submit_direct_hook()
8213 struct inode *inode, loff_t file_offset) in btrfs_submit_direct() argument
8215 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_submit_direct()
8223 skip_sum = BTRFS_I(inode)->flags & BTRFS_INODE_NODATASUM; in btrfs_submit_direct()
8238 dip->inode = inode; in btrfs_submit_direct()
8272 ordered = btrfs_lookup_ordered_extent(inode, file_offset); in btrfs_submit_direct()
8320 struct inode *inode = file->f_mapping->host; in btrfs_direct_IO() local
8328 if (check_direct_IO(BTRFS_I(inode)->root, iocb, iter, offset)) in btrfs_direct_IO()
8331 inode_dio_begin(inode); in btrfs_direct_IO()
8342 &BTRFS_I(inode)->runtime_flags)) in btrfs_direct_IO()
8343 filemap_fdatawrite_range(inode->i_mapping, offset, in btrfs_direct_IO()
8352 if (offset + count <= inode->i_size) { in btrfs_direct_IO()
8353 mutex_unlock(&inode->i_mutex); in btrfs_direct_IO()
8356 ret = btrfs_delalloc_reserve_space(inode, count); in btrfs_direct_IO()
8370 &BTRFS_I(inode)->runtime_flags)) { in btrfs_direct_IO()
8371 inode_dio_end(inode); in btrfs_direct_IO()
8376 ret = __blockdev_direct_IO(iocb, inode, in btrfs_direct_IO()
8377 BTRFS_I(inode)->root->fs_info->fs_devices->latest_bdev, in btrfs_direct_IO()
8383 btrfs_delalloc_release_space(inode, count); in btrfs_direct_IO()
8385 btrfs_delalloc_release_space(inode, in btrfs_direct_IO()
8390 inode_dio_end(inode); in btrfs_direct_IO()
8392 mutex_lock(&inode->i_mutex); in btrfs_direct_IO()
8399 static int btrfs_fiemap(struct inode *inode, struct fiemap_extent_info *fieinfo, in btrfs_fiemap() argument
8408 return extent_fiemap(inode, fieinfo, start, len, btrfs_get_extent_fiemap); in btrfs_fiemap()
8421 struct inode *inode = page->mapping->host; in btrfs_writepage() local
8435 if (!igrab(inode)) { in btrfs_writepage()
8441 btrfs_add_delayed_iput(inode); in btrfs_writepage()
8490 struct inode *inode = page->mapping->host; in btrfs_invalidatepage() local
8496 int inode_evicting = inode->i_state & I_FREEING; in btrfs_invalidatepage()
8507 tree = &BTRFS_I(inode)->io_tree; in btrfs_invalidatepage()
8515 ordered = btrfs_lookup_ordered_extent(inode, page_start); in btrfs_invalidatepage()
8535 tree = &BTRFS_I(inode)->ordered_tree; in btrfs_invalidatepage()
8544 if (btrfs_dec_test_ordered_pending(inode, &ordered, in btrfs_invalidatepage()
8593 struct inode *inode = file_inode(vma->vm_file); in btrfs_page_mkwrite() local
8594 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_page_mkwrite()
8595 struct extent_io_tree *io_tree = &BTRFS_I(inode)->io_tree; in btrfs_page_mkwrite()
8606 sb_start_pagefault(inode->i_sb); in btrfs_page_mkwrite()
8607 ret = btrfs_delalloc_reserve_space(inode, PAGE_CACHE_SIZE); in btrfs_page_mkwrite()
8625 size = i_size_read(inode); in btrfs_page_mkwrite()
8629 if ((page->mapping != inode->i_mapping) || in btrfs_page_mkwrite()
8643 ordered = btrfs_lookup_ordered_extent(inode, page_start); in btrfs_page_mkwrite()
8648 btrfs_start_ordered_extent(inode, ordered, 1); in btrfs_page_mkwrite()
8660 clear_extent_bit(&BTRFS_I(inode)->io_tree, page_start, page_end, in btrfs_page_mkwrite()
8665 ret = btrfs_set_extent_delalloc(inode, page_start, page_end, in btrfs_page_mkwrite()
8691 BTRFS_I(inode)->last_trans = root->fs_info->generation; in btrfs_page_mkwrite()
8692 BTRFS_I(inode)->last_sub_trans = BTRFS_I(inode)->root->log_transid; in btrfs_page_mkwrite()
8693 BTRFS_I(inode)->last_log_commit = BTRFS_I(inode)->root->last_log_commit; in btrfs_page_mkwrite()
8699 sb_end_pagefault(inode->i_sb); in btrfs_page_mkwrite()
8704 btrfs_delalloc_release_space(inode, PAGE_CACHE_SIZE); in btrfs_page_mkwrite()
8706 sb_end_pagefault(inode->i_sb); in btrfs_page_mkwrite()
8710 static int btrfs_truncate(struct inode *inode) in btrfs_truncate() argument
8712 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_truncate()
8720 ret = btrfs_wait_ordered_range(inode, inode->i_size & (~mask), in btrfs_truncate()
8789 set_bit(BTRFS_INODE_NEEDS_FULL_SYNC, &BTRFS_I(inode)->runtime_flags); in btrfs_truncate()
8793 ret = btrfs_truncate_inode_items(trans, root, inode, in btrfs_truncate()
8794 inode->i_size, in btrfs_truncate()
8802 ret = btrfs_update_inode(trans, root, inode); in btrfs_truncate()
8824 if (ret == 0 && inode->i_nlink > 0) { in btrfs_truncate()
8826 ret = btrfs_orphan_del(trans, inode); in btrfs_truncate()
8833 ret = btrfs_update_inode(trans, root, inode); in btrfs_truncate()
8858 struct inode *inode; in btrfs_create_subvol_root() local
8862 inode = btrfs_new_inode(trans, new_root, NULL, "..", 2, in btrfs_create_subvol_root()
8866 if (IS_ERR(inode)) in btrfs_create_subvol_root()
8867 return PTR_ERR(inode); in btrfs_create_subvol_root()
8868 inode->i_op = &btrfs_dir_inode_operations; in btrfs_create_subvol_root()
8869 inode->i_fop = &btrfs_dir_file_operations; in btrfs_create_subvol_root()
8871 set_nlink(inode, 1); in btrfs_create_subvol_root()
8872 btrfs_i_size_write(inode, 0); in btrfs_create_subvol_root()
8873 unlock_new_inode(inode); in btrfs_create_subvol_root()
8881 err = btrfs_update_inode(trans, new_root, inode); in btrfs_create_subvol_root()
8883 iput(inode); in btrfs_create_subvol_root()
8887 struct inode *btrfs_alloc_inode(struct super_block *sb) in btrfs_alloc_inode()
8890 struct inode *inode; in btrfs_alloc_inode() local
8924 inode = &ei->vfs_inode; in btrfs_alloc_inode()
8926 extent_io_tree_init(&ei->io_tree, &inode->i_data); in btrfs_alloc_inode()
8927 extent_io_tree_init(&ei->io_failure_tree, &inode->i_data); in btrfs_alloc_inode()
8938 return inode; in btrfs_alloc_inode()
8942 void btrfs_test_destroy_inode(struct inode *inode) in btrfs_test_destroy_inode() argument
8944 btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); in btrfs_test_destroy_inode()
8945 kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); in btrfs_test_destroy_inode()
8951 struct inode *inode = container_of(head, struct inode, i_rcu); in btrfs_i_callback() local
8952 kmem_cache_free(btrfs_inode_cachep, BTRFS_I(inode)); in btrfs_i_callback()
8955 void btrfs_destroy_inode(struct inode *inode) in btrfs_destroy_inode() argument
8958 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_destroy_inode()
8960 WARN_ON(!hlist_empty(&inode->i_dentry)); in btrfs_destroy_inode()
8961 WARN_ON(inode->i_data.nrpages); in btrfs_destroy_inode()
8962 WARN_ON(BTRFS_I(inode)->outstanding_extents); in btrfs_destroy_inode()
8963 WARN_ON(BTRFS_I(inode)->reserved_extents); in btrfs_destroy_inode()
8964 WARN_ON(BTRFS_I(inode)->delalloc_bytes); in btrfs_destroy_inode()
8965 WARN_ON(BTRFS_I(inode)->csum_bytes); in btrfs_destroy_inode()
8966 WARN_ON(BTRFS_I(inode)->defrag_bytes); in btrfs_destroy_inode()
8977 &BTRFS_I(inode)->runtime_flags)) { in btrfs_destroy_inode()
8979 btrfs_ino(inode)); in btrfs_destroy_inode()
8984 ordered = btrfs_lookup_first_ordered_extent(inode, (u64)-1); in btrfs_destroy_inode()
8990 btrfs_remove_ordered_extent(inode, ordered); in btrfs_destroy_inode()
8995 inode_tree_del(inode); in btrfs_destroy_inode()
8996 btrfs_drop_extent_cache(inode, 0, (u64)-1, 0); in btrfs_destroy_inode()
8998 call_rcu(&inode->i_rcu, btrfs_i_callback); in btrfs_destroy_inode()
9001 int btrfs_drop_inode(struct inode *inode) in btrfs_drop_inode() argument
9003 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_drop_inode()
9012 return generic_drop_inode(inode); in btrfs_drop_inode()
9092 struct inode *inode = d_inode(dentry); in btrfs_getattr() local
9093 u32 blocksize = inode->i_sb->s_blocksize; in btrfs_getattr()
9095 generic_fillattr(inode, stat); in btrfs_getattr()
9096 stat->dev = BTRFS_I(inode)->root->anon_dev; in btrfs_getattr()
9099 spin_lock(&BTRFS_I(inode)->lock); in btrfs_getattr()
9100 delalloc_bytes = BTRFS_I(inode)->delalloc_bytes; in btrfs_getattr()
9101 spin_unlock(&BTRFS_I(inode)->lock); in btrfs_getattr()
9102 stat->blocks = (ALIGN(inode_get_bytes(inode), blocksize) + in btrfs_getattr()
9107 static int btrfs_rename(struct inode *old_dir, struct dentry *old_dentry, in btrfs_rename()
9108 struct inode *new_dir, struct dentry *new_dentry) in btrfs_rename()
9113 struct inode *new_inode = d_inode(new_dentry); in btrfs_rename()
9114 struct inode *old_inode = d_inode(old_dentry); in btrfs_rename()
9287 static int btrfs_rename2(struct inode *old_dir, struct dentry *old_dentry, in btrfs_rename2()
9288 struct inode *new_dir, struct dentry *new_dentry, in btrfs_rename2()
9300 struct inode *inode; in btrfs_run_delalloc_work() local
9304 inode = delalloc_work->inode; in btrfs_run_delalloc_work()
9306 btrfs_wait_ordered_range(inode, 0, (u64)-1); in btrfs_run_delalloc_work()
9308 filemap_flush(inode->i_mapping); in btrfs_run_delalloc_work()
9310 &BTRFS_I(inode)->runtime_flags)) in btrfs_run_delalloc_work()
9311 filemap_flush(inode->i_mapping); in btrfs_run_delalloc_work()
9315 btrfs_add_delayed_iput(inode); in btrfs_run_delalloc_work()
9317 iput(inode); in btrfs_run_delalloc_work()
9321 struct btrfs_delalloc_work *btrfs_alloc_delalloc_work(struct inode *inode, in btrfs_alloc_delalloc_work() argument
9332 work->inode = inode; in btrfs_alloc_delalloc_work()
9335 WARN_ON_ONCE(!inode); in btrfs_alloc_delalloc_work()
9356 struct inode *inode; in __start_delalloc_inodes() local
9374 inode = igrab(&binode->vfs_inode); in __start_delalloc_inodes()
9375 if (!inode) { in __start_delalloc_inodes()
9381 work = btrfs_alloc_delalloc_work(inode, 0, delay_iput); in __start_delalloc_inodes()
9384 btrfs_add_delayed_iput(inode); in __start_delalloc_inodes()
9386 iput(inode); in __start_delalloc_inodes()
9498 static int btrfs_symlink(struct inode *dir, struct dentry *dentry, in btrfs_symlink()
9505 struct inode *inode = NULL; in btrfs_symlink() local
9535 inode = btrfs_new_inode(trans, root, dir, dentry->d_name.name, in btrfs_symlink()
9538 if (IS_ERR(inode)) { in btrfs_symlink()
9539 err = PTR_ERR(inode); in btrfs_symlink()
9549 inode->i_fop = &btrfs_file_operations; in btrfs_symlink()
9550 inode->i_op = &btrfs_file_inode_operations; in btrfs_symlink()
9551 inode->i_mapping->a_ops = &btrfs_aops; in btrfs_symlink()
9552 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; in btrfs_symlink()
9554 err = btrfs_init_inode_security(trans, inode, dir, &dentry->d_name); in btrfs_symlink()
9558 err = btrfs_add_nondir(trans, dir, dentry, inode, 0, index); in btrfs_symlink()
9567 key.objectid = btrfs_ino(inode); in btrfs_symlink()
9593 inode->i_op = &btrfs_symlink_inode_operations; in btrfs_symlink()
9594 inode->i_mapping->a_ops = &btrfs_symlink_aops; in btrfs_symlink()
9595 inode_set_bytes(inode, name_len); in btrfs_symlink()
9596 btrfs_i_size_write(inode, name_len); in btrfs_symlink()
9597 err = btrfs_update_inode(trans, root, inode); in btrfs_symlink()
9603 unlock_new_inode(inode); in btrfs_symlink()
9604 d_instantiate(dentry, inode); in btrfs_symlink()
9609 inode_dec_link_count(inode); in btrfs_symlink()
9610 iput(inode); in btrfs_symlink()
9617 unlock_new_inode(inode); in btrfs_symlink()
9621 static int __btrfs_prealloc_file_range(struct inode *inode, int mode, in __btrfs_prealloc_file_range() argument
9626 struct extent_map_tree *em_tree = &BTRFS_I(inode)->extent_tree; in __btrfs_prealloc_file_range()
9628 struct btrfs_root *root = BTRFS_I(inode)->root; in __btrfs_prealloc_file_range()
9657 ret = insert_reserved_file_extent(trans, inode, in __btrfs_prealloc_file_range()
9671 btrfs_drop_extent_cache(inode, cur_offset, in __btrfs_prealloc_file_range()
9677 &BTRFS_I(inode)->runtime_flags); in __btrfs_prealloc_file_range()
9698 btrfs_drop_extent_cache(inode, cur_offset, in __btrfs_prealloc_file_range()
9708 inode_inc_iversion(inode); in __btrfs_prealloc_file_range()
9709 inode->i_ctime = CURRENT_TIME; in __btrfs_prealloc_file_range()
9710 BTRFS_I(inode)->flags |= BTRFS_INODE_PREALLOC; in __btrfs_prealloc_file_range()
9712 (actual_len > inode->i_size) && in __btrfs_prealloc_file_range()
9713 (cur_offset > inode->i_size)) { in __btrfs_prealloc_file_range()
9718 i_size_write(inode, i_size); in __btrfs_prealloc_file_range()
9719 btrfs_ordered_update_i_size(inode, i_size, NULL); in __btrfs_prealloc_file_range()
9722 ret = btrfs_update_inode(trans, root, inode); in __btrfs_prealloc_file_range()
9737 int btrfs_prealloc_file_range(struct inode *inode, int mode, in btrfs_prealloc_file_range() argument
9741 return __btrfs_prealloc_file_range(inode, mode, start, num_bytes, in btrfs_prealloc_file_range()
9746 int btrfs_prealloc_file_range_trans(struct inode *inode, in btrfs_prealloc_file_range_trans() argument
9751 return __btrfs_prealloc_file_range(inode, mode, start, num_bytes, in btrfs_prealloc_file_range_trans()
9760 static int btrfs_permission(struct inode *inode, int mask) in btrfs_permission() argument
9762 struct btrfs_root *root = BTRFS_I(inode)->root; in btrfs_permission()
9763 umode_t mode = inode->i_mode; in btrfs_permission()
9769 if (BTRFS_I(inode)->flags & BTRFS_INODE_READONLY) in btrfs_permission()
9772 return generic_permission(inode, mask); in btrfs_permission()
9775 static int btrfs_tmpfile(struct inode *dir, struct dentry *dentry, umode_t mode) in btrfs_tmpfile()
9779 struct inode *inode = NULL; in btrfs_tmpfile() local
9795 inode = btrfs_new_inode(trans, root, dir, NULL, 0, in btrfs_tmpfile()
9797 if (IS_ERR(inode)) { in btrfs_tmpfile()
9798 ret = PTR_ERR(inode); in btrfs_tmpfile()
9799 inode = NULL; in btrfs_tmpfile()
9803 inode->i_fop = &btrfs_file_operations; in btrfs_tmpfile()
9804 inode->i_op = &btrfs_file_inode_operations; in btrfs_tmpfile()
9806 inode->i_mapping->a_ops = &btrfs_aops; in btrfs_tmpfile()
9807 BTRFS_I(inode)->io_tree.ops = &btrfs_extent_io_ops; in btrfs_tmpfile()
9809 ret = btrfs_init_inode_security(trans, inode, dir, NULL); in btrfs_tmpfile()
9813 ret = btrfs_update_inode(trans, root, inode); in btrfs_tmpfile()
9816 ret = btrfs_orphan_add(trans, inode); in btrfs_tmpfile()
9827 set_nlink(inode, 1); in btrfs_tmpfile()
9828 unlock_new_inode(inode); in btrfs_tmpfile()
9829 d_tmpfile(dentry, inode); in btrfs_tmpfile()
9830 mark_inode_dirty(inode); in btrfs_tmpfile()
9835 iput(inode); in btrfs_tmpfile()
9841 unlock_new_inode(inode); in btrfs_tmpfile()
9847 int btrfs_inode_check_errors(struct inode *inode) in btrfs_inode_check_errors() argument
9851 if (test_bit(AS_ENOSPC, &inode->i_mapping->flags) && in btrfs_inode_check_errors()
9852 test_and_clear_bit(AS_ENOSPC, &inode->i_mapping->flags)) in btrfs_inode_check_errors()
9854 if (test_bit(AS_EIO, &inode->i_mapping->flags) && in btrfs_inode_check_errors()
9855 test_and_clear_bit(AS_EIO, &inode->i_mapping->flags)) in btrfs_inode_check_errors()