diff --git a/fs/super.c b/fs/super.c
index efa6e488a95c4e98804a2a6069822ba3702b8978..743bb7118053071381d8e9bc0f09e634d2264061 100644
--- a/fs/super.c
+++ b/fs/super.c
@@ -149,7 +149,7 @@ static void destroy_super(struct super_block *s)
 	WARN_ON(!list_empty(&s->s_mounts));
 	kfree(s->s_subtype);
 	kfree(s->s_options);
-	kfree(s);
+	kfree_rcu(s, rcu);
 }
 
 /**
diff --git a/include/linux/fs.h b/include/linux/fs.h
index b09e4e1d747a07d81c01840895e9a12a76ac69dd..2ab8a67ee054f0f56d92111df1e5a0090efd8ad3 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1330,6 +1330,7 @@ struct super_block {
 	 */
 	struct list_lru		s_dentry_lru ____cacheline_aligned_in_smp;
 	struct list_lru		s_inode_lru ____cacheline_aligned_in_smp;
+	struct rcu_head		rcu;
 };
 
 extern struct timespec current_fs_time(struct super_block *sb);