From: Gu Zheng <guz.fnst@cn.fujitsu.com>
To: jaegeuk.kim@samsung.com
Cc: fsdevel <linux-fsdevel@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
f2fs <linux-f2fs-devel@lists.sourceforge.net>
Subject: Re: [PATCH] f2fs: add a wait step when submit bio with {READ, WRITE}_SYNC
Date: Wed, 31 Jul 2013 09:59:03 +0800 [thread overview]
Message-ID: <51F86F67.1070605@cn.fujitsu.com> (raw)
In-Reply-To: <1375187398.26443.69.camel@kjgkr>
Hi Kim,
On 07/30/2013 08:29 PM, Jaegeuk Kim wrote:
> Hi Gu,
>
> The original read flow was to avoid redandunt lock/unlock_page() calls.
Right, this can gain better read performance. But is the wait step after
submitting bio with READ_SYNC needless too?
> And we should not wait for WRITE_SYNC, since it is just for write
> priority, not for synchronization of the file system.
Got it, thanks for your explanation.:)
Best regards,
Gu
> Thanks,
>
> 2013-07-30 (화), 18:06 +0800, Gu Zheng:
>> When we submit bio with READ_SYNC or WRITE_SYNC, we need to wait a
>> moment for the io completion, current codes only find_data_page() follows the
>> rule, other places missing this step, so add it.
>>
>> Further more, moving the PageUptodate check into f2fs_readpage() to clean up
>> the codes.
>>
>> Signed-off-by: Gu Zheng <guz.fnst@cn.fujitsu.com>
>> ---
>> fs/f2fs/checkpoint.c | 1 -
>> fs/f2fs/data.c | 39 +++++++++++++++++----------------------
>> fs/f2fs/node.c | 1 -
>> fs/f2fs/recovery.c | 2 --
>> fs/f2fs/segment.c | 2 +-
>> 5 files changed, 18 insertions(+), 27 deletions(-)
>>
>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>> index fe91773..e376a42 100644
>> --- a/fs/f2fs/checkpoint.c
>> +++ b/fs/f2fs/checkpoint.c
>> @@ -64,7 +64,6 @@ repeat:
>> if (f2fs_readpage(sbi, page, index, READ_SYNC))
>> goto repeat;
>>
>> - lock_page(page);
>> if (page->mapping != mapping) {
>> f2fs_put_page(page, 1);
>> goto repeat;
>> diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
>> index 19cd7c6..b048936 100644
>> --- a/fs/f2fs/data.c
>> +++ b/fs/f2fs/data.c
>> @@ -216,13 +216,11 @@ struct page *find_data_page(struct inode *inode, pgoff_t index, bool sync)
>>
>> err = f2fs_readpage(sbi, page, dn.data_blkaddr,
>> sync ? READ_SYNC : READA);
>> - if (sync) {
>> - wait_on_page_locked(page);
>> - if (!PageUptodate(page)) {
>> - f2fs_put_page(page, 0);
>> - return ERR_PTR(-EIO);
>> - }
>> - }
>> + if (err)
>> + return ERR_PTR(err);
>> +
>> + if (sync)
>> + unlock_page(page);
>> return page;
>> }
>>
>> @@ -267,11 +265,6 @@ repeat:
>> if (err)
>> return ERR_PTR(err);
>>
>> - lock_page(page);
>> - if (!PageUptodate(page)) {
>> - f2fs_put_page(page, 1);
>> - return ERR_PTR(-EIO);
>> - }
>> if (page->mapping != mapping) {
>> f2fs_put_page(page, 1);
>> goto repeat;
>> @@ -325,11 +318,7 @@ repeat:
>> err = f2fs_readpage(sbi, page, dn.data_blkaddr, READ_SYNC);
>> if (err)
>> return ERR_PTR(err);
>> - lock_page(page);
>> - if (!PageUptodate(page)) {
>> - f2fs_put_page(page, 1);
>> - return ERR_PTR(-EIO);
>> - }
>> +
>> if (page->mapping != mapping) {
>> f2fs_put_page(page, 1);
>> goto repeat;
>> @@ -399,6 +388,16 @@ int f2fs_readpage(struct f2fs_sb_info *sbi, struct page *page,
>>
>> submit_bio(type, bio);
>> up_read(&sbi->bio_sem);
>> +
>> + if (type == READ_SYNC) {
>> + wait_on_page_locked(page);
>> + lock_page(page);
>> + if (!PageUptodate(page)) {
>> + f2fs_put_page(page, 1);
>> + return -EIO;
>> + }
>> + }
>> +
>> return 0;
>> }
>>
>> @@ -679,11 +678,7 @@ repeat:
>> err = f2fs_readpage(sbi, page, dn.data_blkaddr, READ_SYNC);
>> if (err)
>> return err;
>> - lock_page(page);
>> - if (!PageUptodate(page)) {
>> - f2fs_put_page(page, 1);
>> - return -EIO;
>> - }
>> +
>> if (page->mapping != mapping) {
>> f2fs_put_page(page, 1);
>> goto repeat;
>> diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c
>> index f5172e2..f061554 100644
>> --- a/fs/f2fs/node.c
>> +++ b/fs/f2fs/node.c
>> @@ -1534,7 +1534,6 @@ int restore_node_summary(struct f2fs_sb_info *sbi,
>> if (f2fs_readpage(sbi, page, addr, READ_SYNC))
>> goto out;
>>
>> - lock_page(page);
>> rn = F2FS_NODE(page);
>> sum_entry->nid = rn->footer.nid;
>> sum_entry->version = 0;
>> diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
>> index 639eb34..ec68183 100644
>> --- a/fs/f2fs/recovery.c
>> +++ b/fs/f2fs/recovery.c
>> @@ -140,8 +140,6 @@ static int find_fsync_dnodes(struct f2fs_sb_info *sbi, struct list_head *head)
>> if (err)
>> goto out;
>>
>> - lock_page(page);
>> -
>> if (cp_ver != cpver_of_node(page))
>> break;
>>
>> diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c
>> index 9b74ae2..bcd19db 100644
>> --- a/fs/f2fs/segment.c
>> +++ b/fs/f2fs/segment.c
>> @@ -639,7 +639,7 @@ static void do_submit_bio(struct f2fs_sb_info *sbi,
>>
>> trace_f2fs_do_submit_bio(sbi->sb, btype, sync, sbi->bio[btype]);
>>
>> - if (type == META_FLUSH) {
>> + if ((type == META_FLUSH) || (rw & WRITE_SYNC)) {
>> DECLARE_COMPLETION_ONSTACK(wait);
>> p->is_sync = true;
>> p->wait = &wait;
>
------------------------------------------------------------------------------
Get your SQL database under version control now!
Version control is standard for application code, but databases havent
caught up. So what steps can you take to put your SQL databases under
version control? Why should you start doing it? Read more to find out.
http://pubads.g.doubleclick.net/gampad/clk?id=49501711&iu=/4140/ostg.clktrk
_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2013-07-31 1:59 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-30 10:06 [PATCH] f2fs: add a wait step when submit bio with {READ,WRITE}_SYNC Gu Zheng
2013-07-30 12:29 ` Jaegeuk Kim
2013-07-31 1:59 ` Gu Zheng [this message]
2013-07-31 10:06 ` Jaegeuk Kim
2013-07-31 10:09 ` Gu Zheng
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=51F86F67.1070605@cn.fujitsu.com \
--to=guz.fnst@cn.fujitsu.com \
--cc=jaegeuk.kim@samsung.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
/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).