From: "Lukáš Czerner" <lczerner@redhat.com>
To: "Theodore Ts'o" <tytso@mit.edu>
Cc: Ext4 Developers List <linux-ext4@vger.kernel.org>,
Zheng Liu <wenqing.lz@taobao.com>
Subject: Re: [PATCH 2/7] ext4: fold ext4_generic_write_end() into ext4_write_end()
Date: Wed, 27 Mar 2013 13:58:32 +0100 (CET) [thread overview]
Message-ID: <alpine.LFD.2.00.1303271357440.23176@localhost> (raw)
In-Reply-To: <1364170014-10295-3-git-send-email-tytso@mit.edu>
On Sun, 24 Mar 2013, Theodore Ts'o wrote:
> Date: Sun, 24 Mar 2013 20:06:49 -0400
> From: Theodore Ts'o <tytso@mit.edu>
> To: Ext4 Developers List <linux-ext4@vger.kernel.org>
> Cc: Zheng Liu <wenqing.lz@taobao.com>, Theodore Ts'o <tytso@mit.edu>
> Subject: [PATCH 2/7] ext4: fold ext4_generic_write_end() into ext4_write_end()
>
> From: Zheng Liu <wenqing.lz@taobao.com>
>
> After collpasing the handling of data ordered and data writeback
> codepath, ext4_generic_write_end() has only one caller,
> ext4_write_end(). So we fold it into ext4_write_end().
Looks good.
Reviewed-by: Lukas Czerner <lczerner@redhat.com>
Thanks!
-Lukas
>
> Signed-off-by: Zheng Liu <wenqing.lz@taobao.com>
> Signed-off-by: "Theodore Ts'o" <tytso@mit.edu>
> ---
> fs/ext4/inode.c | 67 +++++++++++++++++++++++----------------------------------
> 1 file changed, 27 insertions(+), 40 deletions(-)
>
> diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c
> index 4ee6927..a4ffb47 100644
> --- a/fs/ext4/inode.c
> +++ b/fs/ext4/inode.c
> @@ -1087,14 +1087,32 @@ static int write_end_fn(handle_t *handle, struct buffer_head *bh)
> return ext4_handle_dirty_metadata(handle, NULL, bh);
> }
>
> -static int ext4_generic_write_end(struct file *file,
> - struct address_space *mapping,
> - loff_t pos, unsigned len, unsigned copied,
> - struct page *page, void *fsdata)
> +/*
> + * We need to pick up the new inode size which generic_commit_write gave us
> + * `file' can be NULL - eg, when called from page_symlink().
> + *
> + * ext4 never places buffers on inode->i_mapping->private_list. metadata
> + * buffers are managed internally.
> + */
> +static int ext4_write_end(struct file *file,
> + struct address_space *mapping,
> + loff_t pos, unsigned len, unsigned copied,
> + struct page *page, void *fsdata)
> {
> - int i_size_changed = 0;
> - struct inode *inode = mapping->host;
> handle_t *handle = ext4_journal_current_handle();
> + struct inode *inode = mapping->host;
> + int ret = 0, ret2;
> + int i_size_changed = 0;
> +
> + trace_ext4_write_end(inode, pos, len, copied);
> + if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) {
> + ret = ext4_jbd2_file_inode(handle, inode);
> + if (ret) {
> + unlock_page(page);
> + page_cache_release(page);
> + goto errout;
> + }
> + }
>
> if (ext4_has_inline_data(inode))
> copied = ext4_write_inline_data_end(inode, pos, len,
> @@ -1105,7 +1123,7 @@ static int ext4_generic_write_end(struct file *file,
>
> /*
> * No need to use i_size_read() here, the i_size
> - * cannot change under us because we hold i_mutex.
> + * cannot change under us because we hole i_mutex.
> *
> * But it's important to update i_size while still holding page lock:
> * page writeout could otherwise come in and zero beyond i_size.
> @@ -1115,10 +1133,10 @@ static int ext4_generic_write_end(struct file *file,
> i_size_changed = 1;
> }
>
> - if (pos + copied > EXT4_I(inode)->i_disksize) {
> + if (pos + copied > EXT4_I(inode)->i_disksize) {
> /* We need to mark inode dirty even if
> * new_i_size is less that inode->i_size
> - * bu greater than i_disksize.(hint delalloc)
> + * but greater than i_disksize. (hint delalloc)
> */
> ext4_update_i_disksize(inode, (pos + copied));
> i_size_changed = 1;
> @@ -1135,37 +1153,6 @@ static int ext4_generic_write_end(struct file *file,
> if (i_size_changed)
> ext4_mark_inode_dirty(handle, inode);
>
> - return copied;
> -}
> -
> -/*
> - * We need to pick up the new inode size which generic_commit_write gave us
> - * `file' can be NULL - eg, when called from page_symlink().
> - *
> - * ext4 never places buffers on inode->i_mapping->private_list. metadata
> - * buffers are managed internally.
> - */
> -static int ext4_write_end(struct file *file,
> - struct address_space *mapping,
> - loff_t pos, unsigned len, unsigned copied,
> - struct page *page, void *fsdata)
> -{
> - handle_t *handle = ext4_journal_current_handle();
> - struct inode *inode = mapping->host;
> - int ret = 0, ret2;
> -
> - trace_ext4_write_end(inode, pos, len, copied);
> - if (ext4_test_inode_state(inode, EXT4_STATE_ORDERED_MODE)) {
> - ret = ext4_jbd2_file_inode(handle, inode);
> - if (ret) {
> - unlock_page(page);
> - page_cache_release(page);
> - goto errout;
> - }
> - }
> -
> - copied = ext4_generic_write_end(file, mapping, pos, len, copied,
> - page, fsdata);
> if (copied < 0)
> ret = copied;
> if (pos + len > inode->i_size && ext4_can_truncate(inode))
>
next prev parent reply other threads:[~2013-03-27 12:58 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-25 0:06 [PATCH 0/7] ext4 code simplification and clean ups Theodore Ts'o
2013-03-25 0:06 ` [PATCH 1/7] ext4: collapse handling of data=ordered and data=writeback codepaths Theodore Ts'o
2013-03-27 12:57 ` Lukáš Czerner
2013-03-25 0:06 ` [PATCH 2/7] ext4: fold ext4_generic_write_end() into ext4_write_end() Theodore Ts'o
2013-03-27 12:58 ` Lukáš Czerner [this message]
2013-03-27 15:35 ` Jan Kara
2013-03-25 0:06 ` [PATCH 3/7] ext4: fold ext4_alloc_blocks() in ext4_alloc_branch() Theodore Ts'o
2013-03-27 17:01 ` Jan Kara
2013-03-25 0:06 ` [PATCH 4/7] ext4: refactor punch hole code Theodore Ts'o
[not found] ` <alpine.LFD.2.00.1303261334060.2455@(none)>
2013-03-27 2:38 ` Theodore Ts'o
2013-03-27 10:49 ` Lukáš Czerner
2013-03-25 0:06 ` [PATCH 5/7] ext4: refactor truncate code Theodore Ts'o
[not found] ` <alpine.LFD.2.00.1303271128480.2455@(none)>
2013-03-27 12:36 ` Theodore Ts'o
2013-03-27 13:31 ` Lukáš Czerner
2013-03-25 0:06 ` [PATCH 6/7] ext4: add mutex_is_locked() assertion to ext4_truncate() Theodore Ts'o
2013-03-26 9:31 ` Lukáš Czerner
2013-03-27 2:29 ` Theodore Ts'o
2013-03-25 0:06 ` [PATCH 7/7] ext4: add might_sleep() annotations Theodore Ts'o
2013-03-26 9:48 ` Lukáš Czerner
2013-03-26 9:49 ` Lukáš Czerner
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=alpine.LFD.2.00.1303271357440.23176@localhost \
--to=lczerner@redhat.com \
--cc=linux-ext4@vger.kernel.org \
--cc=tytso@mit.edu \
--cc=wenqing.lz@taobao.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.