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

index ccb9629a0f70d446caa1bbee1770fd5bac3ba982..7beba4c1be5aa680e34d6349e7fed61c76931f5e 100644 (file)
@@ -3914,6 +3914,7 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir,
        int len;
        struct inode *inode;
        struct folio *folio;
+       char *link;
 
        len = strlen(symname) + 1;
        if (len > PAGE_SIZE)
@@ -3935,12 +3936,13 @@ static int shmem_symlink(struct mnt_idmap *idmap, struct inode *dir,
 
        inode->i_size = len-1;
        if (len <= SHORT_SYMLINK_LEN) {
-               inode->i_link = kmemdup(symname, len, GFP_KERNEL);
-               if (!inode->i_link) {
+               link = kmemdup(symname, len, GFP_KERNEL);
+               if (!link) {
                        error = -ENOMEM;
                        goto out_remove_offset;
                }
                inode->i_op = &shmem_short_symlink_operations;
+               inode_set_cached_link(inode, link, len - 1);
        } else {
                inode_nohighmem(inode);
                inode->i_mapping->a_ops = &shmem_aops;