| .. | .. |
|---|
| 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 |
|---|