All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andrew Morton <akpm@linux-foundation.org>
To: Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp>
Cc: Chris Mason <chris.mason@oracle.com>, Jan Kara <jack@suse.cz>,
	Mingming Cao <cmm@us.ibm.com>,
	linux-ext4@vger.kernel.org, linux-fsdevel@vger.kernel.org,
	Zach Brown <zach.brown@oracle.com>
Subject: Re: [PATCH] jbd jbd2: fix diowritereturningEIOwhentry_to_release_page fails
Date: Tue, 19 Aug 2008 00:16:51 -0700	[thread overview]
Message-ID: <20080819001651.30c7620f.akpm@linux-foundation.org> (raw)
In-Reply-To: <6.0.0.20.2.20080819113242.03f9e8c8@172.19.0.2>

On Tue, 19 Aug 2008 16:03:45 +0900 Hisashi Hifumi <hifumi.hisashi@oss.ntt.co.jp> wrote:

> 
> At 21:59 08/08/13, Chris Mason wrote:
> >On Wed, 2008-08-13 at 12:16 +0200, Jan Kara wrote:
> >
> >> > With that said, I don't have strong feelings against falling back to
> >> > buffered IO when the invalidate fails.  Maybe Zach remembers something I
> >> > don't?
> >>   I don't have a strong opinion either. Falling back to buffered writes is
> >> simpler at least for ext3/ext4 because properly synchronizing against
> >> writepage() call does not seem to have a nice solution either in
> >> do_launder_page() or in releasepage(). OTOH is hides the fact the invalidate
> >> is failing and so if we screw up something in future and it fails often, it
> >> might be hard to notice / track down the performance penalty.
> >
> >In general, these races don't happen often, and when they do it is
> >because someone is mixing page cache and O_DIRECT io to the same file.
> >That is explicitly outside the main use case of O_DIRECT.
> >
> >So, I'd rather see us slow down O_DIRECT in the mixed use case than have
> >big impacts in complexity or speed to other parts of the kernel.  If
> >falling back avoids problems in some filesystems or avoids clearing the
> >uptodate bit unexpectedly, I'd much rather take the fallback patch.
> >
> >-chris
> 
> Hi Andrew.
> I think we don't have strong feelings against falling back to buffered writes to
> fix the direct-io -EIO problem.
> 
> Please review my patch.
> 

umm, what problem does it solve?

> 
> diff -Nrup linux-2.6.27-rc3.org/mm/filemap.c linux-2.6.27-rc3/mm/filemap.c
> --- linux-2.6.27-rc3.org/mm/filemap.c	2008-08-13 13:48:47.000000000 +0900
> +++ linux-2.6.27-rc3/mm/filemap.c	2008-08-19 15:45:31.000000000 +0900
> @@ -2129,13 +2129,20 @@ generic_file_direct_write(struct kiocb *
>  	 * After a write we want buffered reads to be sure to go to disk to get
>  	 * the new data.  We invalidate clean cached page from the region we're
>  	 * about to write.  We do this *before* the write so that we can return
> -	 * -EIO without clobbering -EIOCBQUEUED from ->direct_IO().
> +	 * without clobbering -EIOCBQUEUED from ->direct_IO().
>  	 */
>  	if (mapping->nrpages) {
>  		written = invalidate_inode_pages2_range(mapping,
>  					pos >> PAGE_CACHE_SHIFT, end);
> -		if (written)
> +		/*
> +		 * If a page can not be invalidated, return 0 to fall back
> +		 * to buffered write.
> +		 */
> +		if (written) {
> +			if (written == -EBUSY)
> +				return 0;
>  			goto out;
> +		}
>  	}
>  
>  	written = mapping->a_ops->direct_IO(WRITE, iocb, iov, pos, *nr_segs);
> diff -Nrup linux-2.6.27-rc3.org/mm/truncate.c linux-2.6.27-rc3/mm/truncate.c
> --- linux-2.6.27-rc3.org/mm/truncate.c	2008-08-13 13:48:48.000000000 +0900
> +++ linux-2.6.27-rc3/mm/truncate.c	2008-08-19 12:10:46.000000000 +0900
> @@ -380,7 +380,7 @@ static int do_launder_page(struct addres
>   * Any pages which are found to be mapped into pagetables are unmapped prior to
>   * invalidation.
>   *
> - * Returns -EIO if any pages could not be invalidated.
> + * Returns -EBUSY if any pages could not be invalidated.
>   */
>  int invalidate_inode_pages2_range(struct address_space *mapping,
>  				  pgoff_t start, pgoff_t end)
> @@ -440,7 +440,7 @@ int invalidate_inode_pages2_range(struct
>  			ret2 = do_launder_page(mapping, page);
>  			if (ret2 == 0) {
>  				if (!invalidate_complete_page2(mapping, page))
> -					ret2 = -EIO;
> +					ret2 = -EBUSY;
>  			}
>  			if (ret2 < 0)
>  				ret = ret2;

If I recall correctly, we had a problem with pages which are pinned by
an ext3 transaction, and those pages weren't releaseable for direct-io,
and this caused some problem?

I think falling back to buffered writes is always a safe course, but
it'd be nice to have a full description of the change, please.


  reply	other threads:[~2008-08-19  7:18 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-04 11:10 [PATCH] jbd jbd2: fix dio write returning EIO when try_to_release_page fails Hisashi Hifumi
2008-08-04 21:50 ` Andrew Morton
2008-08-05  2:36   ` [PATCH] jbd jbd2: fix dio write returning EIO whentry_to_release_page fails Hisashi Hifumi
2008-08-05 21:35     ` Mingming Cao
2008-08-06  2:04       ` [PATCH] jbd jbd2: fix dio write returning EIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-05  3:35   ` [PATCH] jbd jbd2: fix dio write returning EIO when try_to_release_page fails Chris Mason
2008-08-05  4:51     ` [PATCH] jbd jbd2: fix dio write returning EIO whentry_to_release_page fails Hisashi Hifumi
2008-08-05 16:17       ` Chris Mason
2008-08-05 21:17         ` Mingming Cao
2008-08-06  6:55           ` [PATCH] jbd jbd2: fix dio write returning EIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-06  8:39             ` [PATCH] jbd jbd2: fix dio write returningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-06 13:25           ` [PATCH] jbd jbd2: fix dio write returning EIO whentry_to_release_page fails Chris Mason
2008-08-06 13:53             ` Jan Kara
2008-08-06 22:57               ` Mingming Cao
2008-08-07  1:07                 ` Chris Mason
2008-08-07  3:15                 ` [PATCH] jbd jbd2: fix dio write returning EIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-07 10:21                   ` Chris Mason
2008-08-08  3:28                     ` [PATCH] jbd jbd2: fix dio write returningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-08 12:54                       ` Chris Mason
2008-08-11  6:25                         ` [PATCH] jbd jbd2: fix dio writereturningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-12 13:28                           ` Chris Mason
2008-08-12 16:38                             ` Zach Brown
2008-08-12 20:06                             ` Mingming Cao
2008-08-13  6:02                               ` [PATCH] jbd jbd2: fix diowritereturningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-13 10:56                               ` [PATCH] jbd jbd2: fix dio writereturningEIOwhentry_to_release_page fails Jan Kara
2008-08-13 10:16                             ` Jan Kara
2008-08-13 12:59                               ` Chris Mason
2008-08-19  7:03                                 ` [PATCH] jbd jbd2: fix diowritereturningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-19  7:16                                   ` Andrew Morton [this message]
2008-08-20  2:50                                     ` [PATCH] jbd jbd2: fixdiowritereturningEIOwhentry_to_release_page fails Hisashi Hifumi
2008-08-21  7:47                                     ` Hisashi Hifumi
2008-08-05 21:03 ` [PATCH] jbd jbd2: fix dio write returning EIO when try_to_release_page fails Mingming Cao
2008-08-06 12:47   ` Jan Kara

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=20080819001651.30c7620f.akpm@linux-foundation.org \
    --to=akpm@linux-foundation.org \
    --cc=chris.mason@oracle.com \
    --cc=cmm@us.ibm.com \
    --cc=hifumi.hisashi@oss.ntt.co.jp \
    --cc=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=zach.brown@oracle.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.