Patchwork [3/7,v2] ext4: add physical block and status member into extent status tree

login
register
mail settings
Submitter Zheng Liu
Date Jan. 11, 2013, 10:53 a.m.
Message ID <1357901627-3068-4-git-send-email-wenqing.lz@taobao.com>
Download mbox | patch
Permalink /patch/211297/
State Superseded
Headers show

Comments

Zheng Liu - Jan. 11, 2013, 10:53 a.m.
From: Zheng Liu <wenqing.lz@taobao.com>

es_pblk is used to record physical block that maps to the disk.  es_status is
used to record the status of the extent.  Three status are defined, which are
written, unwritten and delayed.

CC: Jan kara <jack@suse.cz>
CC: "Theodore Ts'o" <tytso@mit.edu>
Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
---
 fs/ext4/extents_status.h | 8 ++++++++
 1 file changed, 8 insertions(+)
Theodore Ts'o - Jan. 17, 2013, 4:42 a.m.
On Fri, Jan 11, 2013 at 06:53:43PM +0800, Zheng Liu wrote:
>  struct extent_status {
>  	struct rb_node rb_node;
>  	ext4_lblk_t es_lblk;	/* first logical block extent covers */
>  	ext4_lblk_t es_len;	/* length of extent in block */
> +	ext4_fsblk_t es_pblk;	/* first physical block */
> +	int es_status;		/* record the status of extent */
>  };

Given that we only support 48 bits for the physical block number, and
we only need two bits for es_status, one thing we could do to save
memory is to stash the es_status bits in the top two bits of es_pblk.

       	     	       		      	     - Ted
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Zheng Liu - Jan. 18, 2013, 9:49 a.m.
On Wed, Jan 16, 2013 at 11:42:13PM -0500, Theodore Ts'o wrote:
> On Fri, Jan 11, 2013 at 06:53:43PM +0800, Zheng Liu wrote:
> >  struct extent_status {
> >  	struct rb_node rb_node;
> >  	ext4_lblk_t es_lblk;	/* first logical block extent covers */
> >  	ext4_lblk_t es_len;	/* length of extent in block */
> > +	ext4_fsblk_t es_pblk;	/* first physical block */
> > +	int es_status;		/* record the status of extent */
> >  };
> 
> Given that we only support 48 bits for the physical block number, and
> we only need two bits for es_status, one thing we could do to save
> memory is to stash the es_status bits in the top two bits of es_pblk.

Thanks for the comment.  In next version, es_status will be stashed into
es_pblk.

Regards,
                                                - Zheng
--
To unsubscribe from this list: send the line "unsubscribe linux-ext4" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Patch

diff --git a/fs/ext4/extents_status.h b/fs/ext4/extents_status.h
index 81e9339..85115bb 100644
--- a/fs/ext4/extents_status.h
+++ b/fs/ext4/extents_status.h
@@ -20,10 +20,18 @@ 
 #define es_debug(fmt, ...)	no_printk(fmt, ##__VA_ARGS__)
 #endif
 
+enum {
+	EXTENT_STATUS_WRITTEN = 0,	/* written extent */
+	EXTENT_STATUS_UNWRITTEN = 1,	/* unwritten extent */
+	EXTENT_STATUS_DELAYED = 2,	/* delayed extent */
+};
+
 struct extent_status {
 	struct rb_node rb_node;
 	ext4_lblk_t es_lblk;	/* first logical block extent covers */
 	ext4_lblk_t es_len;	/* length of extent in block */
+	ext4_fsblk_t es_pblk;	/* first physical block */
+	int es_status;		/* record the status of extent */
 };
 
 struct ext4_es_tree {