Received: by 2002:a05:6a10:1a4d:0:0:0:0 with SMTP id nk13csp4934pxb; Mon, 31 Jan 2022 03:52:50 -0800 (PST) X-Google-Smtp-Source: ABdhPJxpw/GvHkjvDNkD5fWheI+ToCb7YMKUz7v9oyDOWjqZhcQ86GNuMj0WEKkrRrB960tCJpw9 X-Received: by 2002:a17:903:2302:: with SMTP id d2mr20279320plh.18.1643629970384; Mon, 31 Jan 2022 03:52:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643629970; cv=none; d=google.com; s=arc-20160816; b=LHKEB6+nv6TAYPfMnWAUJH/ORLUeMUEX6NRxCr57LkKudH0Xeb1lw1+2qcTq61dYxr ip+0uDHXysvgZ7shJ8CsF+Pdt9eQTN5LUQsfySeEofsqXCZgnvi40Ea5uPpHSDo60GPX 7lZGxbLX40+z73Om6rH9KWeZTH+pNwaPJElzjZMCLiaP37KlOPQkkkeMs5PhfauZ+Glw K/y/QIh5Zz/TRaMX4yinp1jXDjBi5qljDXH8g8n1BS41TG6732MaGJkFHXJiAqssH/jt +8o7M9HOLLhCD1qBxDZc2Nq8SUSmYkfnLvBGpig8/ps/v/WTfMF+CYeOBKk5tPnR/Ztr FAqw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:in-reply-to:content-disposition:mime-version :references:message-id:subject:cc:to:from:date:dkim-signature; bh=jrj8+mZSwnWirQV8+7eqsdj9hbVY3/p3l44vFnIombE=; b=JGHfSWjT/5tlw475rZjAoWnyoQdVpmnygHLvVvJxTfdHXA8ft9Hprdiwk408OYd+xl 0kcEJyouz8J8lbdj7vtP37KTRWLzu8YofqGAFa95rucMUDarDbAK9CioBATrFAwp/AeN q1LR5OZrjWd/eZrjbsNSQcU+ySV5yYhqfqlUm1Fx3B7JRWe4TzcCI67dqN2SX5JGhK3j JlnaMHq89pGvE59tSORaibP7ZVUsYCWqxROILkY9yvAgGNhFpEr8sI0ZJl7dB43BZEDk xNkWsXU66DLw0W3WwkQ1Z2ky5SHZ3I2i/Rt3LfBWMkeQUYFD4Vey+UnP4AevPjdqMrcX +sJQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YaOC4DvV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 8si3078440pfp.210.2022.01.31.03.52.39; Mon, 31 Jan 2022 03:52:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=YaOC4DvV; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235429AbiA2AfT (ORCPT + 99 others); Fri, 28 Jan 2022 19:35:19 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40070 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234059AbiA2AfO (ORCPT ); Fri, 28 Jan 2022 19:35:14 -0500 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 504C7C061714 for ; Fri, 28 Jan 2022 16:35:14 -0800 (PST) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id E161860A66 for ; Sat, 29 Jan 2022 00:35:13 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 350A9C340E7; Sat, 29 Jan 2022 00:35:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1643416513; bh=kw+3OTuPDX3/tG8tmhcjVaDk/mA/bOZLCX0XvOcKmD4=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=YaOC4DvVe8kU3LsMjzXMw9wjm5SiYfjaXhHKNuthOgxNYw9ArzXaEVQPqh0wNlQ7s ZoYEfSaoc8fjwbltCZQkywbTTmnO+n+n5rj/ySoSTjp3oDH7KDJKYvkorLiJIMVzxN BfXpBVA7IN1htEKssXqfgUZnD+xclxAZgyW0I353BjSavykv0S4Kt49qb18xbOGG8u 3EwG9XkURp2V9Butaz+BcMDRAGB+j973hWaD4Se1csufGfa9+vW3E+Xz0Hx95UV7Vo iKJDOawtMg6v0jqX8CfddBzhTAPiQ+HW0XHDT6t8OqTxrC1oZtqkPqIFn6x1XboEzz i2TNzanbRPmtg== Date: Fri, 28 Jan 2022 16:35:11 -0800 From: Jaegeuk Kim To: Chao Yu Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org Subject: Re: [PATCH] f2fs: don't check IPU policy during file defragment Message-ID: References: <20220128091920.1556480-1-chao@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20220128091920.1556480-1-chao@kernel.org> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 01/28, Chao Yu wrote: > Once IPU policy is enabled in some cases: > a) f2fs forces to use F2FS_IPU_FORCE in a small-sized volume > b) user configures IPU policy via sysfs It's contradictory to each other. How about just letting users decide to do what they want to do? IOWs, if user wants to do defrag, they should change ipu_policy on the fly. > > Then we may fail to defragment file via ioctl due to IPU policy check, > it doesn't make sense, so let's change to use IPU policy for common > data writeback, rather than for specific data writeback, e.g. GC, > defragment, and so on. > > Signed-off-by: Chao Yu > --- > fs/f2fs/data.c | 15 ++++++++++----- > fs/f2fs/f2fs.h | 3 ++- > fs/f2fs/file.c | 17 ++++++++++------- > 3 files changed, 22 insertions(+), 13 deletions(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 0f124e8de1d4..bce7ecac8976 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -2530,6 +2530,9 @@ bool f2fs_should_update_outplace(struct inode *inode, struct f2fs_io_info *fio) > if (is_inode_flag_set(inode, FI_ALIGNED_WRITE)) > return true; > > + if (is_inode_flag_set(inode, FI_DEFRAG_PROCESS)) > + return true; > + > if (fio) { > if (page_private_gcing(fio->page)) > return true; > @@ -3154,8 +3157,8 @@ static int __f2fs_write_data_pages(struct address_space *mapping, > f2fs_available_free_memory(sbi, DIRTY_DENTS)) > goto skip_write; > > - /* skip writing during file defragment */ > - if (is_inode_flag_set(inode, FI_DO_DEFRAG)) > + /* skip writing in file defragment preparing stage */ > + if (is_inode_flag_set(inode, FI_DEFRAG_PREPARE)) > goto skip_write; > > trace_f2fs_writepages(mapping->host, wbc, DATA); > @@ -3733,7 +3736,7 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk, > f2fs_allocate_new_section(sbi, CURSEG_COLD_DATA_PINNED, false); > f2fs_unlock_op(sbi); > > - set_inode_flag(inode, FI_DO_DEFRAG); > + set_inode_flag(inode, FI_DEFRAG_PREPARE); > > for (blkofs = 0; blkofs < blk_per_sec; blkofs++) { > struct page *page; > @@ -3750,9 +3753,11 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk, > f2fs_put_page(page, 1); > } > > - clear_inode_flag(inode, FI_DO_DEFRAG); > + clear_inode_flag(inode, FI_DEFRAG_PREPARE); > > + set_inode_flag(inode, FI_DEFRAG_PROCESS); > ret = filemap_fdatawrite(inode->i_mapping); > + clear_inode_flag(inode, FI_DEFRAG_PROCESS); > > f2fs_up_write(&sbi->pin_sem); > > @@ -3761,7 +3766,7 @@ static int f2fs_migrate_blocks(struct inode *inode, block_t start_blk, > } > > done: > - clear_inode_flag(inode, FI_DO_DEFRAG); > + clear_inode_flag(inode, FI_DEFRAG_PREPARE); > clear_inode_flag(inode, FI_ALIGNED_WRITE); > > filemap_invalidate_unlock(inode->i_mapping); > diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h > index 8178a9152e49..4b905059a81e 100644 > --- a/fs/f2fs/f2fs.h > +++ b/fs/f2fs/f2fs.h > @@ -733,7 +733,8 @@ enum { > FI_DROP_CACHE, /* drop dirty page cache */ > FI_DATA_EXIST, /* indicate data exists */ > FI_INLINE_DOTS, /* indicate inline dot dentries */ > - FI_DO_DEFRAG, /* indicate defragment is running */ > + FI_DEFRAG_PREPARE, /* indicate defragment is preparing */ > + FI_DEFRAG_PROCESS, /* indicate defragment is processing */ > FI_DIRTY_FILE, /* indicate regular/symlink has dirty pages */ > FI_PREALLOCATED_ALL, /* all blocks for write were preallocated */ > FI_HOT_DATA, /* indicate file is hot */ > diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > index 6ccdd6e347e2..696f4a175228 100644 > --- a/fs/f2fs/file.c > +++ b/fs/f2fs/file.c > @@ -2559,10 +2559,6 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi, > bool fragmented = false; > int err; > > - /* if in-place-update policy is enabled, don't waste time here */ > - if (f2fs_should_update_inplace(inode, NULL)) > - return -EINVAL; > - > pg_start = range->start >> PAGE_SHIFT; > pg_end = (range->start + range->len) >> PAGE_SHIFT; > > @@ -2570,6 +2566,11 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi, > > inode_lock(inode); > > + if (f2fs_is_pinned_file(inode)) { > + err = -EINVAL; > + goto out; > + } > + > /* writeback all dirty pages in the range */ > err = filemap_write_and_wait_range(inode->i_mapping, range->start, > range->start + range->len - 1); > @@ -2651,7 +2652,7 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi, > goto check; > } > > - set_inode_flag(inode, FI_DO_DEFRAG); > + set_inode_flag(inode, FI_DEFRAG_PREPARE); > > idx = map.m_lblk; > while (idx < map.m_lblk + map.m_len && cnt < blk_per_seg) { > @@ -2676,14 +2677,16 @@ static int f2fs_defragment_range(struct f2fs_sb_info *sbi, > if (map.m_lblk < pg_end && cnt < blk_per_seg) > goto do_map; > > - clear_inode_flag(inode, FI_DO_DEFRAG); > + clear_inode_flag(inode, FI_DEFRAG_PREPARE); > > + set_inode_flag(inode, FI_DEFRAG_PROCESS); > err = filemap_fdatawrite(inode->i_mapping); > + clear_inode_flag(inode, FI_DEFRAG_PROCESS); > if (err) > goto out; > } > clear_out: > - clear_inode_flag(inode, FI_DO_DEFRAG); > + clear_inode_flag(inode, FI_DEFRAG_PREPARE); > out: > inode_unlock(inode); > if (!err) > -- > 2.25.1