[Ocfs2-devel] [patch 02/15] ocfs2: free inode when i_count becomes zero

Xue jiufei xuejiufei at huawei.com
Mon Dec 15 17:37:37 PST 2014


Hi, Andrew,
This patch may lead to data loss so please remove it from mm tree please.
Here is the situation: 
When i_count becomes zero but there still exists dirty pages in i_mapping,
the dirty pages would be freed without flushing the data.

To avoid this problem, we should flush dirty page before dropping
the inode, but I don't think it it a good idea to flush page in
function ocfs2_drop_inode().

So now there is no better way to solve this problem.

Thanks,
Xuejiufei

On 2014/12/16 6:50, akpm at linux-foundation.org wrote:
> From: Xue jiufei <xuejiufei at huawei.com>
> Subject: ocfs2: free inode when i_count becomes zero
> 
> Disk inode deletion may be heavily delayed when one node unlink a file
> after the same dentry is freed on another node(say N1) because of memory
> shrink but inode is left in memory.  This inode can only be freed while N1
> doing the orphan scan work.
> 
> However, N1 may skip orphan scan for several times because other nodes may
> do the work earlier.  In our tests, it may take 1 hour on 4 nodes cluster
> and this will cause bad user experience.  So we think the inode should be
> freed when i_count becomes zero to avoid such circumstances.
> 
> [akpm at linux-foundation.org: coding-style fixes]
> Signed-off-by: joyce.xue <xuejiufei at huawei.com>
> Cc: Mark Fasheh <mfasheh at suse.com>
> Cc: Joel Becker <jlbec at evilplan.org>
> Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
> ---
> 
>  fs/ocfs2/inode.c |   10 +---------
>  1 file changed, 1 insertion(+), 9 deletions(-)
> 
> diff -puN fs/ocfs2/inode.c~ocfs2-free-inode-when-i_count-becomes-zero fs/ocfs2/inode.c
> --- a/fs/ocfs2/inode.c~ocfs2-free-inode-when-i_count-becomes-zero
> +++ a/fs/ocfs2/inode.c
> @@ -1191,17 +1191,9 @@ void ocfs2_evict_inode(struct inode *ino
>  int ocfs2_drop_inode(struct inode *inode)
>  {
>  	struct ocfs2_inode_info *oi = OCFS2_I(inode);
> -	int res;
> -
>  	trace_ocfs2_drop_inode((unsigned long long)oi->ip_blkno,
>  				inode->i_nlink, oi->ip_flags);
> -
> -	if (oi->ip_flags & OCFS2_INODE_MAYBE_ORPHANED)
> -		res = 1;
> -	else
> -		res = generic_drop_inode(inode);
> -
> -	return res;
> +	return 1;
>  }
>  
>  /*
> _
> .
> 





More information about the Ocfs2-devel mailing list