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

Commit c2d22ecd authored by Al Viro's avatar Al Viro
Browse files

fs/super.c: fix lru_list leak for real



Freeing ->s_{inode,dentry}_lru in deactivate_locked_super() is wrong;
the right place is destroy_super().  As it is, we leak them if sget()
decides that new superblock it has allocated (and never shown to
anybody) isn't needed and should be freed.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 13f35838
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -264,6 +264,8 @@ out_free_sb:
 */
static inline void destroy_super(struct super_block *s)
{
	list_lru_destroy(&s->s_dentry_lru);
	list_lru_destroy(&s->s_inode_lru);
#ifdef CONFIG_SMP
	free_percpu(s->s_files);
#endif
@@ -323,8 +325,6 @@ void deactivate_locked_super(struct super_block *s)

		/* caches are now gone, we can safely kill the shrinker now */
		unregister_shrinker(&s->s_shrink);
		list_lru_destroy(&s->s_dentry_lru);
		list_lru_destroy(&s->s_inode_lru);

		put_filesystem(fs);
		put_super(s);