]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ext4: use inode_set_cached_link()
authorMateusz Guzik <mjguzik@gmail.com>
Wed, 20 Nov 2024 11:20:35 +0000 (12:20 +0100)
committerChristian Brauner <brauner@kernel.org>
Sun, 22 Dec 2024 10:29:50 +0000 (11:29 +0100)
Signed-off-by: Mateusz Guzik <mjguzik@gmail.com>
Link: https://lore.kernel.org/r/20241120112037.822078-3-mjguzik@gmail.com
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/ext4/inode.c
fs/ext4/namei.c

index 89aade6f45f62d9fd6300ef84c118c6b919cddc9..7c54ae5fcbd4540e8ba69b942ffd98dded320339 100644 (file)
@@ -5006,10 +5006,11 @@ struct inode *__ext4_iget(struct super_block *sb, unsigned long ino,
                if (IS_ENCRYPTED(inode)) {
                        inode->i_op = &ext4_encrypted_symlink_inode_operations;
                } else if (ext4_inode_is_fast_symlink(inode)) {
-                       inode->i_link = (char *)ei->i_data;
                        inode->i_op = &ext4_fast_symlink_inode_operations;
                        nd_terminate_link(ei->i_data, inode->i_size,
                                sizeof(ei->i_data) - 1);
+                       inode_set_cached_link(inode, (char *)ei->i_data,
+                                             inode->i_size);
                } else {
                        inode->i_op = &ext4_symlink_inode_operations;
                }
index bcf2737078b8283946d5f7dd58a238ba90dc19e9..536d56d150726501e49b3b69753817f22499cdef 100644 (file)
@@ -3418,7 +3418,6 @@ retry:
                        inode->i_op = &ext4_symlink_inode_operations;
                } else {
                        inode->i_op = &ext4_fast_symlink_inode_operations;
-                       inode->i_link = (char *)&EXT4_I(inode)->i_data;
                }
        }
 
@@ -3434,6 +3433,9 @@ retry:
                       disk_link.len);
                inode->i_size = disk_link.len - 1;
                EXT4_I(inode)->i_disksize = inode->i_size;
+               if (!IS_ENCRYPTED(inode))
+                       inode_set_cached_link(inode, (char *)&EXT4_I(inode)->i_data,
+                                             inode->i_size);
        }
        err = ext4_add_nondir(handle, dentry, &inode);
        if (handle)