From: Boaz Harrosh <bharrosh@panasas.com>
To: Al Viro <viro@ZenIV.linux.org.uk>,
linux-fsdevel <linux-fsdevel@vger.kernel.org>
Cc: Randy Dunlap <randy.dunlap@oracle.com>
Subject: Re: [PATCH] libfs: Open code simple_commit_write into only user
Date: Wed, 30 Dec 2009 17:57:21 +0200 [thread overview]
Message-ID: <4B3B7861.1070406@panasas.com> (raw)
In-Reply-To: <4B3B7473.4010403@panasas.com>
On 12/30/2009 05:40 PM, Boaz Harrosh wrote:
>
> * simple_commit_write was only called by simple_write_end.
> Open coding it makes it tiny bit less heavy on the arithmetic and
> much more readable.
>
> * While at it use zero_user() for clearing a partial page.
> * While at it add a docbook comment for simple_write_end.
>
> Signed-off-by: Boaz Harrosh <bharrosh@panasas.com>
Al Hi
When looking in fs/libfs.c I can see that also simple_prepare_write() is only used
once, locally, but is exported nonetheless. Has its time expired by now?
[And what does EXPORT_UNUSED_SYMBOL() means ?].
This patch was triggered by this fix:
http://marc.info/?l=linux-fsdevel&m=126193226815716&w=2
Thanks
Boaz
> ---
> fs/libfs.c | 59 +++++++++++++++++++++++++++++++++++------------------------
> 1 files changed, 35 insertions(+), 24 deletions(-)
>
> diff --git a/fs/libfs.c b/fs/libfs.c
> index 6e8d17e..4afb933 100644
> --- a/fs/libfs.c
> +++ b/fs/libfs.c
> @@ -370,40 +370,51 @@ int simple_write_begin(struct file *file, struct address_space *mapping,
> return simple_prepare_write(file, page, from, from+len);
> }
>
> -static int simple_commit_write(struct file *file, struct page *page,
> - unsigned from, unsigned to)
> -{
> - struct inode *inode = page->mapping->host;
> - loff_t pos = ((loff_t)page->index << PAGE_CACHE_SHIFT) + to;
> -
> - if (!PageUptodate(page))
> - SetPageUptodate(page);
> - /*
> - * No need to use i_size_read() here, the i_size
> - * cannot change under us because we hold the i_mutex.
> - */
> - if (pos > inode->i_size)
> - i_size_write(inode, pos);
> - set_page_dirty(page);
> - return 0;
> -}
> -
> +/**
> + * simple_write_end - .write_end helper for none block-device FSs
> + * @available: See .write_end of address_space_operations
> + * @file: "
> + * @mapping: "
> + * @pos: "
> + * @len: "
> + * @copied: "
> + * @page: "
> + * @fsdata: "
> + *
> + * simple_write_end does the minimum needed for updating a page after writing is
> + * done. It has the same API signature as the .write_end of
> + * address_space_operations vector. So it can just be set onto .write_end for
> + * FSs that don't need any other processing. i_mutex is assumed to be held.
> + * Block based filesystems should use generic_write_end().
> + * NOTE: Even though i_size might get updated by this function mark_inode_dirty
> + * is not called, so a filesystem that actually does store data in .write_inode
> + * should extend on what's done here with a call to mark_inode_dirty() in the
> + * case that i_size has changed.
> + **/
> int simple_write_end(struct file *file, struct address_space *mapping,
> loff_t pos, unsigned len, unsigned copied,
> struct page *page, void *fsdata)
> {
> - unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> + struct inode *inode = page->mapping->host;
> + loff_t last_pos = pos + copied;
>
> /* zero the stale part of the page if we did a short copy */
> if (copied < len) {
> - void *kaddr = kmap_atomic(page, KM_USER0);
> - memset(kaddr + from + copied, 0, len - copied);
> - flush_dcache_page(page);
> - kunmap_atomic(kaddr, KM_USER0);
> + unsigned from = pos & (PAGE_CACHE_SIZE - 1);
> +
> + zero_user(page, from + copied, len - copied);
> }
>
> - simple_commit_write(file, page, from, from+copied);
> + if (!PageUptodate(page))
> + SetPageUptodate(page);
> + /*
> + * No need to use i_size_read() here, the i_size
> + * cannot change under us because we hold the i_mutex.
> + */
> + if (last_pos > inode->i_size)
> + i_size_write(inode, last_pos);
>
> + set_page_dirty(page);
> unlock_page(page);
> page_cache_release(page);
>
next prev parent reply other threads:[~2009-12-30 15:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-12-30 15:40 [PATCH] libfs: Open code simple_commit_write into only user Boaz Harrosh
2009-12-30 15:57 ` Boaz Harrosh [this message]
2009-12-30 17:39 ` Randy Dunlap
2010-01-12 13:13 ` [PATCH version2] " Boaz Harrosh
2010-01-12 13:18 ` Boaz Harrosh
2010-01-12 13:28 ` Christoph Hellwig
2010-01-12 14:18 ` [PATCH 2/2] libfs: Unexport and kill simple_prepare_write Boaz Harrosh
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=4B3B7861.1070406@panasas.com \
--to=bharrosh@panasas.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=randy.dunlap@oracle.com \
--cc=viro@ZenIV.linux.org.uk \
/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.