All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <greg@kroah.com>
To: Christoph Hellwig <hch@infradead.org>
Cc: Alex Elder <aelder@sgi.com>, Dave Chinner <dchinner@redhat.com>,
	stable@vger.kernel.org, xfs@oss.sgi.com
Subject: Re: [PATCH 4/9] [PATCH 4/9] xfs: dont serialise direct IO reads on page cache
Date: Tue, 22 Nov 2011 13:34:25 -0800	[thread overview]
Message-ID: <20111122213425.GA29127@kroah.com> (raw)
In-Reply-To: <20111119181544.111984285@bombadil.infradead.org>

On Sat, Nov 19, 2011 at 01:13:40PM -0500, Christoph Hellwig wrote:
> There is no need to grab the i_mutex of the IO lock in exclusive
> mode if we don't need to invalidate the page cache. Taking these
> locks on every direct IO effective serialises them as taking the IO
> lock in exclusive mode has to wait for all shared holders to drop
> the lock. That only happens when IO is complete, so effective it
> prevents dispatch of concurrent direct IO reads to the same inode.
> 
> Fix this by taking the IO lock shared to check the page cache state,
> and only then drop it and take the IO lock exclusively if there is
> work to be done. Hence for the normal direct IO case, no exclusive
> locking will occur.
> 
> Signed-off-by: Dave Chinner <dchinner@redhat.com>
> Tested-by: Joern Engel <joern@logfs.org>
> Reviewed-by: Christoph Hellwig <hch@lst.de>
> Signed-off-by: Alex Elder <aelder@sgi.com>

What is the git commit id that matches this patch in Linus's tree?

thanks,

greg k-h

> ---
>  fs/xfs/linux-2.6/xfs_file.c |   17 ++++++++++++++---
>  1 files changed, 14 insertions(+), 3 deletions(-)
> 
> diff --git a/fs/xfs/linux-2.6/xfs_file.c b/fs/xfs/linux-2.6/xfs_file.c
> index 7f782af2..93cc02d 100644
> --- a/fs/xfs/linux-2.6/xfs_file.c
> +++ b/fs/xfs/linux-2.6/xfs_file.c
> @@ -309,7 +309,19 @@ xfs_file_aio_read(
>  	if (XFS_FORCED_SHUTDOWN(mp))
>  		return -EIO;
>  
> -	if (unlikely(ioflags & IO_ISDIRECT)) {
> +	/*
> +	 * Locking is a bit tricky here. If we take an exclusive lock
> +	 * for direct IO, we effectively serialise all new concurrent
> +	 * read IO to this file and block it behind IO that is currently in
> +	 * progress because IO in progress holds the IO lock shared. We only
> +	 * need to hold the lock exclusive to blow away the page cache, so
> +	 * only take lock exclusively if the page cache needs invalidation.
> +	 * This allows the normal direct IO case of no page cache pages to
> +	 * proceeed concurrently without serialisation.
> +	 */
> +	xfs_rw_ilock(ip, XFS_IOLOCK_SHARED);
> +	if ((ioflags & IO_ISDIRECT) && inode->i_mapping->nrpages) {
> +		xfs_rw_iunlock(ip, XFS_IOLOCK_SHARED);
>  		xfs_rw_ilock(ip, XFS_IOLOCK_EXCL);
>  
>  		if (inode->i_mapping->nrpages) {
> @@ -322,8 +334,7 @@ xfs_file_aio_read(
>  			}
>  		}
>  		xfs_rw_ilock_demote(ip, XFS_IOLOCK_EXCL);
> -	} else
> -		xfs_rw_ilock(ip, XFS_IOLOCK_SHARED);
> +	}
>  
>  	trace_xfs_file_read(ip, size, iocb->ki_pos, ioflags);
>  
> -- 
> 1.7.7
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe stable" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

_______________________________________________
xfs mailing list
xfs@oss.sgi.com
http://oss.sgi.com/mailman/listinfo/xfs

  reply	other threads:[~2011-11-22 22:35 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-19 18:13 [PATCH 0/9] XFS update for 3.0-stable Christoph Hellwig
2011-11-19 18:13 ` [PATCH 1/9] [PATCH 1/9] "xfs: fix error handling for synchronous writes" Christoph Hellwig
2011-11-19 18:13 ` [PATCH 2/9] [PATCH 2/9] xfs: fix xfs_mark_inode_dirty during umount Christoph Hellwig
2011-11-19 18:13 ` [PATCH 3/9] [PATCH 3/9] xfs: fix ->write_inode return values Christoph Hellwig
2011-11-19 18:13 ` [PATCH 4/9] [PATCH 4/9] xfs: dont serialise direct IO reads on page cache Christoph Hellwig
2011-11-22 21:34   ` Greg KH [this message]
2011-11-22 21:35     ` Greg KH
2011-11-19 18:13 ` [PATCH 5/9] [PATCH 5/9] xfs: avoid direct I/O write vs buffered I/O race Christoph Hellwig
2011-11-19 18:13 ` [PATCH 6/9] [PATCH 6/9] xfs: Return -EIO when xfs_vn_getattr() failed Christoph Hellwig
2011-11-19 18:13 ` [PATCH 7/9] [PATCH 7/9] xfs: fix buffer flushing during unmount Christoph Hellwig
2011-11-19 18:13 ` [PATCH 8/9] [PATCH 8/9] xfs: Fix possible memory corruption in xfs_readlink Christoph Hellwig
2011-11-19 18:13 ` [PATCH 9/9] [PATCH 9/9] xfs: use doalloc flag in xfs_qm_dqattach_one() Christoph Hellwig
2011-11-19 18:59 ` [PATCH 0/9] XFS update for 3.0-stable Greg KH
2011-11-21  0:46 ` Dave Chinner
2011-11-21 16:05 ` Ben Myers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20111122213425.GA29127@kroah.com \
    --to=greg@kroah.com \
    --cc=aelder@sgi.com \
    --cc=dchinner@redhat.com \
    --cc=hch@infradead.org \
    --cc=stable@vger.kernel.org \
    --cc=xfs@oss.sgi.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.