Commit 602586a8 authored by Hugh Dickins's avatar Hugh Dickins Committed by Linus Torvalds

shmem: put_super must percpu_counter_destroy

list_add() corruption messages reported from shmem_fill_super()'s recently
introduced percpu_counter_init(): shmem_put_super() needs to remember to
percpu_counter_destroy().  And also check error from percpu_counter_init().
Reported-bisected-and-tested-by: default avatarTetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: default avatarHugh Dickins <hughd@google.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 19147d0e
...@@ -2325,7 +2325,10 @@ static int shmem_show_options(struct seq_file *seq, struct vfsmount *vfs) ...@@ -2325,7 +2325,10 @@ static int shmem_show_options(struct seq_file *seq, struct vfsmount *vfs)
static void shmem_put_super(struct super_block *sb) static void shmem_put_super(struct super_block *sb)
{ {
kfree(sb->s_fs_info); struct shmem_sb_info *sbinfo = SHMEM_SB(sb);
percpu_counter_destroy(&sbinfo->used_blocks);
kfree(sbinfo);
sb->s_fs_info = NULL; sb->s_fs_info = NULL;
} }
...@@ -2367,7 +2370,8 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent) ...@@ -2367,7 +2370,8 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
#endif #endif
spin_lock_init(&sbinfo->stat_lock); spin_lock_init(&sbinfo->stat_lock);
percpu_counter_init(&sbinfo->used_blocks, 0); if (percpu_counter_init(&sbinfo->used_blocks, 0))
goto failed;
sbinfo->free_inodes = sbinfo->max_inodes; sbinfo->free_inodes = sbinfo->max_inodes;
sb->s_maxbytes = SHMEM_MAX_BYTES; sb->s_maxbytes = SHMEM_MAX_BYTES;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment