Skip to content

Commit

Permalink
shmem: put_super must percpu_counter_destroy
Browse files Browse the repository at this point in the history
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: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: Hugh Dickins <hughd@google.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Hugh Dickins authored and Linus Torvalds committed Aug 18, 2010
1 parent 19147d0 commit 602586a
Showing 1 changed file with 6 additions and 2 deletions.
8 changes: 6 additions & 2 deletions mm/shmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
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;
}

Expand Down Expand Up @@ -2367,7 +2370,8 @@ int shmem_fill_super(struct super_block *sb, void *data, int silent)
#endif

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;

sb->s_maxbytes = SHMEM_MAX_BYTES;
Expand Down

0 comments on commit 602586a

Please sign in to comment.