|
@@ -701,8 +701,7 @@ static void shmem_evict_inode(struct inode *inode)
|
|
|
list_del_init(&info->swaplist);
|
|
|
mutex_unlock(&shmem_swaplist_mutex);
|
|
|
}
|
|
|
- } else
|
|
|
- kfree(info->symlink);
|
|
|
+ }
|
|
|
|
|
|
simple_xattrs_free(&info->xattrs);
|
|
|
WARN_ON(inode->i_blocks);
|
|
@@ -2549,13 +2548,12 @@ static int shmem_symlink(struct inode *dir, struct dentry *dentry, const char *s
|
|
|
info = SHMEM_I(inode);
|
|
|
inode->i_size = len-1;
|
|
|
if (len <= SHORT_SYMLINK_LEN) {
|
|
|
- info->symlink = kmemdup(symname, len, GFP_KERNEL);
|
|
|
- if (!info->symlink) {
|
|
|
+ inode->i_link = kmemdup(symname, len, GFP_KERNEL);
|
|
|
+ if (!inode->i_link) {
|
|
|
iput(inode);
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
inode->i_op = &shmem_short_symlink_operations;
|
|
|
- inode->i_link = info->symlink;
|
|
|
} else {
|
|
|
inode_nohighmem(inode);
|
|
|
error = shmem_getpage(inode, 0, &page, SGP_WRITE, NULL);
|
|
@@ -3132,6 +3130,7 @@ static struct inode *shmem_alloc_inode(struct super_block *sb)
|
|
|
static void shmem_destroy_callback(struct rcu_head *head)
|
|
|
{
|
|
|
struct inode *inode = container_of(head, struct inode, i_rcu);
|
|
|
+ kfree(inode->i_link);
|
|
|
kmem_cache_free(shmem_inode_cachep, SHMEM_I(inode));
|
|
|
}
|
|
|
|