diff options
author | Theodore Ts'o <tytso@mit.edu> | 2010-05-16 21:00:00 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2010-05-16 21:00:00 -0400 |
commit | 24676da469f50f433baa347845639662c561d1f6 (patch) | |
tree | b4b8205f8b50376af286193d0dcbe76f2bc2d1e1 /fs/ext4/namei.c | |
parent | 2ed886852adfcb070bf350e66a0da0d98b2f3ab5 (diff) |
ext4: Convert calls of ext4_error() to EXT4_ERROR_INODE()
EXT4_ERROR_INODE() tends to provide better error information and in a
more consistent format. Some errors were not even identifying the inode
or directory which was corrupted, which made them not very useful.
Addresses-Google-Bug: #2507977
Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
Diffstat (limited to 'fs/ext4/namei.c')
-rw-r--r-- | fs/ext4/namei.c | 39 |
1 files changed, 18 insertions, 21 deletions
diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c index 0c070fabd108..bff77b04f0d1 100644 --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c | |||
@@ -943,8 +943,8 @@ restart: | |||
943 | wait_on_buffer(bh); | 943 | wait_on_buffer(bh); |
944 | if (!buffer_uptodate(bh)) { | 944 | if (!buffer_uptodate(bh)) { |
945 | /* read error, skip block & hope for the best */ | 945 | /* read error, skip block & hope for the best */ |
946 | ext4_error(sb, "reading directory #%lu offset %lu", | 946 | EXT4_ERROR_INODE(dir, "reading directory lblock %lu", |
947 | dir->i_ino, (unsigned long)block); | 947 | (unsigned long) block); |
948 | brelse(bh); | 948 | brelse(bh); |
949 | goto next; | 949 | goto next; |
950 | } | 950 | } |
@@ -1066,15 +1066,15 @@ static struct dentry *ext4_lookup(struct inode *dir, struct dentry *dentry, stru | |||
1066 | __u32 ino = le32_to_cpu(de->inode); | 1066 | __u32 ino = le32_to_cpu(de->inode); |
1067 | brelse(bh); | 1067 | brelse(bh); |
1068 | if (!ext4_valid_inum(dir->i_sb, ino)) { | 1068 | if (!ext4_valid_inum(dir->i_sb, ino)) { |
1069 | ext4_error(dir->i_sb, "bad inode number: %u", ino); | 1069 | EXT4_ERROR_INODE(dir, "bad inode number: %u", ino); |
1070 | return ERR_PTR(-EIO); | 1070 | return ERR_PTR(-EIO); |
1071 | } | 1071 | } |
1072 | inode = ext4_iget(dir->i_sb, ino); | 1072 | inode = ext4_iget(dir->i_sb, ino); |
1073 | if (unlikely(IS_ERR(inode))) { | 1073 | if (unlikely(IS_ERR(inode))) { |
1074 | if (PTR_ERR(inode) == -ESTALE) { | 1074 | if (PTR_ERR(inode) == -ESTALE) { |
1075 | ext4_error(dir->i_sb, | 1075 | EXT4_ERROR_INODE(dir, |
1076 | "deleted inode referenced: %u", | 1076 | "deleted inode referenced: %u", |
1077 | ino); | 1077 | ino); |
1078 | return ERR_PTR(-EIO); | 1078 | return ERR_PTR(-EIO); |
1079 | } else { | 1079 | } else { |
1080 | return ERR_CAST(inode); | 1080 | return ERR_CAST(inode); |
@@ -1104,8 +1104,8 @@ struct dentry *ext4_get_parent(struct dentry *child) | |||
1104 | brelse(bh); | 1104 | brelse(bh); |
1105 | 1105 | ||
1106 | if (!ext4_valid_inum(child->d_inode->i_sb, ino)) { | 1106 | if (!ext4_valid_inum(child->d_inode->i_sb, ino)) { |
1107 | ext4_error(child->d_inode->i_sb, | 1107 | EXT4_ERROR_INODE(child->d_inode, |
1108 | "bad inode number: %u", ino); | 1108 | "bad parent inode number: %u", ino); |
1109 | return ERR_PTR(-EIO); | 1109 | return ERR_PTR(-EIO); |
1110 | } | 1110 | } |
1111 | 1111 | ||
@@ -1404,9 +1404,7 @@ static int make_indexed_dir(handle_t *handle, struct dentry *dentry, | |||
1404 | de = (struct ext4_dir_entry_2 *)((char *)fde + | 1404 | de = (struct ext4_dir_entry_2 *)((char *)fde + |
1405 | ext4_rec_len_from_disk(fde->rec_len, blocksize)); | 1405 | ext4_rec_len_from_disk(fde->rec_len, blocksize)); |
1406 | if ((char *) de >= (((char *) root) + blocksize)) { | 1406 | if ((char *) de >= (((char *) root) + blocksize)) { |
1407 | ext4_error(dir->i_sb, | 1407 | EXT4_ERROR_INODE(dir, "invalid rec_len for '..'"); |
1408 | "invalid rec_len for '..' in inode %lu", | ||
1409 | dir->i_ino); | ||
1410 | brelse(bh); | 1408 | brelse(bh); |
1411 | return -EIO; | 1409 | return -EIO; |
1412 | } | 1410 | } |
@@ -1915,9 +1913,8 @@ static int empty_dir(struct inode *inode) | |||
1915 | if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2) || | 1913 | if (inode->i_size < EXT4_DIR_REC_LEN(1) + EXT4_DIR_REC_LEN(2) || |
1916 | !(bh = ext4_bread(NULL, inode, 0, 0, &err))) { | 1914 | !(bh = ext4_bread(NULL, inode, 0, 0, &err))) { |
1917 | if (err) | 1915 | if (err) |
1918 | ext4_error(inode->i_sb, | 1916 | EXT4_ERROR_INODE(inode, |
1919 | "error %d reading directory #%lu offset 0", | 1917 | "error %d reading directory lblock 0", err); |
1920 | err, inode->i_ino); | ||
1921 | else | 1918 | else |
1922 | ext4_warning(inode->i_sb, | 1919 | ext4_warning(inode->i_sb, |
1923 | "bad directory (dir #%lu) - no data block", | 1920 | "bad directory (dir #%lu) - no data block", |
@@ -1941,17 +1938,17 @@ static int empty_dir(struct inode *inode) | |||
1941 | de = ext4_next_entry(de1, sb->s_blocksize); | 1938 | de = ext4_next_entry(de1, sb->s_blocksize); |
1942 | while (offset < inode->i_size) { | 1939 | while (offset < inode->i_size) { |
1943 | if (!bh || | 1940 | if (!bh || |
1944 | (void *) de >= (void *) (bh->b_data+sb->s_blocksize)) { | 1941 | (void *) de >= (void *) (bh->b_data+sb->s_blocksize)) { |
1942 | unsigned int lblock; | ||
1945 | err = 0; | 1943 | err = 0; |
1946 | brelse(bh); | 1944 | brelse(bh); |
1947 | bh = ext4_bread(NULL, inode, | 1945 | lblock = offset >> EXT4_BLOCK_SIZE_BITS(sb); |
1948 | offset >> EXT4_BLOCK_SIZE_BITS(sb), 0, &err); | 1946 | bh = ext4_bread(NULL, inode, lblock, 0, &err); |
1949 | if (!bh) { | 1947 | if (!bh) { |
1950 | if (err) | 1948 | if (err) |
1951 | ext4_error(sb, | 1949 | EXT4_ERROR_INODE(inode, |
1952 | "error %d reading directory" | 1950 | "error %d reading directory " |
1953 | " #%lu offset %u", | 1951 | "lblock %u", err, lblock); |
1954 | err, inode->i_ino, offset); | ||
1955 | offset += sb->s_blocksize; | 1952 | offset += sb->s_blocksize; |
1956 | continue; | 1953 | continue; |
1957 | } | 1954 | } |