All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chris Mason <chris.mason@oracle.com>
To: djwong <djwong@us.ibm.com>
Cc: Jan Kara <jack@suse.cz>, Mingming Cao <cmm@us.ibm.com>,
	Christoph Hellwig <hch@infradead.org>,
	Jeff Layton <jlayton@redhat.com>,
	Dave Chinner <david@fromorbit.com>,
	Joel Becker <jlbec@evilplan.org>,
	"Martin K. Petersen" <martin.petersen@oracle.com>,
	Jens Axboe <axboe@kernel.dk>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	linux-fsdevel <linux-fsdevel@vger.kernel.org>,
	Mingming Cao <mcao@us.ibm.com>,
	linux-scsi <linux-scsi@vger.kernel.org>,
	Dave Hansen <dave@linux.vnet.ibm.com>
Subject: Re: [RFC v2] block integrity: Stabilize(?) pages during writeback
Date: Tue, 26 Apr 2011 07:33:18 -0400	[thread overview]
Message-ID: <1303817010-sup-351@think> (raw)
In-Reply-To: <20110426003738.GB22189@tux1.beaverton.ibm.com>

Excerpts from Darrick J. Wong's message of 2011-04-25 20:37:38 -0400:
> On Fri, Apr 22, 2011 at 10:34:34PM +0200, Jan Kara wrote:
> > On Fri 22-04-11 08:50:01, Chris Mason wrote:
> > > Excerpts from Darrick J. Wong's message of 2011-04-21 20:02:26 -0400:
> > > > Hi everyone,
> > > > 
> > > > I've finally managed to get together a patch that seems to provide stable pages
> > > > during writeback, or at least gets us to the point that after several days of
> > > > running tests I don't see DIF checksum errors anymore. :)
> > > > 
> > > > The last two pieces to go into this puzzle were (a) bio_integrity_prep needs to
> > > > walk the process tree to find all userland ptes that map to a particular memory
> > > > page and revoke write access, and
> > > 
> > > Hmm, did you need the bio_integrity_prep change for all the filesystems?
> > > This should be happening already as part of using page_mkwrite.
> >   Or more precisely page_mkclean() should do what you try to do in
> > bio_integrity_prep()... It would certainly be interesting (bug) if you
> > could write to the page after calling page_mkclean() without page_mkwrite()
> > being called.
> 
> Hm... in mpage_da_submit_io I see the following sequence of calls:
> 
> 1. clear_page_dirty_for_io
> 2. possibly one of: ext4_bio_write_page or block_write_full_page.
>    If ext4_bio_write_page, 
>    2a. kmem_cache_alloc
>    2b. set_page_writeback
> 
> Before and after #1, the page is locked but writeback is not set.
> 
> Before #2, the page must be locked and writeback must not be set, because both
> of those two functions want to set the writeback bit themselves.  However,
> ext4_bio_write_page tries to allocate memory with GFP_NOFS, which means it can
> sleep (I think).

Sleeping isn't the problem as long as you sleep with the page locked.
The idea is that writepage will:

1) lock the page
2) clear_page_dirty_for_io (which calls page_mkclean)
3) set_page_writeback()
4) unlock the page
5) start the IO

page_mkwrite will:

1) lock the page
2) wait on page writeback
3) do other stuff

So if ext is calling set_page_writeback() on an unlocked page, that's a
problem.  Otherwise it should be working.

-chris

  reply	other threads:[~2011-04-26 11:33 UTC|newest]

Thread overview: 79+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-22  2:00 [RFC] block integrity: Fix write after checksum calculation problem Darrick J. Wong
2011-02-22  5:45 ` Boaz Harrosh
2011-02-22 11:42   ` Jan Kara
2011-02-22 13:02     ` Chris Mason
2011-02-22 19:13       ` Boaz Harrosh
2011-03-04 20:51     ` Darrick J. Wong
2011-03-04 20:53       ` Christoph Hellwig
2011-02-22 16:13 ` Andreas Dilger
2011-02-22 16:40   ` Martin K. Petersen
2011-02-22 16:40     ` Martin K. Petersen
2011-02-22 19:45   ` Darrick J. Wong
2011-02-22 22:53     ` Dave Chinner
2011-02-23 16:24       ` Martin K. Petersen
2011-02-23 16:24         ` Martin K. Petersen
2011-02-23 23:47         ` Dave Chinner
2011-02-24 16:43         ` Jan Kara
2011-02-28  8:49   ` Christoph Hellwig
2011-02-22 16:45 ` Martin K. Petersen
2011-02-23 20:24   ` Joel Becker
2011-02-23 20:35     ` Chris Mason
2011-02-23 21:42       ` Joel Becker
2011-02-24 16:47       ` Jan Kara
2011-02-24 17:37         ` Chris Mason
2011-02-24 18:27           ` Darrick J. Wong
2011-02-28 12:54             ` Chris Mason
2011-03-04 21:07               ` Darrick J. Wong
2011-03-04 22:22                 ` Andreas Dilger
2011-03-07 19:11                   ` Darrick J. Wong
2011-03-07 21:12                 ` Chris Mason
2011-03-08  4:56                 ` Dave Chinner
2011-03-10 23:57                   ` Darrick J. Wong
2011-03-11 16:34                     ` Chris Mason
2011-03-11 18:51                       ` Darrick J. Wong
2011-03-19  0:07                   ` Darrick J. Wong
2011-03-19  2:28                     ` Andreas Dilger
2011-03-22 19:23                       ` Darrick J. Wong
2011-03-22 21:54                         ` Jan Kara
2011-03-21 14:04                     ` Jan Kara
2011-03-21 14:24                       ` Chris Mason
2011-03-21 16:43                         ` Jan Kara
2011-04-06 23:29                           ` Darrick J. Wong
2011-04-07 16:44                             ` Darrick J. Wong
2011-04-07 16:57                             ` Jan Kara
2011-04-08 20:31                               ` Darrick J. Wong
2011-04-11 16:42                                 ` Jeff Layton
2011-04-11 17:41                                   ` Chris Mason
2011-04-11 18:25                                     ` Christoph Hellwig
2011-04-11 18:38                                       ` Chris Mason
2011-04-12  0:46                                     ` Mingming Cao
2011-04-12  0:57                                       ` Christoph Hellwig
2011-04-14  0:48                                         ` Mingming Cao
2011-04-22  0:02                                           ` [RFC v2] block integrity: Stabilize(?) pages during writeback Darrick J. Wong
2011-04-22 12:50                                             ` Chris Mason
2011-04-22 20:34                                               ` Jan Kara
2011-04-26  0:37                                                 ` Darrick J. Wong
2011-04-26 11:33                                                   ` Chris Mason [this message]
2011-05-03  1:59                                                     ` Darrick J. Wong
2011-05-04  1:26                                                       ` Darrick J. Wong
2011-04-26 11:37                                                   ` Jan Kara
2011-05-04 17:37                                             ` [PATCH v3 0/3] data integrity: Stabilize pages during writeback for ext4 Darrick J. Wong
2011-05-04 17:37                                               ` Darrick J. Wong
2011-05-04 18:46                                               ` Christoph Hellwig
2011-05-04 18:46                                                 ` Christoph Hellwig
2011-05-04 19:21                                                 ` Chris Mason
2011-05-04 19:21                                                   ` Chris Mason
2011-05-04 20:00                                                   ` Darrick J. Wong
2011-05-04 20:00                                                     ` Darrick J. Wong
2011-05-04 23:57                                                   ` Darrick J. Wong
2011-05-04 23:57                                                     ` Darrick J. Wong
2011-05-05 15:26                                                     ` Jan Kara
2011-05-05 15:26                                                       ` Jan Kara
2011-05-04 17:39                                             ` [PATCH v3 1/3] ext4: Clean up some wait_on_page_writeback calls Darrick J. Wong
2011-05-04 17:39                                               ` Darrick J. Wong
2011-05-04 17:41                                             ` [PATCH v3 2/3] ext4: Wait for writeback to complete while making pages writable Darrick J. Wong
2011-05-04 17:41                                               ` Darrick J. Wong
2011-05-04 17:42                                             ` [PATCH v3 3/3] mm: Wait for writeback when grabbing pages to begin a write Darrick J. Wong
2011-05-04 17:42                                               ` Darrick J. Wong
2011-05-04 18:48                                               ` Christoph Hellwig
2011-05-04 18:48                                                 ` Christoph Hellwig

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=1303817010-sup-351@think \
    --to=chris.mason@oracle.com \
    --cc=axboe@kernel.dk \
    --cc=cmm@us.ibm.com \
    --cc=dave@linux.vnet.ibm.com \
    --cc=david@fromorbit.com \
    --cc=djwong@us.ibm.com \
    --cc=hch@infradead.org \
    --cc=jack@suse.cz \
    --cc=jlayton@redhat.com \
    --cc=jlbec@evilplan.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=martin.petersen@oracle.com \
    --cc=mcao@us.ibm.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.