Blame view
fs/btrfs/delayed-inode.h
4.24 KB
9888c3402 btrfs: replace GP... |
1 |
/* SPDX-License-Identifier: GPL-2.0 */ |
16cdcec73 btrfs: implement ... |
2 3 4 |
/* * Copyright (C) 2011 Fujitsu. All rights reserved. * Written by Miao Xie <miaox@cn.fujitsu.com> |
16cdcec73 btrfs: implement ... |
5 |
*/ |
9888c3402 btrfs: replace GP... |
6 7 |
#ifndef BTRFS_DELAYED_INODE_H #define BTRFS_DELAYED_INODE_H |
16cdcec73 btrfs: implement ... |
8 9 10 11 12 13 |
#include <linux/rbtree.h> #include <linux/spinlock.h> #include <linux/mutex.h> #include <linux/list.h> #include <linux/wait.h> |
60063497a atomic: use <linu... |
14 |
#include <linux/atomic.h> |
6de5f18e7 btrfs: convert bt... |
15 |
#include <linux/refcount.h> |
16cdcec73 btrfs: implement ... |
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#include "ctree.h" /* types of the delayed item */ #define BTRFS_DELAYED_INSERTION_ITEM 1 #define BTRFS_DELAYED_DELETION_ITEM 2 struct btrfs_delayed_root { spinlock_t lock; struct list_head node_list; /* * Used for delayed nodes which is waiting to be dealt with by the * worker. If the delayed node is inserted into the work queue, we * drop it from this list. */ struct list_head prepare_list; atomic_t items; /* for delayed items */ |
de3cb945d Btrfs: improve th... |
32 |
atomic_t items_seq; /* for delayed items */ |
16cdcec73 btrfs: implement ... |
33 34 35 |
int nodes; /* for delayed nodes */ wait_queue_head_t wait; }; |
7cf35d91b Btrfs: use flags ... |
36 37 |
#define BTRFS_DELAYED_NODE_IN_LIST 0 #define BTRFS_DELAYED_NODE_INODE_DIRTY 1 |
67de11769 Btrfs: introduce ... |
38 |
#define BTRFS_DELAYED_NODE_DEL_IREF 2 |
7cf35d91b Btrfs: use flags ... |
39 |
|
16cdcec73 btrfs: implement ... |
40 41 42 43 44 45 46 47 48 49 50 |
struct btrfs_delayed_node { u64 inode_id; u64 bytes_reserved; struct btrfs_root *root; /* Used to add the node into the delayed root's node list. */ struct list_head n_list; /* * Used to add the node into the prepare list, the nodes in this list * is waiting to be dealt with by the async worker. */ struct list_head p_list; |
03a1d4c89 Btrfs: delayed-in... |
51 52 |
struct rb_root_cached ins_root; struct rb_root_cached del_root; |
16cdcec73 btrfs: implement ... |
53 54 |
struct mutex mutex; struct btrfs_inode_item inode_item; |
6de5f18e7 btrfs: convert bt... |
55 |
refcount_t refs; |
16cdcec73 btrfs: implement ... |
56 |
u64 index_cnt; |
7cf35d91b Btrfs: use flags ... |
57 |
unsigned long flags; |
16cdcec73 btrfs: implement ... |
58 59 60 61 62 63 64 65 66 |
int count; }; struct btrfs_delayed_item { struct rb_node rb_node; struct btrfs_key key; struct list_head tree_list; /* used for batch insert/delete items */ struct list_head readdir_list; /* used for readdir items */ u64 bytes_reserved; |
16cdcec73 btrfs: implement ... |
67 |
struct btrfs_delayed_node *delayed_node; |
089e77e10 btrfs: convert bt... |
68 |
refcount_t refs; |
16cdcec73 btrfs: implement ... |
69 70 |
int ins_or_del; u32 data_len; |
17b238acf btrfs: delayed-in... |
71 |
char data[]; |
16cdcec73 btrfs: implement ... |
72 73 74 75 76 77 |
}; static inline void btrfs_init_delayed_root( struct btrfs_delayed_root *delayed_root) { atomic_set(&delayed_root->items, 0); |
de3cb945d Btrfs: improve th... |
78 |
atomic_set(&delayed_root->items_seq, 0); |
16cdcec73 btrfs: implement ... |
79 80 81 82 83 84 85 86 |
delayed_root->nodes = 0; spin_lock_init(&delayed_root->lock); init_waitqueue_head(&delayed_root->wait); INIT_LIST_HEAD(&delayed_root->node_list); INIT_LIST_HEAD(&delayed_root->prepare_list); } int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans, |
2ff7e61e0 btrfs: take an fs... |
87 |
const char *name, int name_len, |
6f45d1856 btrfs: Make btrfs... |
88 |
struct btrfs_inode *dir, |
16cdcec73 btrfs: implement ... |
89 90 91 92 |
struct btrfs_disk_key *disk_key, u8 type, u64 index); int btrfs_delete_delayed_dir_index(struct btrfs_trans_handle *trans, |
e67bbbb9d btrfs: Make btrfs... |
93 |
struct btrfs_inode *dir, u64 index); |
16cdcec73 btrfs: implement ... |
94 |
|
f5cc7b80a btrfs: Make btrfs... |
95 |
int btrfs_inode_delayed_dir_index_count(struct btrfs_inode *inode); |
16cdcec73 btrfs: implement ... |
96 |
|
e5c304e65 btrfs: Don't pass... |
97 98 |
int btrfs_run_delayed_items(struct btrfs_trans_handle *trans); int btrfs_run_delayed_items_nr(struct btrfs_trans_handle *trans, int nr); |
16cdcec73 btrfs: implement ... |
99 |
|
2ff7e61e0 btrfs: take an fs... |
100 |
void btrfs_balance_delayed_items(struct btrfs_fs_info *fs_info); |
16cdcec73 btrfs: implement ... |
101 102 |
int btrfs_commit_inode_delayed_items(struct btrfs_trans_handle *trans, |
5f4b32e94 btrfs: Make btrfs... |
103 |
struct btrfs_inode *inode); |
16cdcec73 btrfs: implement ... |
104 |
/* Used for evicting the inode. */ |
f48d1cf59 btrfs: Make btrfs... |
105 |
void btrfs_remove_delayed_node(struct btrfs_inode *inode); |
4ccb5c723 btrfs: Make btrfs... |
106 |
void btrfs_kill_delayed_inode_items(struct btrfs_inode *inode); |
aa79021fd btrfs: Make btrfs... |
107 |
int btrfs_commit_inode_delayed_inode(struct btrfs_inode *inode); |
16cdcec73 btrfs: implement ... |
108 109 110 111 |
int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans, struct btrfs_root *root, struct inode *inode); |
2f7e33d43 btrfs: fix incons... |
112 |
int btrfs_fill_inode(struct inode *inode, u32 *rdev); |
e07222c7d btrfs: Make btrfs... |
113 |
int btrfs_delayed_delete_inode_ref(struct btrfs_inode *inode); |
16cdcec73 btrfs: implement ... |
114 115 116 |
/* Used for drop dead root */ void btrfs_kill_all_delayed_nodes(struct btrfs_root *root); |
67cde3448 Btrfs: destroy th... |
117 |
/* Used for clean the transaction */ |
ccdf9b305 btrfs: root->fs_i... |
118 |
void btrfs_destroy_delayed_inodes(struct btrfs_fs_info *fs_info); |
67cde3448 Btrfs: destroy th... |
119 |
|
16cdcec73 btrfs: implement ... |
120 |
/* Used for readdir() */ |
02dbfc99b Btrfs: fix ->iter... |
121 122 123 124 125 126 |
bool btrfs_readdir_get_delayed_items(struct inode *inode, struct list_head *ins_list, struct list_head *del_list); void btrfs_readdir_put_delayed_items(struct inode *inode, struct list_head *ins_list, struct list_head *del_list); |
16cdcec73 btrfs: implement ... |
127 128 |
int btrfs_should_delete_dir_index(struct list_head *del_list, u64 index); |
9cdda8d31 [readdir] convert... |
129 |
int btrfs_readdir_delayed_dir_index(struct dir_context *ctx, |
d2fbb2b58 btrfs: increment ... |
130 |
struct list_head *ins_list); |
16cdcec73 btrfs: implement ... |
131 132 133 |
/* for init */ int __init btrfs_delayed_inode_init(void); |
e67c718b5 btrfs: add more _... |
134 |
void __cold btrfs_delayed_inode_exit(void); |
e999376f0 Btrfs: avoid dela... |
135 136 |
/* for debugging */ |
ccdf9b305 btrfs: root->fs_i... |
137 |
void btrfs_assert_delayed_root_empty(struct btrfs_fs_info *fs_info); |
e999376f0 Btrfs: avoid dela... |
138 |
|
16cdcec73 btrfs: implement ... |
139 |
#endif |