Patchwork [2/5,bigalloc] debugfs: support cluster unit of ee_block and ee_len

login
register
mail settings
Submitter Robin Dong
Date Nov. 18, 2011, 10:55 a.m.
Message ID <1321613730-10600-3-git-send-email-hao.bigrat@gmail.com>
Download mbox | patch
Permalink /patch/126391/
State New
Headers show

Comments

Robin Dong - Nov. 18, 2011, 10:55 a.m.
From: Robin Dong <sanbai@taobao.com>

Signed-off-by: Robin Dong <sanbai@taobao.com>
---
 debugfs/debugfs.c   |    8 +++++---
 lib/ext2fs/block.c  |   15 +++++++++------
 lib/ext2fs/bmap.c   |    8 ++++++--
 lib/ext2fs/extent.c |   13 ++++++++-----
 4 files changed, 28 insertions(+), 16 deletions(-)

Patch

diff --git a/debugfs/debugfs.c b/debugfs/debugfs.c
index 1fb8f44..e9c0510 100644
--- a/debugfs/debugfs.c
+++ b/debugfs/debugfs.c
@@ -662,7 +662,8 @@  static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
 				physical_width,
 				extent.e_pblk,
 				physical_width,
-				extent.e_pblk + (extent.e_len - 1),
+				extent.e_pblk + ((extent.e_len <<
+					current_fs->cluster_ratio_bits) - 1),
 				extent.e_len,
 				extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ?
 					"Uninit" : "");
@@ -671,7 +672,7 @@  static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
 
 		if (extent.e_len == 0)
 			continue;
-		else if (extent.e_len == 1)
+		else if (extent.e_len == 1 && current_fs->cluster_ratio_bits == 1)
 			fprintf(f,
 				"%s(%lld%s):%lld",
 				printed ? ", " : "",
@@ -688,7 +689,8 @@  static void dump_extents(FILE *f, const char *prefix, ext2_ino_t ino,
 				extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT ?
 					"[u]" : "",
 				extent.e_pblk,
-				extent.e_pblk + (extent.e_len - 1));
+				extent.e_pblk + ((extent.e_len <<
+					current_fs->cluster_ratio_bits) - 1));
 		printed = 1;
 	}
 	if (printed)
diff --git a/lib/ext2fs/block.c b/lib/ext2fs/block.c
index 6a5c10d..212989d 100644
--- a/lib/ext2fs/block.c
+++ b/lib/ext2fs/block.c
@@ -337,6 +337,7 @@  errcode_t ext2fs_block_iterate3(ext2_filsys fs,
 	struct block_context ctx;
 	int	limit;
 	blk64_t	blk64;
+	blk64_t lblk;
 
 	EXT2_CHECK_MAGIC(fs, EXT2_ET_MAGIC_EXT2FS_FILSYS);
 
@@ -459,14 +460,16 @@  errcode_t ext2fs_block_iterate3(ext2_filsys fs,
 			       extent.e_lblk, extent.e_pblk,
 			       extent.e_len, blockcnt);
 #endif
-			if (extent.e_lblk + extent.e_len <= blockcnt)
+			if (((extent.e_lblk + extent.e_len) <<
+					fs->cluster_ratio_bits) <= blockcnt)
 				continue;
-			if (extent.e_lblk > blockcnt)
-				blockcnt = extent.e_lblk;
-			j = blockcnt - extent.e_lblk;
+			lblk = extent.e_lblk << fs->cluster_ratio_bits;
+			if (lblk > blockcnt)
+				blockcnt = lblk;
+			j = blockcnt - lblk;
 			blk += j;
-			for (blockcnt = extent.e_lblk, j = 0;
-			     j < extent.e_len;
+			for (blockcnt = lblk, j = 0;
+			     j < (extent.e_len << fs->cluster_ratio_bits);
 			     blk++, blockcnt++, j++) {
 				new_blk = blk;
 				r = (*ctx.func)(fs, &new_blk, blockcnt,
diff --git a/lib/ext2fs/bmap.c b/lib/ext2fs/bmap.c
index 16d51e0..3e71fdf 100644
--- a/lib/ext2fs/bmap.c
+++ b/lib/ext2fs/bmap.c
@@ -175,6 +175,8 @@  static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
 	unsigned int		offset;
 	errcode_t		retval = 0;
 	blk64_t			blk64 = 0;
+	blk64_t			lblk = 0;
+	blk64_t			len = 0;
 	int			alloc = 0;
 
 	if (bmap_flags & BMAP_SET) {
@@ -192,8 +194,10 @@  static errcode_t extent_bmap(ext2_filsys fs, ext2_ino_t ino,
 	retval = ext2fs_extent_get(handle, EXT2_EXTENT_CURRENT, &extent);
 	if (retval)
 		return retval;
-	offset = block - extent.e_lblk;
-	if (block >= extent.e_lblk && (offset <= extent.e_len)) {
+	lblk = extent.e_lblk << fs->cluster_ratio_bits;
+	len = extent.e_len << fs->cluster_ratio_bits;
+	offset = block - lblk;
+	if (block >= lblk && (offset <= len)) {
 		*phys_blk = extent.e_pblk + offset;
 		if (ret_flags && extent.e_flags & EXT2_EXTENT_FLAGS_UNINIT)
 			*ret_flags |= BMAP_RET_UNINIT;
diff --git a/lib/ext2fs/extent.c b/lib/ext2fs/extent.c
index eb096d6..32eb171 100644
--- a/lib/ext2fs/extent.c
+++ b/lib/ext2fs/extent.c
@@ -636,10 +636,13 @@  static errcode_t extent_goto(ext2_extent_handle_t handle,
 	while (1) {
 		if (handle->max_depth - handle->level == leaf_level) {
 			/* block is in this &extent */
-			if ((blk >= extent.e_lblk) &&
-			    (blk < extent.e_lblk + extent.e_len))
+			if ((blk >= (extent.e_lblk <<
+					handle->fs->cluster_ratio_bits)) &&
+			    (blk < ((extent.e_lblk + extent.e_len) <<
+				    handle->fs->cluster_ratio_bits)))
 				return 0;
-			if (blk < extent.e_lblk) {
+			if (blk < (extent.e_lblk <<
+					handle->fs->cluster_ratio_bits)) {
 				retval = ext2fs_extent_get(handle,
 							   EXT2_EXTENT_PREV_SIB,
 							   &extent);
@@ -665,9 +668,9 @@  static errcode_t extent_goto(ext2_extent_handle_t handle,
 #ifdef DEBUG_GOTO_EXTENTS
 		dbg_print_extent("next", &extent);
 #endif
-		if (blk == extent.e_lblk)
+		if (blk == (extent.e_lblk << handle->fs->cluster_ratio_bits))
 			goto go_down;
-		if (blk > extent.e_lblk)
+		if (blk > (extent.e_lblk << handle->fs->cluster_ratio_bits))
 			continue;
 
 		retval = ext2fs_extent_get(handle, EXT2_EXTENT_PREV_SIB,