diff options
author | Zheng Liu <wenqing.lz@taobao.com> | 2012-11-08 15:18:54 -0500 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2012-11-08 15:18:54 -0500 |
commit | c0677e6d0f9d991adff972b8d06cb83de1f8ee8e (patch) | |
tree | f320c2fb163763f200d0126c90fcbd909bfbedf2 /fs/ext4 | |
parent | 07aa2ea13814ea60d12f7330b6d5ccfdb0c3ba4d (diff) |
ext4: add data structures for the extent status tree
This patch adds two structures that supports extent status tree, extent_status
and ext4_es_tree. Currently extent_status is used to track a delay extent for
an inode, which record the start block and the length of the delay extent.
ext4_es_tree is used to store all extent_status for an inode in memory.
Signed-off-by: Yongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: Allison Henderson <achender@linux.vnet.ibm.com>
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4')
-rw-r--r-- | fs/ext4/ext4.h | 6 | ||||
-rw-r--r-- | fs/ext4/extents_status.h | 25 |
2 files changed, 31 insertions, 0 deletions
diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h index 3c20de1d59d0..bcc634b26d46 100644 --- a/fs/ext4/ext4.h +++ b/fs/ext4/ext4.h | |||
@@ -811,6 +811,8 @@ struct ext4_ext_cache { | |||
811 | __u32 ec_len; /* must be 32bit to return holes */ | 811 | __u32 ec_len; /* must be 32bit to return holes */ |
812 | }; | 812 | }; |
813 | 813 | ||
814 | #include "extents_status.h" | ||
815 | |||
814 | /* | 816 | /* |
815 | * fourth extended file system inode data in memory | 817 | * fourth extended file system inode data in memory |
816 | */ | 818 | */ |
@@ -888,6 +890,10 @@ struct ext4_inode_info { | |||
888 | struct list_head i_prealloc_list; | 890 | struct list_head i_prealloc_list; |
889 | spinlock_t i_prealloc_lock; | 891 | spinlock_t i_prealloc_lock; |
890 | 892 | ||
893 | /* extents status tree */ | ||
894 | struct ext4_es_tree i_es_tree; | ||
895 | rwlock_t i_es_lock; | ||
896 | |||
891 | /* ialloc */ | 897 | /* ialloc */ |
892 | ext4_group_t i_last_alloc_group; | 898 | ext4_group_t i_last_alloc_group; |
893 | 899 | ||
diff --git a/fs/ext4/extents_status.h b/fs/ext4/extents_status.h new file mode 100644 index 000000000000..8be2ab9c9425 --- /dev/null +++ b/fs/ext4/extents_status.h | |||
@@ -0,0 +1,25 @@ | |||
1 | /* | ||
2 | * fs/ext4/extents_status.h | ||
3 | * | ||
4 | * Written by Yongqiang Yang <xiaoqiangnk@gmail.com> | ||
5 | * Modified by | ||
6 | * Allison Henderson <achender@linux.vnet.ibm.com> | ||
7 | * Zheng Liu <wenqing.lz@taobao.com> | ||
8 | * | ||
9 | */ | ||
10 | |||
11 | #ifndef _EXT4_EXTENTS_STATUS_H | ||
12 | #define _EXT4_EXTENTS_STATUS_H | ||
13 | |||
14 | struct extent_status { | ||
15 | struct rb_node rb_node; | ||
16 | ext4_lblk_t start; /* first block extent covers */ | ||
17 | ext4_lblk_t len; /* length of extent in block */ | ||
18 | }; | ||
19 | |||
20 | struct ext4_es_tree { | ||
21 | struct rb_root root; | ||
22 | struct extent_status *cache_es; /* recently accessed extent */ | ||
23 | }; | ||
24 | |||
25 | #endif /* _EXT4_EXTENTS_STATUS_H */ | ||