Lines Matching refs:fs_info

47 static inline u64 btrfs_inc_tree_mod_seq(struct btrfs_fs_info *fs_info)
49 return atomic64_inc_return(&fs_info->tree_mod_seq);
60 u64 btrfs_get_tree_mod_seq(struct btrfs_fs_info *fs_info,
63 write_lock(&fs_info->tree_mod_log_lock);
65 elem->seq = btrfs_inc_tree_mod_seq(fs_info);
66 list_add_tail(&elem->list, &fs_info->tree_mod_seq_list);
67 set_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags);
69 write_unlock(&fs_info->tree_mod_log_lock);
74 void btrfs_put_tree_mod_seq(struct btrfs_fs_info *fs_info,
87 write_lock(&fs_info->tree_mod_log_lock);
91 if (list_empty(&fs_info->tree_mod_seq_list)) {
92 clear_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags);
96 first = list_first_entry(&fs_info->tree_mod_seq_list,
103 write_unlock(&fs_info->tree_mod_log_lock);
113 tm_root = &fs_info->tree_mod_log;
122 write_unlock(&fs_info->tree_mod_log_lock);
133 static noinline int tree_mod_log_insert(struct btrfs_fs_info *fs_info,
141 lockdep_assert_held_write(&fs_info->tree_mod_log_lock);
143 tm->seq = btrfs_inc_tree_mod_seq(fs_info);
145 tm_root = &fs_info->tree_mod_log;
171 * write unlock fs_info::tree_mod_log_lock.
173 static inline bool tree_mod_dont_log(struct btrfs_fs_info *fs_info,
176 if (!test_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags))
181 write_lock(&fs_info->tree_mod_log_lock);
182 if (list_empty(&(fs_info)->tree_mod_seq_list)) {
183 write_unlock(&fs_info->tree_mod_log_lock);
191 static inline bool tree_mod_need_log(const struct btrfs_fs_info *fs_info,
194 if (!test_bit(BTRFS_FS_TREE_MOD_LOG_USERS, &fs_info->flags))
231 if (!tree_mod_need_log(eb->fs_info, eb))
238 if (tree_mod_dont_log(eb->fs_info, eb)) {
253 ret = tree_mod_log_insert(eb->fs_info, tm);
255 write_unlock(&eb->fs_info->tree_mod_log_lock);
292 if (!tree_mod_need_log(eb->fs_info, eb))
318 if (tree_mod_dont_log(eb->fs_info, eb)) {
341 ret = tree_mod_log_insert(eb->fs_info, tm_list[i]);
346 ret = tree_mod_log_insert(eb->fs_info, tm);
349 write_unlock(&eb->fs_info->tree_mod_log_lock);
358 rb_erase(&tm_list[i]->node, &eb->fs_info->tree_mod_log);
363 write_unlock(&eb->fs_info->tree_mod_log_lock);
370 static inline int tree_mod_log_free_eb(struct btrfs_fs_info *fs_info,
378 ret = tree_mod_log_insert(fs_info, tm_list[i]);
382 &fs_info->tree_mod_log);
394 struct btrfs_fs_info *fs_info = old_root->fs_info;
401 if (!tree_mod_need_log(fs_info, NULL))
435 if (tree_mod_dont_log(fs_info, NULL)) {
451 ret = tree_mod_log_free_eb(fs_info, tm_list, nritems);
453 ret = tree_mod_log_insert(fs_info, tm);
456 write_unlock(&fs_info->tree_mod_log_lock);
474 static struct tree_mod_elem *__tree_mod_log_search(struct btrfs_fs_info *fs_info,
483 read_lock(&fs_info->tree_mod_log_lock);
484 tm_root = &fs_info->tree_mod_log;
511 read_unlock(&fs_info->tree_mod_log_lock);
521 static struct tree_mod_elem *tree_mod_log_search_oldest(struct btrfs_fs_info *fs_info,
524 return __tree_mod_log_search(fs_info, start, min_seq, true);
532 static struct tree_mod_elem *tree_mod_log_search(struct btrfs_fs_info *fs_info,
535 return __tree_mod_log_search(fs_info, start, min_seq, false);
544 struct btrfs_fs_info *fs_info = dst->fs_info;
556 if (!tree_mod_need_log(fs_info, NULL))
608 if (tree_mod_dont_log(fs_info, NULL)) {
626 ret = tree_mod_log_insert(fs_info, dst_move_tm);
631 ret = tree_mod_log_insert(fs_info, tm_list_rem[i]);
634 ret = tree_mod_log_insert(fs_info, tm_list_add[i]);
639 ret = tree_mod_log_insert(fs_info, src_move_tm);
644 write_unlock(&fs_info->tree_mod_log_lock);
651 rb_erase(&dst_move_tm->node, &fs_info->tree_mod_log);
654 rb_erase(&src_move_tm->node, &fs_info->tree_mod_log);
659 rb_erase(&tm_list[i]->node, &fs_info->tree_mod_log);
664 write_unlock(&fs_info->tree_mod_log_lock);
677 if (!tree_mod_need_log(eb->fs_info, eb))
697 if (tree_mod_dont_log(eb->fs_info, eb)) {
712 ret = tree_mod_log_free_eb(eb->fs_info, tm_list, nritems);
714 write_unlock(&eb->fs_info->tree_mod_log_lock);
753 tm = tree_mod_log_search_oldest(eb_root->fs_info, root_logical,
791 static void tree_mod_log_rewind(struct btrfs_fs_info *fs_info,
820 read_lock(&fs_info->tree_mod_log_lock);
872 btrfs_warn(fs_info,
901 read_unlock(&fs_info->tree_mod_log_lock);
912 struct extent_buffer *btrfs_tree_mod_log_rewind(struct btrfs_fs_info *fs_info,
926 tm = tree_mod_log_search(fs_info, eb->start, time_seq);
932 eb_rewin = alloc_dummy_extent_buffer(fs_info, eb->start);
958 tree_mod_log_rewind(fs_info, eb_rewin, time_seq, tm);
960 BTRFS_NODEPTRS_PER_BLOCK(fs_info));
974 struct btrfs_fs_info *fs_info = root->fs_info;
1000 tm = tree_mod_log_search(fs_info, logical, time_seq);
1010 old = read_tree_block(fs_info, logical, &check);
1014 btrfs_warn(fs_info,
1032 tm2 = tree_mod_log_search(fs_info, logical, time_seq);
1047 eb = alloc_dummy_extent_buffer(fs_info, logical);
1067 tree_mod_log_rewind(fs_info, eb, time_seq, tm);
1070 WARN_ON(btrfs_header_nritems(eb) > BTRFS_NODEPTRS_PER_BLOCK(fs_info));
1099 u64 btrfs_tree_mod_log_lowest_seq(struct btrfs_fs_info *fs_info)
1103 read_lock(&fs_info->tree_mod_log_lock);
1104 if (!list_empty(&fs_info->tree_mod_seq_list)) {
1107 elem = list_first_entry(&fs_info->tree_mod_seq_list,
1111 read_unlock(&fs_info->tree_mod_log_lock);