Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+6 −2
Original line number Original line Diff line number Diff line
@@ -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)
#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;