ext4: add data structures for the extent status tree
authorZheng Liu <wenqing.lz@taobao.com>
Thu, 8 Nov 2012 20:18:54 +0000 (15:18 -0500)
committerTheodore Ts'o <tytso@mit.edu>
Thu, 8 Nov 2012 20:18:54 +0000 (15:18 -0500)
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>
fs/ext4/ext4.h
fs/ext4/extents_status.h [new file with mode: 0644]

index 3c20de1d59d0d44586199ade586864758e2ce204..bcc634b26d462f6d155592f19bb13f8f4b6bcadf 100644 (file)
@@ -811,6 +811,8 @@ struct ext4_ext_cache {
        __u32           ec_len; /* must be 32bit to return holes */
 };
 
+#include "extents_status.h"
+
 /*
  * fourth extended file system inode data in memory
  */
@@ -888,6 +890,10 @@ struct ext4_inode_info {
        struct list_head i_prealloc_list;
        spinlock_t i_prealloc_lock;
 
+       /* extents status tree */
+       struct ext4_es_tree i_es_tree;
+       rwlock_t i_es_lock;
+
        /* ialloc */
        ext4_group_t    i_last_alloc_group;
 
diff --git a/fs/ext4/extents_status.h b/fs/ext4/extents_status.h
new file mode 100644 (file)
index 0000000..8be2ab9
--- /dev/null
@@ -0,0 +1,25 @@
+/*
+ *  fs/ext4/extents_status.h
+ *
+ * Written by Yongqiang Yang <xiaoqiangnk@gmail.com>
+ * Modified by
+ *     Allison Henderson <achender@linux.vnet.ibm.com>
+ *     Zheng Liu <wenqing.lz@taobao.com>
+ *
+ */
+
+#ifndef _EXT4_EXTENTS_STATUS_H
+#define _EXT4_EXTENTS_STATUS_H
+
+struct extent_status {
+       struct rb_node rb_node;
+       ext4_lblk_t start;      /* first block extent covers */
+       ext4_lblk_t len;        /* length of extent in block */
+};
+
+struct ext4_es_tree {
+       struct rb_root root;
+       struct extent_status *cache_es; /* recently accessed extent */
+};
+
+#endif /* _EXT4_EXTENTS_STATUS_H */