diff options
Diffstat (limited to 'fs/logfs/inode.c')
| -rw-r--r-- | fs/logfs/inode.c | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/fs/logfs/inode.c b/fs/logfs/inode.c index a422f42238b..6984562738d 100644 --- a/fs/logfs/inode.c +++ b/fs/logfs/inode.c @@ -156,10 +156,26 @@ static void __logfs_destroy_inode(struct inode *inode)  	call_rcu(&inode->i_rcu, logfs_i_callback);  } +static void __logfs_destroy_meta_inode(struct inode *inode) +{ +	struct logfs_inode *li = logfs_inode(inode); +	BUG_ON(li->li_block); +	call_rcu(&inode->i_rcu, logfs_i_callback); +} +  static void logfs_destroy_inode(struct inode *inode)  {  	struct logfs_inode *li = logfs_inode(inode); +	if (inode->i_ino < LOGFS_RESERVED_INOS) { +		/* +		 * The reserved inodes are never destroyed unless we are in +		 * unmont path. +		 */ +		__logfs_destroy_meta_inode(inode); +		return; +	} +  	BUG_ON(list_empty(&li->li_freeing_list));  	spin_lock(&logfs_inode_lock);  	li->li_refcount--; @@ -373,8 +389,8 @@ static void logfs_put_super(struct super_block *sb)  {  	struct logfs_super *super = logfs_super(sb);  	/* kill the meta-inodes */ -	iput(super->s_master_inode);  	iput(super->s_segfile_inode); +	iput(super->s_master_inode);  	iput(super->s_mapping_inode);  }  |