|
@@ -154,23 +154,6 @@ static void destroy_super_rcu(struct rcu_head *head)
|
|
|
schedule_work(&s->destroy_work);
|
|
|
}
|
|
|
|
|
|
-/**
|
|
|
- * destroy_super - frees a superblock
|
|
|
- * @s: superblock to free
|
|
|
- *
|
|
|
- * Frees a superblock.
|
|
|
- */
|
|
|
-static void destroy_super(struct super_block *s)
|
|
|
-{
|
|
|
- list_lru_destroy(&s->s_dentry_lru);
|
|
|
- list_lru_destroy(&s->s_inode_lru);
|
|
|
- security_sb_free(s);
|
|
|
- WARN_ON(!list_empty(&s->s_mounts));
|
|
|
- put_user_ns(s->s_user_ns);
|
|
|
- kfree(s->s_subtype);
|
|
|
- call_rcu(&s->rcu, destroy_super_rcu);
|
|
|
-}
|
|
|
-
|
|
|
/* Free a superblock that has never been seen by anyone */
|
|
|
static void destroy_unused_super(struct super_block *s)
|
|
|
{
|
|
@@ -280,11 +263,17 @@ fail:
|
|
|
/*
|
|
|
* Drop a superblock's refcount. The caller must hold sb_lock.
|
|
|
*/
|
|
|
-static void __put_super(struct super_block *sb)
|
|
|
+static void __put_super(struct super_block *s)
|
|
|
{
|
|
|
- if (!--sb->s_count) {
|
|
|
- list_del_init(&sb->s_list);
|
|
|
- destroy_super(sb);
|
|
|
+ if (!--s->s_count) {
|
|
|
+ list_del_init(&s->s_list);
|
|
|
+ WARN_ON(s->s_dentry_lru.node);
|
|
|
+ WARN_ON(s->s_inode_lru.node);
|
|
|
+ WARN_ON(!list_empty(&s->s_mounts));
|
|
|
+ security_sb_free(s);
|
|
|
+ put_user_ns(s->s_user_ns);
|
|
|
+ kfree(s->s_subtype);
|
|
|
+ call_rcu(&s->rcu, destroy_super_rcu);
|
|
|
}
|
|
|
}
|
|
|
|