btrfs: move super prototypes into super.h
[linux-block.git] / fs / btrfs / tree-log.h
CommitLineData
9888c340 1/* SPDX-License-Identifier: GPL-2.0 */
e02119d5
CM
2/*
3 * Copyright (C) 2008 Oracle. All rights reserved.
e02119d5
CM
4 */
5
9888c340
DS
6#ifndef BTRFS_TREE_LOG_H
7#define BTRFS_TREE_LOG_H
e02119d5 8
9b569ea0 9#include "messages.h"
995946dd
MX
10#include "ctree.h"
11#include "transaction.h"
12
257c62e1
CM
13/* return value for btrfs_log_dentry_safe that means we don't need to log it at all */
14#define BTRFS_NO_LOG_SYNC 256
15
f31f09f6
JB
16/* We can't use the tree log for whatever reason, force a transaction commit */
17#define BTRFS_LOG_FORCE_COMMIT (1)
18
8b050d35
MX
19struct btrfs_log_ctx {
20 int log_ret;
d1433deb 21 int log_transid;
2f2ff0ee 22 bool log_new_dentries;
75b463d2 23 bool logging_new_name;
30b80f3c 24 bool logging_new_delayed_dentries;
0f8ce498
FM
25 /* Indicate if the inode being logged was logged before. */
26 bool logged_before;
dc287224
FM
27 /* Tracks the last logged dir item/index key offset. */
28 u64 last_dir_item_offset;
28a23593 29 struct inode *inode;
8b050d35 30 struct list_head list;
48778179
FM
31 /* Only used for fast fsyncs. */
32 struct list_head ordered_extents;
e09d94c9
FM
33 struct list_head conflict_inodes;
34 int num_conflict_inodes;
35 bool logging_conflict_inodes;
8b050d35
MX
36};
37
28a23593
FM
38static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx,
39 struct inode *inode)
8b050d35
MX
40{
41 ctx->log_ret = 0;
d1433deb 42 ctx->log_transid = 0;
2f2ff0ee 43 ctx->log_new_dentries = false;
75b463d2 44 ctx->logging_new_name = false;
30b80f3c 45 ctx->logging_new_delayed_dentries = false;
0f8ce498 46 ctx->logged_before = false;
28a23593 47 ctx->inode = inode;
8b050d35 48 INIT_LIST_HEAD(&ctx->list);
48778179 49 INIT_LIST_HEAD(&ctx->ordered_extents);
e09d94c9
FM
50 INIT_LIST_HEAD(&ctx->conflict_inodes);
51 ctx->num_conflict_inodes = 0;
52 ctx->logging_conflict_inodes = false;
48778179
FM
53}
54
55static inline void btrfs_release_log_ctx_extents(struct btrfs_log_ctx *ctx)
56{
57 struct btrfs_ordered_extent *ordered;
58 struct btrfs_ordered_extent *tmp;
59
60 ASSERT(inode_is_locked(ctx->inode));
61
62 list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {
63 list_del_init(&ordered->log_list);
64 btrfs_put_ordered_extent(ordered);
65 }
8b050d35
MX
66}
67
90787766 68static inline void btrfs_set_log_full_commit(struct btrfs_trans_handle *trans)
995946dd 69{
90787766 70 WRITE_ONCE(trans->fs_info->last_trans_log_full_commit, trans->transid);
995946dd
MX
71}
72
4884b8e8 73static inline int btrfs_need_log_full_commit(struct btrfs_trans_handle *trans)
995946dd 74{
4884b8e8 75 return READ_ONCE(trans->fs_info->last_trans_log_full_commit) ==
995946dd
MX
76 trans->transid;
77}
78
e02119d5 79int btrfs_sync_log(struct btrfs_trans_handle *trans,
8b050d35 80 struct btrfs_root *root, struct btrfs_log_ctx *ctx);
e02119d5 81int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root);
4a500fd1
YZ
82int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
83 struct btrfs_fs_info *fs_info);
e02119d5
CM
84int btrfs_recover_log_trees(struct btrfs_root *tree_root);
85int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
e5b84f7a 86 struct dentry *dentry,
8b050d35 87 struct btrfs_log_ctx *ctx);
9a35fc95
JB
88void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
89 struct btrfs_root *root,
6db75318 90 const struct fscrypt_str *name,
9a35fc95
JB
91 struct btrfs_inode *dir, u64 index);
92void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
93 struct btrfs_root *root,
6db75318 94 const struct fscrypt_str *name,
9a35fc95 95 struct btrfs_inode *inode, u64 dirid);
143bede5 96void btrfs_end_log_trans(struct btrfs_root *root);
45128b08 97void btrfs_pin_log_trans(struct btrfs_root *root);
12fcfd22 98void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
4176bdbf 99 struct btrfs_inode *dir, struct btrfs_inode *inode,
12fcfd22 100 int for_rename);
1ec9a1ae 101void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
43663557 102 struct btrfs_inode *dir);
75b463d2 103void btrfs_log_new_name(struct btrfs_trans_handle *trans,
d5f5bd54 104 struct dentry *old_dentry, struct btrfs_inode *old_dir,
88d2beec 105 u64 old_dir_index, struct dentry *parent);
9888c340 106
e02119d5 107#endif