Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
fs
btrfs
delayed-inode.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2011 Fujitsu. All rights reserved.
3
* Written by Miao Xie <
[email protected]
>
4
*
5
* This program is free software; you can redistribute it and/or
6
* modify it under the terms of the GNU General Public
7
* License v2 as published by the Free Software Foundation.
8
*
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* General Public License for more details.
13
*
14
* You should have received a copy of the GNU General Public
15
* License along with this program; if not, write to the
16
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
* Boston, MA 021110-1307, USA.
18
*/
19
20
#ifndef __DELAYED_TREE_OPERATION_H
21
#define __DELAYED_TREE_OPERATION_H
22
23
#include <linux/rbtree.h>
24
#include <
linux/spinlock.h
>
25
#include <
linux/mutex.h
>
26
#include <linux/list.h>
27
#include <linux/wait.h>
28
#include <
linux/atomic.h
>
29
30
#include "
ctree.h
"
31
32
/* types of the delayed item */
33
#define BTRFS_DELAYED_INSERTION_ITEM 1
34
#define BTRFS_DELAYED_DELETION_ITEM 2
35
36
struct
btrfs_delayed_root
{
37
spinlock_t
lock
;
38
struct
list_head
node_list
;
39
/*
40
* Used for delayed nodes which is waiting to be dealt with by the
41
* worker. If the delayed node is inserted into the work queue, we
42
* drop it from this list.
43
*/
44
struct
list_head
prepare_list
;
45
atomic_t
items
;
/* for delayed items */
46
int
nodes
;
/* for delayed nodes */
47
wait_queue_head_t
wait
;
48
};
49
50
struct
btrfs_delayed_node
{
51
u64
inode_id
;
52
u64
bytes_reserved
;
53
struct
btrfs_root
*
root
;
54
/* Used to add the node into the delayed root's node list. */
55
struct
list_head
n_list
;
56
/*
57
* Used to add the node into the prepare list, the nodes in this list
58
* is waiting to be dealt with by the async worker.
59
*/
60
struct
list_head
p_list
;
61
struct
rb_root
ins_root
;
62
struct
rb_root
del_root
;
63
struct
mutex
mutex
;
64
struct
btrfs_inode_item
inode_item
;
65
atomic_t
refs
;
66
u64
index_cnt
;
67
bool
in_list
;
68
bool
inode_dirty
;
69
int
count
;
70
};
71
72
struct
btrfs_delayed_item
{
73
struct
rb_node
rb_node
;
74
struct
btrfs_key
key
;
75
struct
list_head
tree_list
;
/* used for batch insert/delete items */
76
struct
list_head
readdir_list
;
/* used for readdir items */
77
u64
bytes_reserved
;
78
struct
btrfs_delayed_node
*
delayed_node
;
79
atomic_t
refs
;
80
int
ins_or_del
;
81
u32
data_len
;
82
char
data
[0];
83
};
84
85
static
inline
void
btrfs_init_delayed_root(
86
struct
btrfs_delayed_root
*delayed_root)
87
{
88
atomic_set
(&delayed_root->
items
, 0);
89
delayed_root->
nodes
= 0;
90
spin_lock_init
(&delayed_root->
lock
);
91
init_waitqueue_head
(&delayed_root->
wait
);
92
INIT_LIST_HEAD(&delayed_root->
node_list
);
93
INIT_LIST_HEAD(&delayed_root->
prepare_list
);
94
}
95
96
int
btrfs_insert_delayed_dir_index
(
struct
btrfs_trans_handle
*
trans
,
97
struct
btrfs_root
*
root
,
const
char
*
name
,
98
int
name_len
,
struct
inode
*dir,
99
struct
btrfs_disk_key
*disk_key,
u8
type
,
100
u64
index
);
101
102
int
btrfs_delete_delayed_dir_index
(
struct
btrfs_trans_handle
*
trans
,
103
struct
btrfs_root
*
root
,
struct
inode
*dir,
104
u64
index
);
105
106
int
btrfs_inode_delayed_dir_index_count
(
struct
inode
*
inode
);
107
108
int
btrfs_run_delayed_items
(
struct
btrfs_trans_handle
*
trans
,
109
struct
btrfs_root
*
root
);
110
int
btrfs_run_delayed_items_nr
(
struct
btrfs_trans_handle
*
trans
,
111
struct
btrfs_root
*
root
,
int
nr
);
112
113
void
btrfs_balance_delayed_items
(
struct
btrfs_root
*
root
);
114
115
int
btrfs_commit_inode_delayed_items
(
struct
btrfs_trans_handle
*
trans
,
116
struct
inode
*
inode
);
117
/* Used for evicting the inode. */
118
void
btrfs_remove_delayed_node
(
struct
inode
*
inode
);
119
void
btrfs_kill_delayed_inode_items
(
struct
inode
*
inode
);
120
121
122
int
btrfs_delayed_update_inode
(
struct
btrfs_trans_handle
*
trans
,
123
struct
btrfs_root
*
root
,
struct
inode
*
inode
);
124
int
btrfs_fill_inode
(
struct
inode
*
inode
,
u32
*
rdev
);
125
126
/* Used for drop dead root */
127
void
btrfs_kill_all_delayed_nodes
(
struct
btrfs_root
*
root
);
128
129
/* Used for clean the transaction */
130
void
btrfs_destroy_delayed_inodes
(
struct
btrfs_root
*
root
);
131
132
/* Used for readdir() */
133
void
btrfs_get_delayed_items
(
struct
inode
*
inode
,
struct
list_head
*ins_list,
134
struct
list_head
*del_list);
135
void
btrfs_put_delayed_items
(
struct
list_head
*ins_list,
136
struct
list_head
*del_list);
137
int
btrfs_should_delete_dir_index
(
struct
list_head
*del_list,
138
u64
index
);
139
int
btrfs_readdir_delayed_dir_index
(
struct
file
*filp,
void
*
dirent
,
140
filldir_t
filldir,
141
struct
list_head
*ins_list);
142
143
/* for init */
144
int
__init
btrfs_delayed_inode_init
(
void
);
145
void
btrfs_delayed_inode_exit
(
void
);
146
147
/* for debugging */
148
void
btrfs_assert_delayed_root_empty
(
struct
btrfs_root
*
root
);
149
150
#endif
Generated on Thu Jan 10 2013 14:45:25 for Linux Kernel by
1.8.2