diff options
Diffstat (limited to 'fs/exofs/super.c')
| -rw-r--r-- | fs/exofs/super.c | 9 | 
1 files changed, 5 insertions, 4 deletions
diff --git a/fs/exofs/super.c b/fs/exofs/super.c index dde41a75c7c..5e59280d42d 100644 --- a/fs/exofs/super.c +++ b/fs/exofs/super.c @@ -206,6 +206,11 @@ static int init_inodecache(void)   */  static void destroy_inodecache(void)  { +	/* +	 * Make sure all delayed rcu free inodes are flushed before we +	 * destroy cache. +	 */ +	rcu_barrier();  	kmem_cache_destroy(exofs_inode_cachep);  } @@ -384,8 +389,6 @@ static int exofs_sync_fs(struct super_block *sb, int wait)  	if (unlikely(ret))  		goto out; -	lock_super(sb); -  	ios->length = offsetof(struct exofs_fscb, s_dev_table_oid);  	memset(fscb, 0, ios->length);  	fscb->s_nextid = cpu_to_le64(sbi->s_nextid); @@ -401,8 +404,6 @@ static int exofs_sync_fs(struct super_block *sb, int wait)  	if (unlikely(ret))  		EXOFS_ERR("%s: ore_write failed.\n", __func__); - -	unlock_super(sb);  out:  	EXOFS_DBGMSG("s_nextid=0x%llx ret=%d\n", _LLU(sbi->s_nextid), ret);  	ore_put_io_state(ios);  |