[Ocfs2-devel] [PATCH 2/2] Ocfs2: Handle O_DIRECT writes with coherency option.

Joel Becker Joel.Becker at oracle.com
Sun Oct 10 03:59:49 PDT 2010


On Sat, Oct 09, 2010 at 07:26:42PM +0800, Tristan Ye wrote:
> -	/* concurrent O_DIRECT writes are allowed */
> -	rw_level = !direct_io;
> +	/* 
> +	 * concurrent O_DIRECT writes are allowed with
> +	 * mount_option "coherency=buffered".
> +	 */
> +	if (direct_io) {
> +		rw_level = !(osb->s_mount_opt & OCFS2_MOUNT_COHERENCY_BUFFERED);
> +	} else
> +		rw_level = !direct_io;
> +

	I think I'd like:

	if (direct_io && (osb->s_mount_opt & OCFS2_MOUNT_COHERENCY_BUFFERED))
		rw_level = 0;
	else
		rw_level = 1;

It actually matches your comment much better.  But since we're going to
be using it again later, perhaps you should set 'int full_coherency =
(osb->s_mount_opt & OCFS2_MOUNT_COHERENCY_BUFFERED)' up at the top of
the function and then do:

	rw_level = (!direct_io || full_coherency)

>  	ret = ocfs2_rw_lock(inode, rw_level);
>  	if (ret < 0) {
>  		mlog_errno(ret);
>  		goto out_sems;
>  	}
>  
> +	/*
> +	 * O_DIRECT writes with "coherency=full" need to take EX cluster
> +	 * inode_lock to guarantee coherency.
> +	 */
> +	if ((direct_io) &&
> +	    !(osb->s_mount_opt & OCFS2_MOUNT_COHERENCY_BUFFERED)) {

	Then this check can be:

	if (direct_io && full_coherency) {
		/*
		 * We need to take and drop the inode lock to force
		 * other nodes to drop their caches.  Buffered I/O
		 * already does this in write_begin().
		 */

> +		ret = ocfs2_inode_lock(inode, NULL, 1);
> +		if (ret < 0) {
> +			mlog_errno(ret);
> +			goto out_sems;
> +		}
> +		
> +		/*
> +		 * Safe to drop the inode_lock immediately since we're just
> +		 * telling other nodes to flush their cache.
> +		 */

	And you don't need this comment.

> +		ocfs2_inode_unlock(inode, 1);
> +	}

-- 

"The lawgiver, of all beings, most owes the law allegiance.  He of all
 men should behave as though the law compelled him.  But it is the
 universal weakness of mankind that what we are given to administer we
 presently imagine we own."
        - H.G. Wells

Joel Becker
Consulting Software Developer
Oracle
E-mail: joel.becker at oracle.com
Phone: (650) 506-8127



More information about the Ocfs2-devel mailing list