diff options
-rw-r--r-- | fs/ext4/xattr.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/fs/ext4/xattr.c b/fs/ext4/xattr.c index ab94d6ee496b..c8b71bd118b0 100644 --- a/fs/ext4/xattr.c +++ b/fs/ext4/xattr.c | |||
@@ -2024,7 +2024,8 @@ ext4_xattr_delete_inode(handle_t *handle, struct inode *inode, | |||
2024 | if (!entry->e_value_inum) | 2024 | if (!entry->e_value_inum) |
2025 | continue; | 2025 | continue; |
2026 | ea_ino = le32_to_cpu(entry->e_value_inum); | 2026 | ea_ino = le32_to_cpu(entry->e_value_inum); |
2027 | if (ext4_expand_ino_array(lea_ino_array, ea_ino) != 0) { | 2027 | error = ext4_expand_ino_array(lea_ino_array, ea_ino); |
2028 | if (error) { | ||
2028 | brelse(iloc.bh); | 2029 | brelse(iloc.bh); |
2029 | goto cleanup; | 2030 | goto cleanup; |
2030 | } | 2031 | } |
@@ -2035,20 +2036,22 @@ ext4_xattr_delete_inode(handle_t *handle, struct inode *inode, | |||
2035 | delete_external_ea: | 2036 | delete_external_ea: |
2036 | if (!EXT4_I(inode)->i_file_acl) { | 2037 | if (!EXT4_I(inode)->i_file_acl) { |
2037 | /* add xattr inode to orphan list */ | 2038 | /* add xattr inode to orphan list */ |
2038 | ext4_xattr_inode_orphan_add(handle, inode, credits, | 2039 | error = ext4_xattr_inode_orphan_add(handle, inode, credits, |
2039 | *lea_ino_array); | 2040 | *lea_ino_array); |
2040 | goto cleanup; | 2041 | goto cleanup; |
2041 | } | 2042 | } |
2042 | bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); | 2043 | bh = sb_bread(inode->i_sb, EXT4_I(inode)->i_file_acl); |
2043 | if (!bh) { | 2044 | if (!bh) { |
2044 | EXT4_ERROR_INODE(inode, "block %llu read error", | 2045 | EXT4_ERROR_INODE(inode, "block %llu read error", |
2045 | EXT4_I(inode)->i_file_acl); | 2046 | EXT4_I(inode)->i_file_acl); |
2047 | error = -EIO; | ||
2046 | goto cleanup; | 2048 | goto cleanup; |
2047 | } | 2049 | } |
2048 | if (BHDR(bh)->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC) || | 2050 | if (BHDR(bh)->h_magic != cpu_to_le32(EXT4_XATTR_MAGIC) || |
2049 | BHDR(bh)->h_blocks != cpu_to_le32(1)) { | 2051 | BHDR(bh)->h_blocks != cpu_to_le32(1)) { |
2050 | EXT4_ERROR_INODE(inode, "bad block %llu", | 2052 | EXT4_ERROR_INODE(inode, "bad block %llu", |
2051 | EXT4_I(inode)->i_file_acl); | 2053 | EXT4_I(inode)->i_file_acl); |
2054 | error = -EFSCORRUPTED; | ||
2052 | goto cleanup; | 2055 | goto cleanup; |
2053 | } | 2056 | } |
2054 | 2057 | ||
@@ -2057,7 +2060,8 @@ delete_external_ea: | |||
2057 | if (!entry->e_value_inum) | 2060 | if (!entry->e_value_inum) |
2058 | continue; | 2061 | continue; |
2059 | ea_ino = le32_to_cpu(entry->e_value_inum); | 2062 | ea_ino = le32_to_cpu(entry->e_value_inum); |
2060 | if (ext4_expand_ino_array(lea_ino_array, ea_ino) != 0) | 2063 | error = ext4_expand_ino_array(lea_ino_array, ea_ino); |
2064 | if (error) | ||
2061 | goto cleanup; | 2065 | goto cleanup; |
2062 | entry->e_value_inum = 0; | 2066 | entry->e_value_inum = 0; |
2063 | } | 2067 | } |
@@ -2065,7 +2069,7 @@ delete_external_ea: | |||
2065 | /* add xattr inode to orphan list */ | 2069 | /* add xattr inode to orphan list */ |
2066 | error = ext4_xattr_inode_orphan_add(handle, inode, credits, | 2070 | error = ext4_xattr_inode_orphan_add(handle, inode, credits, |
2067 | *lea_ino_array); | 2071 | *lea_ino_array); |
2068 | if (error != 0) | 2072 | if (error) |
2069 | goto cleanup; | 2073 | goto cleanup; |
2070 | 2074 | ||
2071 | if (!IS_NOQUOTA(inode)) | 2075 | if (!IS_NOQUOTA(inode)) |
@@ -2075,7 +2079,7 @@ delete_external_ea: | |||
2075 | error = ext4_journal_extend(handle, credits); | 2079 | error = ext4_journal_extend(handle, credits); |
2076 | if (error > 0) | 2080 | if (error > 0) |
2077 | error = ext4_journal_restart(handle, credits); | 2081 | error = ext4_journal_restart(handle, credits); |
2078 | if (error != 0) { | 2082 | if (error) { |
2079 | ext4_warning(inode->i_sb, | 2083 | ext4_warning(inode->i_sb, |
2080 | "couldn't extend journal (err %d)", error); | 2084 | "couldn't extend journal (err %d)", error); |
2081 | goto cleanup; | 2085 | goto cleanup; |