linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
From: Chao Yu <chao@kernel.org>
To: Yunlong Song <yunlong.song@huawei.com>,
	jaegeuk@kernel.org, yuchao0@huawei.com, yunlong.song@icloud.com
Cc: linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net, heyunlei@huawei.com,
	miaoxie@huawei.com
Subject: Re: [PATCH] f2fs: add fi->commit_lock to protect commit GCed pages
Date: Wed, 7 Feb 2018 20:16:09 +0800	[thread overview]
Message-ID: <4493cbf2-6f37-6c04-a012-4b2516b3b4e7@kernel.org> (raw)
In-Reply-To: <1517888990-96478-1-git-send-email-yunlong.song@huawei.com>

On 2018/2/6 11:49, Yunlong Song wrote:
> This patch adds fi->commit_lock to avoid the case that GCed node pages
> are committed but GCed data pages are not committed. This can avoid the
> db file run into inconsistent state when sudden-power-off happens if
> data pages of atomic file is allowed to be GCed before.

do_fsync:				GC:
- mutex_lock(&fi->commit_lock);
					- lock_page()
					 - mutex_lock(&fi->commit_lock);
 - lock_page()


Well, please consider lock dependency & code complexity, IMO, reuse
fi->dio_rwsem[WRITE] will be enough as below:

---
 fs/f2fs/file.c | 3 +++
 fs/f2fs/gc.c   | 5 -----
 2 files changed, 3 insertions(+), 5 deletions(-)

diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c
index 672a542e5464..1bdc11feb8d0 100644
--- a/fs/f2fs/file.c
+++ b/fs/f2fs/file.c
@@ -1711,6 +1711,8 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)

 	inode_lock(inode);

+	down_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
+
 	if (f2fs_is_volatile_file(inode))
 		goto err_out;

@@ -1729,6 +1731,7 @@ static int f2fs_ioc_commit_atomic_write(struct file *filp)
 		ret = f2fs_do_sync_file(filp, 0, LLONG_MAX, 1, false);
 	}
 err_out:
+	up_write(&F2FS_I(inode)->dio_rwsem[WRITE]);
 	inode_unlock(inode);
 	mnt_drop_write_file(filp);
 	return ret;
diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c
index b9d93fd532a9..e49416283563 100644
--- a/fs/f2fs/gc.c
+++ b/fs/f2fs/gc.c
@@ -622,9 +622,6 @@ static void move_data_block(struct inode *inode, block_t bidx,
 	if (!check_valid_map(F2FS_I_SB(inode), segno, off))
 		goto out;

-	if (f2fs_is_atomic_file(inode))
-		goto out;
-
 	if (f2fs_is_pinned_file(inode)) {
 		f2fs_pin_file_control(inode, true);
 		goto out;
@@ -729,8 +726,6 @@ static void move_data_page(struct inode *inode, block_t bidx, int gc_type,
 	if (!check_valid_map(F2FS_I_SB(inode), segno, off))
 		goto out;

-	if (f2fs_is_atomic_file(inode))
-		goto out;
 	if (f2fs_is_pinned_file(inode)) {
 		if (gc_type == FG_GC)
 			f2fs_pin_file_control(inode, true);
-- 
2.14.1.145.gb3622a4ee

Thanks,

------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot

  reply	other threads:[~2018-02-07 12:16 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-03  2:47 [PATCH 1/2] f2fs: enable to gc page whose inode already atomic commit Yunlong Song
2018-02-03  2:47 ` [PATCH 2/2] f2fs: add GC_WRITTEN_PAGE to gc atomic file Yunlong Song
2018-02-04 14:56 ` [PATCH 1/2] f2fs: enable to gc page whose inode already atomic commit Chao Yu
2018-02-05  2:53   ` Yunlong Song
2018-02-05  6:29     ` Chao Yu
2018-02-05  6:40       ` Yunlong Song
2018-02-05  7:30         ` Chao Yu
2018-02-05  9:37           ` Yunlong Song
2018-02-05 11:10             ` Chao Yu
2018-02-06  2:15               ` Yunlong Song
2018-02-06  3:49 ` [PATCH] f2fs: add fi->commit_lock to protect commit GCed pages Yunlong Song
2018-02-07 12:16   ` Chao Yu [this message]
2018-02-08  3:11     ` Yunlong Song
2018-02-09 12:44       ` Chao Yu
2018-02-09 12:56         ` Yunlong Song
2018-02-09 13:26           ` Chao Yu
2018-02-09 13:29             ` Yunlong Song
2018-02-09 13:38               ` Chao Yu
2018-02-09 13:57                 ` Yunlong Song

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=4493cbf2-6f37-6c04-a012-4b2516b3b4e7@kernel.org \
    --to=chao@kernel.org \
    --cc=heyunlei@huawei.com \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miaoxie@huawei.com \
    --cc=yuchao0@huawei.com \
    --cc=yunlong.song@huawei.com \
    --cc=yunlong.song@icloud.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 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).