Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0677e6d authored by Zheng Liu's avatar Zheng Liu Committed by Theodore Ts'o
Browse files

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: default avatarYongqiang Yang <xiaoqiangnk@gmail.com>
Signed-off-by: default avatarAllison Henderson <achender@linux.vnet.ibm.com>
Signed-off-by: default avatarZheng Liu <wenqing.lz@taobao.com>
Signed-off-by: default avatar"Theodore Ts'o" <tytso@mit.edu>
parent 07aa2ea1
Loading
Loading
Loading
Loading
+6 −0
Original line number Original line Diff line number Diff line
@@ -811,6 +811,8 @@ struct ext4_ext_cache {
	__u32		ec_len; /* must be 32bit to return holes */
	__u32		ec_len; /* must be 32bit to return holes */
};
};


#include "extents_status.h"

/*
/*
 * fourth extended file system inode data in memory
 * fourth extended file system inode data in memory
 */
 */
@@ -888,6 +890,10 @@ struct ext4_inode_info {
	struct list_head i_prealloc_list;
	struct list_head i_prealloc_list;
	spinlock_t i_prealloc_lock;
	spinlock_t i_prealloc_lock;


	/* extents status tree */
	struct ext4_es_tree i_es_tree;
	rwlock_t i_es_lock;

	/* ialloc */
	/* ialloc */
	ext4_group_t	i_last_alloc_group;
	ext4_group_t	i_last_alloc_group;


+25 −0
Original line number Original line Diff line number Diff line
/*
 *  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 */