The rightmost one is the final option. And checkpoint=merge means checkpoint is enabled with a checkpoint thread.
mount checkpoint=disable,checkpoint=merge => checkpoint=merge remount checkpoint=enable,checkpoint=merge => checkpoint=merge remount checkpoint=merge,checkpoint=disable => checkpoint=disable remount checkpoint=merge,checkpoint=enable => checkpoint=enable Like mount fsync_mode=posix, fsync_mode=strict, fsync_mode=nobarrier => fsync_mode=nobarrier 2021년 2월 2일 (화) 오전 5:11, Jaegeuk Kim <jaeg...@kernel.org>님이 작성: > > On 02/01, Daeho Jeong wrote: > > Actually, I think we need to select one among them, disable, enable > > and merge. I realized my previous understanding about that was wrong. > > In that case of "checkpoint=merge,checkpoint=enable", the last option > > will override the ones before that. > > This is how the other mount options like fsync_mode, whint_mode and etc. > > So, the answer will be "checkpoint=enable". What do you think? > > We need to clarify a bit more. :) > > mount checkpoint=disable,checkpoint=merge > remount checkpoint=enable,checkpoint=merge > > Then, is it going to enable checkpoint with a thread? > > > > > > > > > 2021년 2월 1일 (월) 오후 9:40, Chao Yu <c...@kernel.org>님이 작성: > > > > > > On 2021/2/1 8:06, Daeho Jeong wrote: > > > > From: Daeho Jeong <daehoje...@google.com> > > > > > > > > As checkpoint=merge comes in, mount option setting related to > > > > checkpoint had been mixed up. Fixed it. > > > > > > > > Signed-off-by: Daeho Jeong <daehoje...@google.com> > > > > --- > > > > fs/f2fs/super.c | 11 +++++------ > > > > 1 file changed, 5 insertions(+), 6 deletions(-) > > > > > > > > diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c > > > > index 56696f6cfa86..8231c888c772 100644 > > > > --- a/fs/f2fs/super.c > > > > +++ b/fs/f2fs/super.c > > > > @@ -930,20 +930,25 @@ static int parse_options(struct super_block *sb, > > > > char *options, bool is_remount) > > > > return -EINVAL; > > > > F2FS_OPTION(sbi).unusable_cap_perc = arg; > > > > set_opt(sbi, DISABLE_CHECKPOINT); > > > > + clear_opt(sbi, MERGE_CHECKPOINT); > > > > break; > > > > case Opt_checkpoint_disable_cap: > > > > if (args->from && match_int(args, &arg)) > > > > return -EINVAL; > > > > F2FS_OPTION(sbi).unusable_cap = arg; > > > > set_opt(sbi, DISABLE_CHECKPOINT); > > > > + clear_opt(sbi, MERGE_CHECKPOINT); > > > > break; > > > > case Opt_checkpoint_disable: > > > > set_opt(sbi, DISABLE_CHECKPOINT); > > > > + clear_opt(sbi, MERGE_CHECKPOINT); > > > > break; > > > > case Opt_checkpoint_enable: > > > > clear_opt(sbi, DISABLE_CHECKPOINT); > > > > + clear_opt(sbi, MERGE_CHECKPOINT); > > > > > > What if: -o checkpoint=merge,checkpoint=enable > > > > > > Can you please explain the rule of merge/disable/enable combination and > > > their > > > result? e.g. > > > checkpoint=merge,checkpoint=enable > > > checkpoint=enable,checkpoint=merge > > > checkpoint=merge,checkpoint=disable > > > checkpoint=disable,checkpoint=merge > > > > > > If the rule/result is clear, it should be documented. > > > > > > Thanks, > > > > > > > > > > break; > > > > case Opt_checkpoint_merge: > > > > + clear_opt(sbi, DISABLE_CHECKPOINT); > > > > set_opt(sbi, MERGE_CHECKPOINT); > > > > break; > > > > #ifdef CONFIG_F2FS_FS_COMPRESSION > > > > @@ -1142,12 +1147,6 @@ static int parse_options(struct super_block *sb, > > > > char *options, bool is_remount) > > > > return -EINVAL; > > > > } > > > > > > > > - if (test_opt(sbi, DISABLE_CHECKPOINT) && > > > > - test_opt(sbi, MERGE_CHECKPOINT)) { > > > > - f2fs_err(sbi, "checkpoint=merge cannot be used with > > > > checkpoint=disable\n"); > > > > - return -EINVAL; > > > > - } > > > > - > > > > /* Not pass down write hints if the number of active logs is > > > > lesser > > > > * than NR_CURSEG_PERSIST_TYPE. > > > > */ > > > > > > > > > > _______________________________________________ > > Linux-f2fs-devel mailing list > > linux-f2fs-de...@lists.sourceforge.net > > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel