.. | .. |
---|
15 | 15 | struct btrfs_log_ctx { |
---|
16 | 16 | int log_ret; |
---|
17 | 17 | int log_transid; |
---|
18 | | - int io_err; |
---|
19 | 18 | bool log_new_dentries; |
---|
| 19 | + bool logging_new_name; |
---|
20 | 20 | struct inode *inode; |
---|
21 | 21 | struct list_head list; |
---|
| 22 | + /* Only used for fast fsyncs. */ |
---|
| 23 | + struct list_head ordered_extents; |
---|
22 | 24 | }; |
---|
23 | 25 | |
---|
24 | 26 | static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx, |
---|
.. | .. |
---|
26 | 28 | { |
---|
27 | 29 | ctx->log_ret = 0; |
---|
28 | 30 | ctx->log_transid = 0; |
---|
29 | | - ctx->io_err = 0; |
---|
30 | 31 | ctx->log_new_dentries = false; |
---|
| 32 | + ctx->logging_new_name = false; |
---|
31 | 33 | ctx->inode = inode; |
---|
32 | 34 | INIT_LIST_HEAD(&ctx->list); |
---|
| 35 | + INIT_LIST_HEAD(&ctx->ordered_extents); |
---|
33 | 36 | } |
---|
34 | 37 | |
---|
35 | | -static inline void btrfs_set_log_full_commit(struct btrfs_fs_info *fs_info, |
---|
36 | | - struct btrfs_trans_handle *trans) |
---|
| 38 | +static inline void btrfs_release_log_ctx_extents(struct btrfs_log_ctx *ctx) |
---|
37 | 39 | { |
---|
38 | | - WRITE_ONCE(fs_info->last_trans_log_full_commit, trans->transid); |
---|
| 40 | + struct btrfs_ordered_extent *ordered; |
---|
| 41 | + struct btrfs_ordered_extent *tmp; |
---|
| 42 | + |
---|
| 43 | + ASSERT(inode_is_locked(ctx->inode)); |
---|
| 44 | + |
---|
| 45 | + list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) { |
---|
| 46 | + list_del_init(&ordered->log_list); |
---|
| 47 | + btrfs_put_ordered_extent(ordered); |
---|
| 48 | + } |
---|
39 | 49 | } |
---|
40 | 50 | |
---|
41 | | -static inline int btrfs_need_log_full_commit(struct btrfs_fs_info *fs_info, |
---|
42 | | - struct btrfs_trans_handle *trans) |
---|
| 51 | +static inline void btrfs_set_log_full_commit(struct btrfs_trans_handle *trans) |
---|
43 | 52 | { |
---|
44 | | - return READ_ONCE(fs_info->last_trans_log_full_commit) == |
---|
| 53 | + WRITE_ONCE(trans->fs_info->last_trans_log_full_commit, trans->transid); |
---|
| 54 | +} |
---|
| 55 | + |
---|
| 56 | +static inline int btrfs_need_log_full_commit(struct btrfs_trans_handle *trans) |
---|
| 57 | +{ |
---|
| 58 | + return READ_ONCE(trans->fs_info->last_trans_log_full_commit) == |
---|
45 | 59 | trans->transid; |
---|
46 | 60 | } |
---|
47 | 61 | |
---|
.. | .. |
---|
53 | 67 | int btrfs_recover_log_trees(struct btrfs_root *tree_root); |
---|
54 | 68 | int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans, |
---|
55 | 69 | struct dentry *dentry, |
---|
56 | | - const loff_t start, |
---|
57 | | - const loff_t end, |
---|
58 | 70 | struct btrfs_log_ctx *ctx); |
---|
59 | 71 | int btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans, |
---|
60 | 72 | struct btrfs_root *root, |
---|
.. | .. |
---|
65 | 77 | const char *name, int name_len, |
---|
66 | 78 | struct btrfs_inode *inode, u64 dirid); |
---|
67 | 79 | void btrfs_end_log_trans(struct btrfs_root *root); |
---|
68 | | -int btrfs_pin_log_trans(struct btrfs_root *root); |
---|
| 80 | +void btrfs_pin_log_trans(struct btrfs_root *root); |
---|
69 | 81 | void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans, |
---|
70 | 82 | struct btrfs_inode *dir, struct btrfs_inode *inode, |
---|
71 | 83 | int for_rename); |
---|
72 | 84 | void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans, |
---|
73 | 85 | struct btrfs_inode *dir); |
---|
74 | | -/* Return values for btrfs_log_new_name() */ |
---|
75 | | -enum { |
---|
76 | | - BTRFS_DONT_NEED_TRANS_COMMIT, |
---|
77 | | - BTRFS_NEED_TRANS_COMMIT, |
---|
78 | | - BTRFS_DONT_NEED_LOG_SYNC, |
---|
79 | | - BTRFS_NEED_LOG_SYNC, |
---|
80 | | -}; |
---|
81 | | -int btrfs_log_new_name(struct btrfs_trans_handle *trans, |
---|
| 86 | +void btrfs_log_new_name(struct btrfs_trans_handle *trans, |
---|
82 | 87 | struct btrfs_inode *inode, struct btrfs_inode *old_dir, |
---|
83 | | - struct dentry *parent, |
---|
84 | | - bool sync_log, struct btrfs_log_ctx *ctx); |
---|
| 88 | + struct dentry *parent); |
---|
85 | 89 | |
---|
86 | 90 | #endif |
---|