[Ocfs2-devel] [PATCH] ocfs2: fix a refcount condition checking

Tao Ma tao.ma at oracle.com
Thu Feb 4 16:58:45 PST 2010


Hi wengang,

Wengang Wang wrote:
> Hi Joel/Tao,
> 
> I don't know the reflink very well, so please ignore this patch if I am wrong.
> 
> I think in ocfs2_prepare_inode_for_write(), we disable DIO write if the inode
> has reflink.
> If am right, the way we determine if the inode has reflink is wrong in case
> (!has_refcount && direct_io).
I just check the caller, all these 2 parameters are either set or NULL 
simultaneously. You patch only make sense in (!has_refcount && 
direct_io), but currently we don't have such a case. So why bother 
adding redundant code for a not-exist case?

Regards,
Tao

> 
> Signed-off-by: Wengang Wang <wen.gang.wang at oracle.com>
> ---
>  fs/ocfs2/file.c |    5 +++--
>  1 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c
> index 06ccf6a..77ebb6e 100644
> --- a/fs/ocfs2/file.c
> +++ b/fs/ocfs2/file.c
> @@ -1775,7 +1775,7 @@ static int ocfs2_prepare_inode_for_write(struct dentry *dentry,
>  					 int *direct_io,
>  					 int *has_refcount)
>  {
> -	int ret = 0, meta_level = 0;
> +	int ret = 0, meta_level = 0, refcount = 0;
>  	struct inode *inode = dentry->d_inode;
>  	loff_t saved_pos, end;
>  
> @@ -1834,6 +1834,7 @@ static int ocfs2_prepare_inode_for_write(struct dentry *dentry,
>  							       saved_pos,
>  							       count,
>  							       &meta_level);
> +			refcount = 1;
>  			if (has_refcount)
>  				*has_refcount = 1;
>  		}
> @@ -1859,7 +1860,7 @@ static int ocfs2_prepare_inode_for_write(struct dentry *dentry,
>  			break;
>  		}
>  
> -		if (has_refcount && *has_refcount == 1) {
> +		if (refcount) {
>  			*direct_io = 0;
>  			break;
>  		}



More information about the Ocfs2-devel mailing list