ext4: return error on ext4_find_inline_entry
authorThadeu Lima de Souza Cascardo <cascardo@igalia.com>
Wed, 21 Aug 2024 15:23:22 +0000 (12:23 -0300)
committerTheodore Ts'o <tytso@mit.edu>
Wed, 4 Sep 2024 02:12:16 +0000 (22:12 -0400)
In case of errors when reading an inode from disk or traversing inline
directory entries, return an error-encoded ERR_PTR instead of returning
NULL. ext4_find_inline_entry only caller, __ext4_find_entry already returns
such encoded errors.

Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@igalia.com>
Link: https://patch.msgid.link/20240821152324.3621860-3-cascardo@igalia.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/inline.c

index e7a09a99837b963f1c53fa65d0d3599d1298a19a..7b98b1bf1dc94db5c608783c387cba991a7f0a82 100644 (file)
@@ -1669,8 +1669,9 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
        void *inline_start;
        int inline_size;
 
-       if (ext4_get_inode_loc(dir, &iloc))
-               return NULL;
+       ret = ext4_get_inode_loc(dir, &iloc);
+       if (ret)
+               return ERR_PTR(ret);
 
        down_read(&EXT4_I(dir)->xattr_sem);
        if (!ext4_has_inline_data(dir)) {
@@ -1701,7 +1702,10 @@ struct buffer_head *ext4_find_inline_entry(struct inode *dir,
 
 out:
        brelse(iloc.bh);
-       iloc.bh = NULL;
+       if (ret < 0)
+               iloc.bh = ERR_PTR(ret);
+       else
+               iloc.bh = NULL;
 out_find:
        up_read(&EXT4_I(dir)->xattr_sem);
        return iloc.bh;