diff options
author | Miao Xie <miaox@cn.fujitsu.com> | 2013-12-26 00:07:05 -0500 |
---|---|---|
committer | Chris Mason <clm@fb.com> | 2014-01-28 16:20:08 -0500 |
commit | 7cf35d91b4f143b5c7529976bf5e7573a07051cd (patch) | |
tree | 9a6b5663009bdf5812018d1d7587147478875bfd | |
parent | a56dbd89400dd2cb9c91d734435dbfe059495da1 (diff) |
Btrfs: use flags instead of the bool variants in delayed node
Signed-off-by: Miao Xie <miaox@cn.fujitsu.com>
Signed-off-by: Chris Mason <clm@fb.com>
-rw-r--r-- | fs/btrfs/delayed-inode.c | 33 | ||||
-rw-r--r-- | fs/btrfs/delayed-inode.h | 6 |
2 files changed, 21 insertions, 18 deletions
diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c index 826a26053c70..222ca8cdc53a 100644 --- a/fs/btrfs/delayed-inode.c +++ b/fs/btrfs/delayed-inode.c | |||
@@ -55,8 +55,7 @@ static inline void btrfs_init_delayed_node( | |||
55 | delayed_node->inode_id = inode_id; | 55 | delayed_node->inode_id = inode_id; |
56 | atomic_set(&delayed_node->refs, 0); | 56 | atomic_set(&delayed_node->refs, 0); |
57 | delayed_node->count = 0; | 57 | delayed_node->count = 0; |
58 | delayed_node->in_list = 0; | 58 | delayed_node->flags = 0; |
59 | delayed_node->inode_dirty = 0; | ||
60 | delayed_node->ins_root = RB_ROOT; | 59 | delayed_node->ins_root = RB_ROOT; |
61 | delayed_node->del_root = RB_ROOT; | 60 | delayed_node->del_root = RB_ROOT; |
62 | mutex_init(&delayed_node->mutex); | 61 | mutex_init(&delayed_node->mutex); |
@@ -172,7 +171,7 @@ static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root, | |||
172 | int mod) | 171 | int mod) |
173 | { | 172 | { |
174 | spin_lock(&root->lock); | 173 | spin_lock(&root->lock); |
175 | if (node->in_list) { | 174 | if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { |
176 | if (!list_empty(&node->p_list)) | 175 | if (!list_empty(&node->p_list)) |
177 | list_move_tail(&node->p_list, &root->prepare_list); | 176 | list_move_tail(&node->p_list, &root->prepare_list); |
178 | else if (mod) | 177 | else if (mod) |
@@ -182,7 +181,7 @@ static void btrfs_queue_delayed_node(struct btrfs_delayed_root *root, | |||
182 | list_add_tail(&node->p_list, &root->prepare_list); | 181 | list_add_tail(&node->p_list, &root->prepare_list); |
183 | atomic_inc(&node->refs); /* inserted into list */ | 182 | atomic_inc(&node->refs); /* inserted into list */ |
184 | root->nodes++; | 183 | root->nodes++; |
185 | node->in_list = 1; | 184 | set_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); |
186 | } | 185 | } |
187 | spin_unlock(&root->lock); | 186 | spin_unlock(&root->lock); |
188 | } | 187 | } |
@@ -192,13 +191,13 @@ static void btrfs_dequeue_delayed_node(struct btrfs_delayed_root *root, | |||
192 | struct btrfs_delayed_node *node) | 191 | struct btrfs_delayed_node *node) |
193 | { | 192 | { |
194 | spin_lock(&root->lock); | 193 | spin_lock(&root->lock); |
195 | if (node->in_list) { | 194 | if (test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { |
196 | root->nodes--; | 195 | root->nodes--; |
197 | atomic_dec(&node->refs); /* not in the list */ | 196 | atomic_dec(&node->refs); /* not in the list */ |
198 | list_del_init(&node->n_list); | 197 | list_del_init(&node->n_list); |
199 | if (!list_empty(&node->p_list)) | 198 | if (!list_empty(&node->p_list)) |
200 | list_del_init(&node->p_list); | 199 | list_del_init(&node->p_list); |
201 | node->in_list = 0; | 200 | clear_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags); |
202 | } | 201 | } |
203 | spin_unlock(&root->lock); | 202 | spin_unlock(&root->lock); |
204 | } | 203 | } |
@@ -231,7 +230,8 @@ static struct btrfs_delayed_node *btrfs_next_delayed_node( | |||
231 | 230 | ||
232 | delayed_root = node->root->fs_info->delayed_root; | 231 | delayed_root = node->root->fs_info->delayed_root; |
233 | spin_lock(&delayed_root->lock); | 232 | spin_lock(&delayed_root->lock); |
234 | if (!node->in_list) { /* not in the list */ | 233 | if (!test_bit(BTRFS_DELAYED_NODE_IN_LIST, &node->flags)) { |
234 | /* not in the list */ | ||
235 | if (list_empty(&delayed_root->node_list)) | 235 | if (list_empty(&delayed_root->node_list)) |
236 | goto out; | 236 | goto out; |
237 | p = delayed_root->node_list.next; | 237 | p = delayed_root->node_list.next; |
@@ -1004,9 +1004,10 @@ static void btrfs_release_delayed_inode(struct btrfs_delayed_node *delayed_node) | |||
1004 | { | 1004 | { |
1005 | struct btrfs_delayed_root *delayed_root; | 1005 | struct btrfs_delayed_root *delayed_root; |
1006 | 1006 | ||
1007 | if (delayed_node && delayed_node->inode_dirty) { | 1007 | if (delayed_node && |
1008 | test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { | ||
1008 | BUG_ON(!delayed_node->root); | 1009 | BUG_ON(!delayed_node->root); |
1009 | delayed_node->inode_dirty = 0; | 1010 | clear_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); |
1010 | delayed_node->count--; | 1011 | delayed_node->count--; |
1011 | 1012 | ||
1012 | delayed_root = delayed_node->root->fs_info->delayed_root; | 1013 | delayed_root = delayed_node->root->fs_info->delayed_root; |
@@ -1059,7 +1060,7 @@ static inline int btrfs_update_delayed_inode(struct btrfs_trans_handle *trans, | |||
1059 | int ret; | 1060 | int ret; |
1060 | 1061 | ||
1061 | mutex_lock(&node->mutex); | 1062 | mutex_lock(&node->mutex); |
1062 | if (!node->inode_dirty) { | 1063 | if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &node->flags)) { |
1063 | mutex_unlock(&node->mutex); | 1064 | mutex_unlock(&node->mutex); |
1064 | return 0; | 1065 | return 0; |
1065 | } | 1066 | } |
@@ -1203,7 +1204,7 @@ int btrfs_commit_inode_delayed_inode(struct inode *inode) | |||
1203 | return 0; | 1204 | return 0; |
1204 | 1205 | ||
1205 | mutex_lock(&delayed_node->mutex); | 1206 | mutex_lock(&delayed_node->mutex); |
1206 | if (!delayed_node->inode_dirty) { | 1207 | if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { |
1207 | mutex_unlock(&delayed_node->mutex); | 1208 | mutex_unlock(&delayed_node->mutex); |
1208 | btrfs_release_delayed_node(delayed_node); | 1209 | btrfs_release_delayed_node(delayed_node); |
1209 | return 0; | 1210 | return 0; |
@@ -1227,7 +1228,7 @@ int btrfs_commit_inode_delayed_inode(struct inode *inode) | |||
1227 | trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; | 1228 | trans->block_rsv = &delayed_node->root->fs_info->delayed_block_rsv; |
1228 | 1229 | ||
1229 | mutex_lock(&delayed_node->mutex); | 1230 | mutex_lock(&delayed_node->mutex); |
1230 | if (delayed_node->inode_dirty) | 1231 | if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) |
1231 | ret = __btrfs_update_delayed_inode(trans, delayed_node->root, | 1232 | ret = __btrfs_update_delayed_inode(trans, delayed_node->root, |
1232 | path, delayed_node); | 1233 | path, delayed_node); |
1233 | else | 1234 | else |
@@ -1721,7 +1722,7 @@ int btrfs_fill_inode(struct inode *inode, u32 *rdev) | |||
1721 | return -ENOENT; | 1722 | return -ENOENT; |
1722 | 1723 | ||
1723 | mutex_lock(&delayed_node->mutex); | 1724 | mutex_lock(&delayed_node->mutex); |
1724 | if (!delayed_node->inode_dirty) { | 1725 | if (!test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { |
1725 | mutex_unlock(&delayed_node->mutex); | 1726 | mutex_unlock(&delayed_node->mutex); |
1726 | btrfs_release_delayed_node(delayed_node); | 1727 | btrfs_release_delayed_node(delayed_node); |
1727 | return -ENOENT; | 1728 | return -ENOENT; |
@@ -1772,7 +1773,7 @@ int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans, | |||
1772 | return PTR_ERR(delayed_node); | 1773 | return PTR_ERR(delayed_node); |
1773 | 1774 | ||
1774 | mutex_lock(&delayed_node->mutex); | 1775 | mutex_lock(&delayed_node->mutex); |
1775 | if (delayed_node->inode_dirty) { | 1776 | if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { |
1776 | fill_stack_inode_item(trans, &delayed_node->inode_item, inode); | 1777 | fill_stack_inode_item(trans, &delayed_node->inode_item, inode); |
1777 | goto release_node; | 1778 | goto release_node; |
1778 | } | 1779 | } |
@@ -1783,7 +1784,7 @@ int btrfs_delayed_update_inode(struct btrfs_trans_handle *trans, | |||
1783 | goto release_node; | 1784 | goto release_node; |
1784 | 1785 | ||
1785 | fill_stack_inode_item(trans, &delayed_node->inode_item, inode); | 1786 | fill_stack_inode_item(trans, &delayed_node->inode_item, inode); |
1786 | delayed_node->inode_dirty = 1; | 1787 | set_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags); |
1787 | delayed_node->count++; | 1788 | delayed_node->count++; |
1788 | atomic_inc(&root->fs_info->delayed_root->items); | 1789 | atomic_inc(&root->fs_info->delayed_root->items); |
1789 | release_node: | 1790 | release_node: |
@@ -1814,7 +1815,7 @@ static void __btrfs_kill_delayed_node(struct btrfs_delayed_node *delayed_node) | |||
1814 | btrfs_release_delayed_item(prev_item); | 1815 | btrfs_release_delayed_item(prev_item); |
1815 | } | 1816 | } |
1816 | 1817 | ||
1817 | if (delayed_node->inode_dirty) { | 1818 | if (test_bit(BTRFS_DELAYED_NODE_INODE_DIRTY, &delayed_node->flags)) { |
1818 | btrfs_delayed_inode_release_metadata(root, delayed_node); | 1819 | btrfs_delayed_inode_release_metadata(root, delayed_node); |
1819 | btrfs_release_delayed_inode(delayed_node); | 1820 | btrfs_release_delayed_inode(delayed_node); |
1820 | } | 1821 | } |
diff --git a/fs/btrfs/delayed-inode.h b/fs/btrfs/delayed-inode.h index a4b38f934d14..a6a13f7e014d 100644 --- a/fs/btrfs/delayed-inode.h +++ b/fs/btrfs/delayed-inode.h | |||
@@ -48,6 +48,9 @@ struct btrfs_delayed_root { | |||
48 | wait_queue_head_t wait; | 48 | wait_queue_head_t wait; |
49 | }; | 49 | }; |
50 | 50 | ||
51 | #define BTRFS_DELAYED_NODE_IN_LIST 0 | ||
52 | #define BTRFS_DELAYED_NODE_INODE_DIRTY 1 | ||
53 | |||
51 | struct btrfs_delayed_node { | 54 | struct btrfs_delayed_node { |
52 | u64 inode_id; | 55 | u64 inode_id; |
53 | u64 bytes_reserved; | 56 | u64 bytes_reserved; |
@@ -65,8 +68,7 @@ struct btrfs_delayed_node { | |||
65 | struct btrfs_inode_item inode_item; | 68 | struct btrfs_inode_item inode_item; |
66 | atomic_t refs; | 69 | atomic_t refs; |
67 | u64 index_cnt; | 70 | u64 index_cnt; |
68 | bool in_list; | 71 | unsigned long flags; |
69 | bool inode_dirty; | ||
70 | int count; | 72 | int count; |
71 | }; | 73 | }; |
72 | 74 | ||