All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Yu <chao@kernel.org>
To: Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <yuchao0@huawei.com>
Cc: Zhang Yi <yi.zhang@huawei.com>, Jan Kara <jack@suse.cz>,
	linux-kernel@vger.kernel.org,
	linux-f2fs-devel@lists.sourceforge.net
Subject: Re: [f2fs-dev] [PATCH] f2fs: avoid attaching SB_ACTIVE flag during mount/remount
Date: Wed, 23 Jun 2021 22:51:12 +0800	[thread overview]
Message-ID: <bd548ff5-4143-31f9-0d84-abc8a53b597d@kernel.org> (raw)
In-Reply-To: <YNLsKSSxS5xLJcnB@google.com>

Hi Jaegeuk,

On 2021/6/23 16:09, Jaegeuk Kim wrote:
> Hi Chao,
> 
> I'll remove this patch, since it breaks checkpoint=disable and recovery
> flow that check SB_ACTIVE.

Oh, sorry, is it due to changes in f2fs_disable_checkpoint()?

So how about testing with changes f2fs_recover_orphan_inodes() and
f2fs_recover_fsync_data()?

Thanks,

> 
> Thanks,
> 
> On 05/25, Chao Yu wrote:
>> Quoted from [1]
>>
>> "I do remember that I've added this code back then because otherwise
>> orphan cleanup was losing updates to quota files. But you're right
>> that now I don't see how that could be happening and it would be nice
>> if we could get rid of this hack"
>>
>> [1] https://lore.kernel.org/linux-ext4/99cce8ca-e4a0-7301-840f-2ace67c551f3@huawei.com/T/#m04990cfbc4f44592421736b504afcc346b2a7c00
>>
>> Related fix in ext4 by
>> commit 72ffb49a7b62 ("ext4: do not set SB_ACTIVE in ext4_orphan_cleanup()").
>>
>> f2fs has the same hack implementation in
>> - f2fs_recover_orphan_inodes()
>> - f2fs_recover_fsync_data()
>> - f2fs_disable_checkpoint()
>>
>> Let's get rid of this hack as well in f2fs.
>>
>> Cc: Zhang Yi <yi.zhang@huawei.com>
>> Cc: Jan Kara <jack@suse.cz>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>>   fs/f2fs/checkpoint.c |  3 ---
>>   fs/f2fs/recovery.c   |  8 ++------
>>   fs/f2fs/super.c      | 11 ++++-------
>>   3 files changed, 6 insertions(+), 16 deletions(-)
>>
>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>> index 6c208108d69c..a578c7d13d81 100644
>> --- a/fs/f2fs/checkpoint.c
>> +++ b/fs/f2fs/checkpoint.c
>> @@ -691,9 +691,6 @@ int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi)
>>   	}
>>   
>>   #ifdef CONFIG_QUOTA
>> -	/* Needed for iput() to work correctly and not trash data */
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>> -
>>   	/*
>>   	 * Turn on quotas which were not enabled for read-only mounts if
>>   	 * filesystem has quota feature, so that they are updated correctly.
>> diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
>> index 4b2f7d1d5bf4..4cfe36fa41be 100644
>> --- a/fs/f2fs/recovery.c
>> +++ b/fs/f2fs/recovery.c
>> @@ -782,8 +782,6 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
>>   	}
>>   
>>   #ifdef CONFIG_QUOTA
>> -	/* Needed for iput() to work correctly and not trash data */
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>>   	/* Turn on quotas so that they are updated correctly */
>>   	quota_enabled = f2fs_enable_quota_files(sbi, s_flags & SB_RDONLY);
>>   #endif
>> @@ -811,10 +809,8 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
>>   	err = recover_data(sbi, &inode_list, &tmp_inode_list, &dir_list);
>>   	if (!err)
>>   		f2fs_bug_on(sbi, !list_empty(&inode_list));
>> -	else {
>> -		/* restore s_flags to let iput() trash data */
>> -		sbi->sb->s_flags = s_flags;
>> -	}
>> +	else
>> +		f2fs_bug_on(sbi, sbi->sb->s_flags & SB_ACTIVE);
>>   skip:
>>   	fix_curseg_write_pointer = !check_only || list_empty(&inode_list);
>>   
>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
>> index 0a77808ebb8f..e7bd983fbddc 100644
>> --- a/fs/f2fs/super.c
>> +++ b/fs/f2fs/super.c
>> @@ -1881,17 +1881,15 @@ static int f2fs_enable_quotas(struct super_block *sb);
>>   
>>   static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   {
>> -	unsigned int s_flags = sbi->sb->s_flags;
>>   	struct cp_control cpc;
>>   	int err = 0;
>>   	int ret;
>>   	block_t unusable;
>>   
>> -	if (s_flags & SB_RDONLY) {
>> +	if (sbi->sb->s_flags & SB_RDONLY) {
>>   		f2fs_err(sbi, "checkpoint=disable on readonly fs");
>>   		return -EINVAL;
>>   	}
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>>   
>>   	f2fs_update_time(sbi, DISABLE_TIME);
>>   
>> @@ -1909,13 +1907,13 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   	ret = sync_filesystem(sbi->sb);
>>   	if (ret || err) {
>>   		err = ret ? ret : err;
>> -		goto restore_flag;
>> +		goto out;
>>   	}
>>   
>>   	unusable = f2fs_get_unusable_blocks(sbi);
>>   	if (f2fs_disable_cp_again(sbi, unusable)) {
>>   		err = -EAGAIN;
>> -		goto restore_flag;
>> +		goto out;
>>   	}
>>   
>>   	down_write(&sbi->gc_lock);
>> @@ -1931,8 +1929,7 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   
>>   out_unlock:
>>   	up_write(&sbi->gc_lock);
>> -restore_flag:
>> -	sbi->sb->s_flags = s_flags;	/* Restore SB_RDONLY status */
>> +out:
>>   	return err;
>>   }
>>   
>> -- 
>> 2.29.2


_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

WARNING: multiple messages have this Message-ID (diff)
From: Chao Yu <chao@kernel.org>
To: Jaegeuk Kim <jaegeuk@kernel.org>, Chao Yu <yuchao0@huawei.com>
Cc: linux-f2fs-devel@lists.sourceforge.net,
	linux-kernel@vger.kernel.org, Zhang Yi <yi.zhang@huawei.com>,
	Jan Kara <jack@suse.cz>
Subject: Re: [PATCH] f2fs: avoid attaching SB_ACTIVE flag during mount/remount
Date: Wed, 23 Jun 2021 22:51:12 +0800	[thread overview]
Message-ID: <bd548ff5-4143-31f9-0d84-abc8a53b597d@kernel.org> (raw)
In-Reply-To: <YNLsKSSxS5xLJcnB@google.com>

Hi Jaegeuk,

On 2021/6/23 16:09, Jaegeuk Kim wrote:
> Hi Chao,
> 
> I'll remove this patch, since it breaks checkpoint=disable and recovery
> flow that check SB_ACTIVE.

Oh, sorry, is it due to changes in f2fs_disable_checkpoint()?

So how about testing with changes f2fs_recover_orphan_inodes() and
f2fs_recover_fsync_data()?

Thanks,

> 
> Thanks,
> 
> On 05/25, Chao Yu wrote:
>> Quoted from [1]
>>
>> "I do remember that I've added this code back then because otherwise
>> orphan cleanup was losing updates to quota files. But you're right
>> that now I don't see how that could be happening and it would be nice
>> if we could get rid of this hack"
>>
>> [1] https://lore.kernel.org/linux-ext4/99cce8ca-e4a0-7301-840f-2ace67c551f3@huawei.com/T/#m04990cfbc4f44592421736b504afcc346b2a7c00
>>
>> Related fix in ext4 by
>> commit 72ffb49a7b62 ("ext4: do not set SB_ACTIVE in ext4_orphan_cleanup()").
>>
>> f2fs has the same hack implementation in
>> - f2fs_recover_orphan_inodes()
>> - f2fs_recover_fsync_data()
>> - f2fs_disable_checkpoint()
>>
>> Let's get rid of this hack as well in f2fs.
>>
>> Cc: Zhang Yi <yi.zhang@huawei.com>
>> Cc: Jan Kara <jack@suse.cz>
>> Signed-off-by: Chao Yu <yuchao0@huawei.com>
>> ---
>>   fs/f2fs/checkpoint.c |  3 ---
>>   fs/f2fs/recovery.c   |  8 ++------
>>   fs/f2fs/super.c      | 11 ++++-------
>>   3 files changed, 6 insertions(+), 16 deletions(-)
>>
>> diff --git a/fs/f2fs/checkpoint.c b/fs/f2fs/checkpoint.c
>> index 6c208108d69c..a578c7d13d81 100644
>> --- a/fs/f2fs/checkpoint.c
>> +++ b/fs/f2fs/checkpoint.c
>> @@ -691,9 +691,6 @@ int f2fs_recover_orphan_inodes(struct f2fs_sb_info *sbi)
>>   	}
>>   
>>   #ifdef CONFIG_QUOTA
>> -	/* Needed for iput() to work correctly and not trash data */
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>> -
>>   	/*
>>   	 * Turn on quotas which were not enabled for read-only mounts if
>>   	 * filesystem has quota feature, so that they are updated correctly.
>> diff --git a/fs/f2fs/recovery.c b/fs/f2fs/recovery.c
>> index 4b2f7d1d5bf4..4cfe36fa41be 100644
>> --- a/fs/f2fs/recovery.c
>> +++ b/fs/f2fs/recovery.c
>> @@ -782,8 +782,6 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
>>   	}
>>   
>>   #ifdef CONFIG_QUOTA
>> -	/* Needed for iput() to work correctly and not trash data */
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>>   	/* Turn on quotas so that they are updated correctly */
>>   	quota_enabled = f2fs_enable_quota_files(sbi, s_flags & SB_RDONLY);
>>   #endif
>> @@ -811,10 +809,8 @@ int f2fs_recover_fsync_data(struct f2fs_sb_info *sbi, bool check_only)
>>   	err = recover_data(sbi, &inode_list, &tmp_inode_list, &dir_list);
>>   	if (!err)
>>   		f2fs_bug_on(sbi, !list_empty(&inode_list));
>> -	else {
>> -		/* restore s_flags to let iput() trash data */
>> -		sbi->sb->s_flags = s_flags;
>> -	}
>> +	else
>> +		f2fs_bug_on(sbi, sbi->sb->s_flags & SB_ACTIVE);
>>   skip:
>>   	fix_curseg_write_pointer = !check_only || list_empty(&inode_list);
>>   
>> diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c
>> index 0a77808ebb8f..e7bd983fbddc 100644
>> --- a/fs/f2fs/super.c
>> +++ b/fs/f2fs/super.c
>> @@ -1881,17 +1881,15 @@ static int f2fs_enable_quotas(struct super_block *sb);
>>   
>>   static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   {
>> -	unsigned int s_flags = sbi->sb->s_flags;
>>   	struct cp_control cpc;
>>   	int err = 0;
>>   	int ret;
>>   	block_t unusable;
>>   
>> -	if (s_flags & SB_RDONLY) {
>> +	if (sbi->sb->s_flags & SB_RDONLY) {
>>   		f2fs_err(sbi, "checkpoint=disable on readonly fs");
>>   		return -EINVAL;
>>   	}
>> -	sbi->sb->s_flags |= SB_ACTIVE;
>>   
>>   	f2fs_update_time(sbi, DISABLE_TIME);
>>   
>> @@ -1909,13 +1907,13 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   	ret = sync_filesystem(sbi->sb);
>>   	if (ret || err) {
>>   		err = ret ? ret : err;
>> -		goto restore_flag;
>> +		goto out;
>>   	}
>>   
>>   	unusable = f2fs_get_unusable_blocks(sbi);
>>   	if (f2fs_disable_cp_again(sbi, unusable)) {
>>   		err = -EAGAIN;
>> -		goto restore_flag;
>> +		goto out;
>>   	}
>>   
>>   	down_write(&sbi->gc_lock);
>> @@ -1931,8 +1929,7 @@ static int f2fs_disable_checkpoint(struct f2fs_sb_info *sbi)
>>   
>>   out_unlock:
>>   	up_write(&sbi->gc_lock);
>> -restore_flag:
>> -	sbi->sb->s_flags = s_flags;	/* Restore SB_RDONLY status */
>> +out:
>>   	return err;
>>   }
>>   
>> -- 
>> 2.29.2

  reply	other threads:[~2021-06-23 14:51 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-25 11:39 [f2fs-dev] [PATCH] f2fs: avoid attaching SB_ACTIVE flag during mount/remount Chao Yu
2021-05-25 11:39 ` Chao Yu
2021-05-25 13:42 ` [f2fs-dev] " Jan Kara
2021-05-25 13:42   ` Jan Kara
2021-06-23  8:09 ` [f2fs-dev] " Jaegeuk Kim
2021-06-23  8:09   ` Jaegeuk Kim
2021-06-23 14:51   ` Chao Yu [this message]
2021-06-23 14:51     ` Chao Yu
2021-06-23 15:49     ` [f2fs-dev] " Jaegeuk Kim
2021-06-23 15:49       ` Jaegeuk Kim
2021-06-28 12:29       ` [f2fs-dev] " Chao Yu
2021-06-28 12:29         ` Chao Yu
2021-06-28 12:33         ` [f2fs-dev] " Chao Yu
2021-06-28 12:33           ` Chao Yu

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=bd548ff5-4143-31f9-0d84-abc8a53b597d@kernel.org \
    --to=chao@kernel.org \
    --cc=jack@suse.cz \
    --cc=jaegeuk@kernel.org \
    --cc=linux-f2fs-devel@lists.sourceforge.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=yi.zhang@huawei.com \
    --cc=yuchao0@huawei.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.