Whamcloud - gitweb
b=22769 improve error message for dx_probe
authorpravin <Pravin.Shelar@sun.com>
Sun, 19 Sep 2010 17:17:58 +0000 (21:17 +0400)
committerMikhail Pershin <tappro@sun.com>
Tue, 21 Sep 2010 13:23:55 +0000 (17:23 +0400)
a=andreas
i=girish
i=landen

add debug info in case of error.

ldiskfs/kernel_patches/patches/ext3_data_in_dirent.patch
ldiskfs/kernel_patches/patches/ext4_data_in_dirent.patch

index 871b441..d06240c 100644 (file)
@@ -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 -
index 4a88db0..18eaa2c 100644 (file)
@@ -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 -