All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kara <jack@suse.cz>
To: Theodore Ts'o <tytso@mit.edu>
Cc: Linux Kernel Developers List <linux-kernel@vger.kernel.org>,
	Ext4 Developers List <linux-ext4@vger.kernel.org>,
	jack@suse.cz
Subject: Re: [PATCH 2/3] ext3: Use WRITE_SYNC for commits which are caused by fsync()
Date: Fri, 27 Mar 2009 23:20:17 +0100	[thread overview]
Message-ID: <20090327222017.GI31071@duck.suse.cz> (raw)
In-Reply-To: <1238185471-31152-3-git-send-email-tytso@mit.edu>

On Fri 27-03-09 16:24:30, Theodore Ts'o wrote:
> If a commit is triggered by fsync(), set a flag indicating the journal
> blocks associated with the transaction should be flushed out using
> WRITE_SYNC.
> 
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
  And this one seems fine as well. Acked-by: Jan Kara <jack@suse.cz>

								Honza

> ---
>  fs/jbd/commit.c      |   23 +++++++++++++++--------
>  fs/jbd/transaction.c |    2 ++
>  include/linux/jbd.h  |    5 +++++
>  3 files changed, 22 insertions(+), 8 deletions(-)
> 
> diff --git a/fs/jbd/commit.c b/fs/jbd/commit.c
> index 3fbffb1..f8077b9 100644
> --- a/fs/jbd/commit.c
> +++ b/fs/jbd/commit.c
> @@ -20,6 +20,7 @@
>  #include <linux/slab.h>
>  #include <linux/mm.h>
>  #include <linux/pagemap.h>
> +#include <linux/bio.h>
>  
>  /*
>   * Default IO end handler for temporary BJ_IO buffer_heads.
> @@ -171,14 +172,15 @@ static int journal_write_commit_record(journal_t *journal,
>  	return (ret == -EIO);
>  }
>  
> -static void journal_do_submit_data(struct buffer_head **wbuf, int bufs)
> +static void journal_do_submit_data(struct buffer_head **wbuf, int bufs,
> +				   int write_op)
>  {
>  	int i;
>  
>  	for (i = 0; i < bufs; i++) {
>  		wbuf[i]->b_end_io = end_buffer_write_sync;
>  		/* We use-up our safety reference in submit_bh() */
> -		submit_bh(WRITE, wbuf[i]);
> +		submit_bh(write_op, wbuf[i]);
>  	}
>  }
>  
> @@ -186,7 +188,8 @@ static void journal_do_submit_data(struct buffer_head **wbuf, int bufs)
>   *  Submit all the data buffers to disk
>   */
>  static int journal_submit_data_buffers(journal_t *journal,
> -				transaction_t *commit_transaction)
> +				       transaction_t *commit_transaction,
> +				       int write_op)
>  {
>  	struct journal_head *jh;
>  	struct buffer_head *bh;
> @@ -225,7 +228,7 @@ write_out_data:
>  				BUFFER_TRACE(bh, "needs blocking lock");
>  				spin_unlock(&journal->j_list_lock);
>  				/* Write out all data to prevent deadlocks */
> -				journal_do_submit_data(wbuf, bufs);
> +				journal_do_submit_data(wbuf, bufs, write_op);
>  				bufs = 0;
>  				lock_buffer(bh);
>  				spin_lock(&journal->j_list_lock);
> @@ -256,7 +259,7 @@ write_out_data:
>  			jbd_unlock_bh_state(bh);
>  			if (bufs == journal->j_wbufsize) {
>  				spin_unlock(&journal->j_list_lock);
> -				journal_do_submit_data(wbuf, bufs);
> +				journal_do_submit_data(wbuf, bufs, write_op);
>  				bufs = 0;
>  				goto write_out_data;
>  			}
> @@ -286,7 +289,7 @@ write_out_data:
>  		}
>  	}
>  	spin_unlock(&journal->j_list_lock);
> -	journal_do_submit_data(wbuf, bufs);
> +	journal_do_submit_data(wbuf, bufs, write_op);
>  
>  	return err;
>  }
> @@ -315,6 +318,7 @@ void journal_commit_transaction(journal_t *journal)
>  	int first_tag = 0;
>  	int tag_flag;
>  	int i;
> +	int write_op = WRITE;
>  
>  	/*
>  	 * First job: lock down the current transaction and wait for
> @@ -347,6 +351,8 @@ void journal_commit_transaction(journal_t *journal)
>  	spin_lock(&journal->j_state_lock);
>  	commit_transaction->t_state = T_LOCKED;
>  
> +	if (commit_transaction->t_synchronous_commit)
> +		write_op = WRITE_SYNC;
>  	spin_lock(&commit_transaction->t_handle_lock);
>  	while (commit_transaction->t_updates) {
>  		DEFINE_WAIT(wait);
> @@ -431,7 +437,8 @@ void journal_commit_transaction(journal_t *journal)
>  	 * Now start flushing things to disk, in the order they appear
>  	 * on the transaction lists.  Data blocks go first.
>  	 */
> -	err = journal_submit_data_buffers(journal, commit_transaction);
> +	err = journal_submit_data_buffers(journal, commit_transaction,
> +					  write_op);
>  
>  	/*
>  	 * Wait for all previously submitted IO to complete.
> @@ -660,7 +667,7 @@ start_journal_io:
>  				clear_buffer_dirty(bh);
>  				set_buffer_uptodate(bh);
>  				bh->b_end_io = journal_end_buffer_io_sync;
> -				submit_bh(WRITE, bh);
> +				submit_bh(write_op, bh);
>  			}
>  			cond_resched();
>  
> diff --git a/fs/jbd/transaction.c b/fs/jbd/transaction.c
> index e6a1174..ed886e6 100644
> --- a/fs/jbd/transaction.c
> +++ b/fs/jbd/transaction.c
> @@ -1440,6 +1440,8 @@ int journal_stop(handle_t *handle)
>  		}
>  	}
>  
> +	if (handle->h_sync)
> +		transaction->t_synchronous_commit = 1;
>  	current->journal_info = NULL;
>  	spin_lock(&journal->j_state_lock);
>  	spin_lock(&transaction->t_handle_lock);
> diff --git a/include/linux/jbd.h b/include/linux/jbd.h
> index 64246dc..2c69431 100644
> --- a/include/linux/jbd.h
> +++ b/include/linux/jbd.h
> @@ -552,6 +552,11 @@ struct transaction_s
>  	 */
>  	int t_handle_count;
>  
> +	/*
> +	 * This transaction is being forced and some process is
> +	 * waiting for it to finish.
> +	 */
> +	int t_synchronous_commit:1;
>  };
>  
>  /**
> -- 
> 1.5.6.3
> 
-- 
Jan Kara <jack@suse.cz>
SUSE Labs, CR

  parent reply	other threads:[~2009-03-27 22:20 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-03-27 20:24 [PATCH 0/3] Ext3 latency improvement patches Theodore Ts'o
2009-03-27 20:24 ` [PATCH 1/3] block_write_full_page: Use synchronous writes for WBC_SYNC_ALL writebacks Theodore Ts'o
2009-03-27 20:24   ` [PATCH 2/3] ext3: Use WRITE_SYNC for commits which are caused by fsync() Theodore Ts'o
2009-03-27 20:24     ` [PATCH 3/3] ext3: Avoid starting a transaction in writepage when not necessary Theodore Ts'o
2009-03-27 22:23       ` Jan Kara
2009-03-27 23:03         ` Theodore Tso
2009-03-30 13:22           ` Jan Kara
2009-03-30 13:22             ` Jan Kara
2009-03-27 22:20     ` Jan Kara [this message]
2009-03-27 20:55   ` [PATCH 1/3] block_write_full_page: Use synchronous writes for WBC_SYNC_ALL writebacks Jan Kara
2009-04-07  6:21   ` Andrew Morton
2009-04-07  6:50     ` Andrew Morton
2009-04-07  6:50       ` Andrew Morton
2009-04-07  7:08       ` Jens Axboe
2009-04-07  7:17         ` Jens Axboe
2009-04-07  8:16           ` Jens Axboe
2009-04-07  7:23         ` Andrew Morton
2009-04-07  7:57           ` Jens Axboe
2009-04-07 19:09             ` Theodore Tso
2009-04-07 19:32               ` Jens Axboe
2009-04-07 21:44                 ` Theodore Tso
2009-04-07 22:19                   ` [PATCH] block_write_full_page: switch synchronous writes to use WRITE_SYNC_PLUG Theodore Tso
2009-04-07 22:19                     ` Theodore Tso
2009-04-07 23:09                     ` Andrew Morton
2009-04-07 23:46                       ` Theodore Tso
2009-04-08  8:08                       ` Jens Axboe
2009-04-08 22:34                         ` Andrew Morton
2009-04-09 17:59                           ` Jens Axboe
2009-04-08  6:00                     ` Jens Axboe
2009-04-08 15:26                       ` Theodore Tso
2009-04-08  5:58                   ` [PATCH 1/3] block_write_full_page: Use synchronous writes for WBC_SYNC_ALL writebacks Jens Axboe
2009-04-08 15:25                     ` Theodore Tso
2009-04-07 14:19           ` Theodore Tso
2009-03-27 20:50 ` [PATCH 0/3] Ext3 latency improvement patches Chris Mason
2009-03-27 21:03   ` Chris Mason
2009-03-27 21:19     ` Jan Kara
2009-03-27 21:30     ` Theodore Tso
2009-03-27 21:54       ` Jan Kara
2009-03-27 21:54         ` Jan Kara
2009-03-27 23:09         ` Theodore Tso
2009-03-28  0:14           ` Jeff Garzik
2009-03-28  0:14             ` Jeff Garzik
2009-03-28  0:24             ` David Rees
2009-03-28  0:24               ` David Rees
2009-03-30 14:16               ` Ric Wheeler
2009-03-30 11:23       ` Aneesh Kumar K.V
2009-03-30 11:44         ` Chris Mason
2009-03-30 11:23       ` Aneesh Kumar K.V

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=20090327222017.GI31071@duck.suse.cz \
    --to=jack@suse.cz \
    --cc=linux-ext4@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tytso@mit.edu \
    /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.