linux-fsdevel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Andreas Dilger <adilger@dilger.ca>
Cc: Tejun Heo <teheo@suse.de>,
	jaxboe@fusionio.com, linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-scsi@vger.kernel.org,
	linux-ide@vger.kernel.org, linux-raid@vger.kernel.org,
	hch@lst.de, James.Bottomley@suse.de, tytso@mit.edu,
	chris.mason@oracle.com, swhiteho@redhat.com,
	konishi.ryusuke@lab.ntt.co.jp, dm-devel@redhat.com, vst@vlnb.net,
	jack@suse.cz, rwheeler@redhat.com, hare@suse.de, neilb@suse.de,
	rusty@rustcorp.com.au, mst@redhat.com, jeremy@goop.org,
	snitzer@redhat.com, k-ueda@ct.jp.nec.com
Subject: Re: [PATCH 24.5/30] jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier
Date: Mon, 6 Sep 2010 13:40:26 +0200	[thread overview]
Message-ID: <20100906114026.GA4243@quack.suse.cz> (raw)
In-Reply-To: <08ADE50E-9B33-4834-B08A-AD342D63D1F9@dilger.ca>

On Mon 06-09-10 13:15:52, Andreas Dilger wrote:
> On 2010-08-26, at 10:23, Tejun Heo wrote:
> > From 49f4cef00a1bd3c79fb2fe1f982c5157f0792867 Mon Sep 17 00:00:00 2001
> > From: Jan Kara <jack@suse.cz>
> > 
> > Currently JBD2 relies blkdev_issue_flush() draining the queue when ASYNC_COMMIT
> > feature is set. This property is going away so make JBD2 wait for buffers it
> > needs on its own before submitting the cache flush.
> 
> I finally had a chance to look at this patch more closely, and I think it
> may be breaking the ASYNC_COMMIT functionality, by forcing a wait for all
> of the data blocks _before_ the journal commit block is even submitted,
> even though ASYNC_COMMIT is enabled.
  Yes, we do wait for *data* blocks before submitting commit block. We have
to do it even while checksumming because data blocks aren't part of the
checksum. Only metadata is checksummed and thus only metadata blocks
are safe to be waited for after the commit block is submitted.

									Honza

> When ASYNC_COMMIT is enabled, it means that the journal transaction
> coherency is handled by the commit block checksum of the transaction data
> blocks, so the commit block can be submitted to the journal at the same
> time as the transaction data blocks.  The flush on the journal device
> (and the filesystem device, if they are separate) should happen after
> both are submitted.
> 
> However, if ASYNC_COMMIT is NOT enabled, then the transaction data blocks
> should be submitted and flushed before the journal commit block is
> submitted, and then there should be a second cache flush afterward.
> 
> ---
> > This patch is necessary before enabling flush/fua support in jbd2.
> > The flush-fua git tree has been udpated to included this between patch
> > 24 and 25.
> > 
> > Thanks.
> > 
> > fs/jbd2/commit.c |   29 ++++++++++++++++-------------
> > 1 files changed, 16 insertions(+), 13 deletions(-)
> > 
> > diff --git a/fs/jbd2/commit.c b/fs/jbd2/commit.c
> > index 7c068c1..8797fd1 100644
> > --- a/fs/jbd2/commit.c
> > +++ b/fs/jbd2/commit.c
> > @@ -701,6 +701,16 @@ start_journal_io:
> > 		}
> > 	}
> > 
> > +	err = journal_finish_inode_data_buffers(journal, commit_transaction);
> > +	if (err) {
> > +		printk(KERN_WARNING
> > +			"JBD2: Detected IO errors while flushing file data "
> > +		       "on %s\n", journal->j_devname);
> > +		if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR)
> > +			jbd2_journal_abort(journal, err);
> > +		err = 0;
> > +	}
> > +
> > 	/*
> > 	 * If the journal is not located on the file system device,
> > 	 * then we must flush the file system device before we issue
> > @@ -719,19 +729,6 @@ start_journal_io:
> > 						 &cbh, crc32_sum);
> > 		if (err)
> > 			__jbd2_journal_abort_hard(journal);
> > -		if (journal->j_flags & JBD2_BARRIER)
> > -			blkdev_issue_flush(journal->j_dev, GFP_KERNEL, NULL,
> > -				BLKDEV_IFL_WAIT);
> > -	}
> > -
> > -	err = journal_finish_inode_data_buffers(journal, commit_transaction);
> > -	if (err) {
> > -		printk(KERN_WARNING
> > -			"JBD2: Detected IO errors while flushing file data "
> > -		       "on %s\n", journal->j_devname);
> > -		if (journal->j_flags & JBD2_ABORT_ON_SYNCDATA_ERR)
> > -			jbd2_journal_abort(journal, err);
> > -		err = 0;
> > 	}
> > 
> > 	/* Lo and behold: we have just managed to send a transaction to
> > @@ -845,6 +842,12 @@ wait_for_iobuf:
> > 	}
> > 	if (!err && !is_journal_aborted(journal))
> > 		err = journal_wait_on_commit_record(journal, cbh);
> > +	if (JBD2_HAS_INCOMPAT_FEATURE(journal,
> > +				      JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT) &&
> > +	    journal->j_flags & JBD2_BARRIER) {
> > +			blkdev_issue_flush(journal->j_dev, GFP_KERNEL, NULL,
> > +				BLKDEV_IFL_WAIT);
> > +	}
> > 
> > 	if (err)
> > 		jbd2_journal_abort(journal, err);
> > -- 
> > 1.7.1
> > 
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
> > the body of a message to majordomo@vger.kernel.org
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 
> 
> Cheers, Andreas
> 
> 
> 
> 
> 
-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR

  reply	other threads:[~2010-09-06 11:40 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-25 15:47 [PATCHSET 2.6.36-rc2] block, fs: replace HARDBARRIER with FLUSH/FUA Tejun Heo
2010-08-25 15:47 ` [PATCH 01/30] ide: remove unnecessary blk_queue_flushing() test in do_ide_request() Tejun Heo
2010-08-25 15:47 ` [PATCH 02/30] block/loop: queue ordered mode should be DRAIN_FLUSH Tejun Heo
2010-08-25 15:47 ` [PATCH 03/30] block: kill QUEUE_ORDERED_BY_TAG Tejun Heo
2010-08-25 15:47 ` [PATCH 04/30] block: deprecate barrier and replace blk_queue_ordered() with blk_queue_flush() Tejun Heo
2010-08-30 15:37   ` Boaz Harrosh
2010-08-25 15:47 ` [PATCH 05/30] block: remove spurious uses of REQ_HARDBARRIER Tejun Heo
2010-08-25 15:47 ` [PATCH 06/30] block: misc cleanups in barrier code Tejun Heo
2010-08-25 15:47 ` [PATCH 07/30] block: drop barrier ordering by queue draining Tejun Heo
2010-08-25 15:47 ` [PATCH 08/30] block: rename blk-barrier.c to blk-flush.c Tejun Heo
2010-08-25 15:47 ` [PATCH 09/30] block: rename barrier/ordered to flush Tejun Heo
2010-08-25 15:47 ` [PATCH 10/30] block: implement REQ_FLUSH/FUA based interface for FLUSH/FUA requests Tejun Heo
2010-08-25 15:47 ` [PATCH 11/30] block: filter flush bio's in __generic_make_request() Tejun Heo
2010-08-25 15:47 ` [PATCH 12/30] block: use REQ_FLUSH in blkdev_issue_flush() Tejun Heo
2010-08-25 15:47 ` [PATCH 13/30] block: simplify queue_next_fseq Tejun Heo
2010-08-25 15:47 ` [PATCH 14/30] block/loop: implement REQ_FLUSH/FUA support Tejun Heo
2010-08-25 15:47 ` [PATCH 15/30] virtio_blk: drop REQ_HARDBARRIER support Tejun Heo
2010-08-25 15:47 ` [PATCH 16/30] lguest: replace VIRTIO_F_BARRIER support with VIRTIO_F_FLUSH support Tejun Heo
2010-08-25 15:47 ` [PATCH 17/30] md: implment REQ_FLUSH/FUA support Tejun Heo
2010-08-25 15:47 ` [PATCH 18/30] block: pass gfp_mask and flags to sb_issue_discard Tejun Heo
2010-08-25 15:47 ` [PATCH 19/30] xfs: replace barriers with explicit flush / FUA usage Tejun Heo
2010-08-25 15:47 ` [PATCH 20/30] btrfs: " Tejun Heo
2010-08-25 15:47 ` [PATCH 21/30] gfs2: " Tejun Heo
2010-08-25 15:47 ` [PATCH 22/30] reiserfs: " Tejun Heo
2010-08-25 15:47 ` [PATCH 23/30] nilfs2: " Tejun Heo
2010-08-25 15:47 ` [PATCH 24/30] jbd: " Tejun Heo
2010-08-25 15:47 ` [PATCH 25/30] jbd2: " Tejun Heo
2010-08-25 15:47 ` [PATCH 26/30] ext4: do not send discards as barriers Tejun Heo
2010-08-25 15:58   ` Christoph Hellwig
2010-08-25 16:00     ` Christoph Hellwig
2010-08-25 15:57       ` Tejun Heo
2010-08-25 20:02         ` Jan Kara
2010-08-26  8:25           ` Tejun Heo
2010-08-27 17:31             ` Jan Kara
2010-08-30 19:56               ` Jeff Moyer
2010-08-30 20:20                 ` Jan Kara
2010-08-30 20:24                   ` Ric Wheeler
2010-08-30 20:39                   ` Vladislav Bolkhovitin
2010-08-30 21:02                     ` Jan Kara
2010-08-31  9:55                       ` Boaz Harrosh
2010-09-02 18:46                         ` Vladislav Bolkhovitin
2010-08-30 21:01                   ` Jeff Moyer
2010-08-31  8:11                   ` Tejun Heo
2010-08-31 10:07                     ` Boaz Harrosh
2010-08-31 10:13                       ` Tejun Heo
2010-08-31 10:27                         ` Boaz Harrosh
2010-09-09 22:53                     ` Jan Kara
2010-08-25 15:47 ` [PATCH 27/30] fat: " Tejun Heo
2010-08-25 15:47 ` [PATCH 28/30] swap: " Tejun Heo
2010-08-25 15:47 ` [PATCH 29/30] block: remove the BLKDEV_IFL_BARRIER flag Tejun Heo
2010-08-25 15:59   ` Christoph Hellwig
2010-08-25 15:47 ` [PATCH 30/30] block: remove the BH_Eopnotsupp flag Tejun Heo
2010-08-25 16:03 ` [PATCHSET 2.6.36-rc2] block, fs: replace HARDBARRIER with FLUSH/FUA Mike Snitzer
2010-08-26  8:23 ` [PATCH 24.5/30] jbd2: Modify ASYNC_COMMIT code to not rely on queue draining on barrier Tejun Heo
2010-08-26  9:33   ` Sergei Shtylyov
2010-08-26  9:37   ` [PATCH UPDATED " Tejun Heo
2010-09-06 11:15   ` [PATCH " Andreas Dilger
2010-09-06 11:40     ` Jan Kara [this message]
2010-08-26  9:54 ` [PATCH] block: update documentation for REQ_FLUSH / REQ_FUA Christoph Hellwig
2010-08-27  9:18   ` Tejun Heo

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=20100906114026.GA4243@quack.suse.cz \
    --to=jack@suse.cz \
    --cc=James.Bottomley@suse.de \
    --cc=adilger@dilger.ca \
    --cc=chris.mason@oracle.com \
    --cc=dm-devel@redhat.com \
    --cc=hare@suse.de \
    --cc=hch@lst.de \
    --cc=jaxboe@fusionio.com \
    --cc=jeremy@goop.org \
    --cc=k-ueda@ct.jp.nec.com \
    --cc=konishi.ryusuke@lab.ntt.co.jp \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-ide@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-raid@vger.kernel.org \
    --cc=linux-scsi@vger.kernel.org \
    --cc=mst@redhat.com \
    --cc=neilb@suse.de \
    --cc=rusty@rustcorp.com.au \
    --cc=rwheeler@redhat.com \
    --cc=snitzer@redhat.com \
    --cc=swhiteho@redhat.com \
    --cc=teheo@suse.de \
    --cc=tytso@mit.edu \
    --cc=vst@vlnb.net \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).