cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

tree-log.h (3048B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * Copyright (C) 2008 Oracle.  All rights reserved.
      4 */
      5
      6#ifndef BTRFS_TREE_LOG_H
      7#define BTRFS_TREE_LOG_H
      8
      9#include "ctree.h"
     10#include "transaction.h"
     11
     12/* return value for btrfs_log_dentry_safe that means we don't need to log it at all */
     13#define BTRFS_NO_LOG_SYNC 256
     14
     15struct btrfs_log_ctx {
     16	int log_ret;
     17	int log_transid;
     18	bool log_new_dentries;
     19	bool logging_new_name;
     20	/* Indicate if the inode being logged was logged before. */
     21	bool logged_before;
     22	/* Tracks the last logged dir item/index key offset. */
     23	u64 last_dir_item_offset;
     24	struct inode *inode;
     25	struct list_head list;
     26	/* Only used for fast fsyncs. */
     27	struct list_head ordered_extents;
     28};
     29
     30static inline void btrfs_init_log_ctx(struct btrfs_log_ctx *ctx,
     31				      struct inode *inode)
     32{
     33	ctx->log_ret = 0;
     34	ctx->log_transid = 0;
     35	ctx->log_new_dentries = false;
     36	ctx->logging_new_name = false;
     37	ctx->logged_before = false;
     38	ctx->inode = inode;
     39	INIT_LIST_HEAD(&ctx->list);
     40	INIT_LIST_HEAD(&ctx->ordered_extents);
     41}
     42
     43static inline void btrfs_release_log_ctx_extents(struct btrfs_log_ctx *ctx)
     44{
     45	struct btrfs_ordered_extent *ordered;
     46	struct btrfs_ordered_extent *tmp;
     47
     48	ASSERT(inode_is_locked(ctx->inode));
     49
     50	list_for_each_entry_safe(ordered, tmp, &ctx->ordered_extents, log_list) {
     51		list_del_init(&ordered->log_list);
     52		btrfs_put_ordered_extent(ordered);
     53	}
     54}
     55
     56static inline void btrfs_set_log_full_commit(struct btrfs_trans_handle *trans)
     57{
     58	WRITE_ONCE(trans->fs_info->last_trans_log_full_commit, trans->transid);
     59}
     60
     61static inline int btrfs_need_log_full_commit(struct btrfs_trans_handle *trans)
     62{
     63	return READ_ONCE(trans->fs_info->last_trans_log_full_commit) ==
     64		trans->transid;
     65}
     66
     67int btrfs_sync_log(struct btrfs_trans_handle *trans,
     68		   struct btrfs_root *root, struct btrfs_log_ctx *ctx);
     69int btrfs_free_log(struct btrfs_trans_handle *trans, struct btrfs_root *root);
     70int btrfs_free_log_root_tree(struct btrfs_trans_handle *trans,
     71			     struct btrfs_fs_info *fs_info);
     72int btrfs_recover_log_trees(struct btrfs_root *tree_root);
     73int btrfs_log_dentry_safe(struct btrfs_trans_handle *trans,
     74			  struct dentry *dentry,
     75			  struct btrfs_log_ctx *ctx);
     76void btrfs_del_dir_entries_in_log(struct btrfs_trans_handle *trans,
     77				  struct btrfs_root *root,
     78				  const char *name, int name_len,
     79				  struct btrfs_inode *dir, u64 index);
     80void btrfs_del_inode_ref_in_log(struct btrfs_trans_handle *trans,
     81				struct btrfs_root *root,
     82				const char *name, int name_len,
     83				struct btrfs_inode *inode, u64 dirid);
     84void btrfs_end_log_trans(struct btrfs_root *root);
     85void btrfs_pin_log_trans(struct btrfs_root *root);
     86void btrfs_record_unlink_dir(struct btrfs_trans_handle *trans,
     87			     struct btrfs_inode *dir, struct btrfs_inode *inode,
     88			     int for_rename);
     89void btrfs_record_snapshot_destroy(struct btrfs_trans_handle *trans,
     90				   struct btrfs_inode *dir);
     91void btrfs_log_new_name(struct btrfs_trans_handle *trans,
     92			struct dentry *old_dentry, struct btrfs_inode *old_dir,
     93			u64 old_dir_index, struct dentry *parent);
     94
     95#endif