From c7b5d883aa0b825ebdb3c73fa50c09b095512b94 Mon Sep 17 00:00:00 2001 From: pravin Date: Sun, 19 Sep 2010 21:17:58 +0400 Subject: [PATCH] b=22769 improve error message for dx_probe a=andreas i=girish i=landen add debug info in case of error. --- .../patches/ext3_data_in_dirent.patch | 28 ++++++++++++++++++---- .../patches/ext4_data_in_dirent.patch | 22 ++++++++++++++++- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/ldiskfs/kernel_patches/patches/ext3_data_in_dirent.patch b/ldiskfs/kernel_patches/patches/ext3_data_in_dirent.patch index 871b441..d06240c 100644 --- a/ldiskfs/kernel_patches/patches/ext3_data_in_dirent.patch +++ b/ldiskfs/kernel_patches/patches/ext3_data_in_dirent.patch @@ -83,10 +83,30 @@ Index: b/fs/ext3/namei.c + if (dx_get_limit(entries) != dx_root_limit(dir->i_sb->s_blocksize, + (struct ext3_dir_entry_2*)bh->b_data, + info->info_length)) { - ext3_warning(dir->i_sb, __FUNCTION__, - "dx entry: limit != root limit"); - brelse(bh); -@@ -583,7 +597,7 @@ static int htree_dirblock_to_tree(struct + ext3_warning(dir->i_sb, __FUNCTION__, + "dx entry: limit != root limit"); + brelse(bh); +@@ -468,14 +481,17 @@ dx_probe(struct dentry *dentry, struct i + if (!indirect--) return frame; + if (!(bh = ext3_bread (NULL,dir, dx_get_block(at), 0, err))) + goto fail2; +- at = entries = ((struct dx_node *) bh->b_data)->entries; ++ entries = ((struct dx_node *) bh->b_data)->entries; + if (dx_get_limit(entries) != dx_node_limit (dir)) { + ext3_warning(dir->i_sb, __FUNCTION__, +- "dx entry: limit != node limit"); ++ "block %u(%lu): limit %u != node limit %u", ++ dx_get_block(at), (long)bh->b_blocknr, ++ dx_get_limit(entries), dx_node_limit(dir)); + brelse(bh); + *err = ERR_BAD_DX_DIR; + goto fail2; + } ++ at = entries; + frame++; + frame->bh = NULL; + } +@@ -608,7 +624,7 @@ static int htree_dirblock_to_tree(struct de = (struct ext3_dir_entry_2 *) bh->b_data; top = (struct ext3_dir_entry_2 *) ((char *) de + dir->i_sb->s_blocksize - diff --git a/ldiskfs/kernel_patches/patches/ext4_data_in_dirent.patch b/ldiskfs/kernel_patches/patches/ext4_data_in_dirent.patch index 4a88db0..18eaa2c 100644 --- a/ldiskfs/kernel_patches/patches/ext4_data_in_dirent.patch +++ b/ldiskfs/kernel_patches/patches/ext4_data_in_dirent.patch @@ -279,7 +279,27 @@ Index: b/fs/ext4/namei.c info->info_length)) { ext4_warning(dir->i_sb, __func__, "dx entry: limit != root limit"); -@@ -617,7 +627,7 @@ static int htree_dirblock_to_tree(struct +@@ -485,14 +495,17 @@ dx_probe(const struct qstr *d_name, stru + if (!indirect--) return frame; + if (!(bh = ext4_bread (NULL,dir, dx_get_block(at), 0, err))) + goto fail2; +- at = entries = ((struct dx_node *) bh->b_data)->entries; ++ entries = ((struct dx_node *) bh->b_data)->entries; + if (dx_get_limit(entries) != dx_node_limit (dir)) { + ext4_warning(dir->i_sb, __func__, +- "dx entry: limit != node limit"); ++ "block %u(%lu): limit %u != node limit %u", ++ dx_get_block(at), (long)bh->b_blocknr, ++ dx_get_limit(entries), dx_node_limit(dir)); + brelse(bh); + *err = ERR_BAD_DX_DIR; + goto fail2; + } ++ at = entries; + frame++; + frame->bh = NULL; + } +@@ -618,7 +631,7 @@ static int htree_dirblock_to_tree(struct de = (struct ext4_dir_entry_2 *) bh->b_data; top = (struct ext4_dir_entry_2 *) ((char *) de + dir->i_sb->s_blocksize - -- 1.8.3.1