Received: by 2002:a05:7412:8d10:b0:f3:1519:9f41 with SMTP id bj16csp4343383rdb; Mon, 11 Dec 2023 17:05:28 -0800 (PST) X-Google-Smtp-Source: AGHT+IF6h1j9ZduNk462u2qxHoySx9qwHyk62gRvE4rnVgQV3Kh+OI5HS1N6DrY+et8+1iZ3imdk X-Received: by 2002:a05:6a00:6706:b0:6ce:50bf:45ef with SMTP id hm6-20020a056a00670600b006ce50bf45efmr2144697pfb.43.1702343127779; Mon, 11 Dec 2023 17:05:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1702343127; cv=none; d=google.com; s=arc-20160816; b=HLfHKK1+zT3khFHo8z3xX/9Jc82SSEV4YYqmgaom5hnrQMCgz0O8OHeJjxbD+BcoyR 5CbWMrtIlVYCoUY14GKs4Ccw15SOGdlK69+sS3Ecy4+QpAHYL62OAyQFoEJC+BER7tMJ BVjQU0gOarVr1yOhjxCF/RphrEAQ4GUD16frZA9ZS//WxfVxGgTlolti3Y8QJOLTeMo9 yea91KJGdbPn6ctBZLr3WlkSUafeRZMazZhJaTysVcHUwsfJDL8UhiaJz2m3NiNiJgsI 1gcGawSiUOAF9p23oet8ZUGm84A6IC7NFiEiZ7Wsz9Me8pj3XIY0sscE+GSHc/hTCn5k FVXQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id:dkim-signature; bh=mrXmipuWF8nzBE+uBUCPkjoBYxpVRmH2Fk3+w/+rlLA=; fh=1D7eQ/0rc+iU6BAcs/KVKWP4G7WgjJ9VzUdfNwtKJ+I=; b=JrgeM35wk2weY/wTAUJi3Yxp76gL4uJdzam+XZUmMREbw9F3458Sn5v2T4fF9mj5bz hCezBhNFRrzNPCt/6S3JmsstbF7P4rOkeoHkbLR/viJhKpzYj41+gT9oMww077zwSsTW GSDI0VFJZ1er26LtZ4rlCK82jqRMRmxpCn+xdC3KCgTLAjDjNztFfIZ1XSjAMAWF+9+c iDXSq92HtGQmUO6sdZ9oIF6YkmwLJL3uSe7+xNh0ysWWv49ZPAwaN4HYaaBrPYXq96aT 81+kX89DV975SlLK+0vVA8eHED6PUPWh1CL5veECOIX2wf89E1H8/6DWulXwjXIxVQ86 IG0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=S8nkUR+e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 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 morse.vger.email (morse.vger.email. [23.128.96.31]) by mx.google.com with ESMTPS id j2-20020a056a00174200b006cde2b3ccffsi6892844pfc.32.2023.12.11.17.05.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 11 Dec 2023 17:05:27 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) client-ip=23.128.96.31; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=S8nkUR+e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.31 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by morse.vger.email (Postfix) with ESMTP id A011F80D0CBE; Mon, 11 Dec 2023 17:05:25 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at morse.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345643AbjLLBFM (ORCPT + 99 others); Mon, 11 Dec 2023 20:05:12 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40468 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345638AbjLLBFL (ORCPT ); Mon, 11 Dec 2023 20:05:11 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 42D12AB for ; Mon, 11 Dec 2023 17:05:18 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 148FEC433C8; Tue, 12 Dec 2023 01:05:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1702343117; bh=gdeYmzLGW6q5hnej08l9tQkVl0oulGvc8W5Uv0V0XJ8=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=S8nkUR+eJnFc4803EYqwm1jnlA4pKdl+goIF7OpuC/PzMZpNlElrOu6B5a8nSHAuU g96ltQKNBehLQlDsesGAaTn+vxLfhhRrQcmXBi67Ggd+D4BrNnM4tdMr0ejRskWPyb VeI/LsDc4hwOS3QGi32Ul1F8kjbb4/EhrnlNLkT3rhot5/3ovNLPgj5/PM+MBIHSSx xrF+yE6qqZNLUVxX3yublQapAxkv9aztESZmnOtsNCOFuRyEWVXsJOGEEByiA/snF5 kZ72AETixuOiR9pOmZ1Z5iZfeeR7VgxYu4QUGiXTlYWnW0iHh+YPDRqgoxU8cJbbde +3L1bv95hg13g== Message-ID: <5884e300-5384-4a49-9f8d-8cced50f4e6d@kernel.org> Date: Tue, 12 Dec 2023 09:05:13 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 5/6] f2fs: fix to restrict condition of compress inode conversion Content-Language: en-US To: Jaegeuk Kim Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org References: <20231210113547.3412782-1-chao@kernel.org> <20231210113547.3412782-5-chao@kernel.org> From: Chao Yu In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on morse.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (morse.vger.email [0.0.0.0]); Mon, 11 Dec 2023 17:05:25 -0800 (PST) On 2023/12/12 6:11, Jaegeuk Kim wrote: > On 12/10, Chao Yu wrote: >> This patch adds i_size check during compress inode conversion in order >> to avoid .page_mkwrite races w/ conversion. > > Which race condition do you see? Something like: - f2fs_setflags_common - check S_ISREG && F2FS_HAS_BLOCKS - mkwrite - f2fs_get_block_locked : update metadata in old inode's disk layout - set_compress_context Thanks, > >> >> Fixes: 4c8ff7095bef ("f2fs: support data compression") >> Signed-off-by: Chao Yu >> --- >> fs/f2fs/f2fs.h | 8 +++++++- >> fs/f2fs/file.c | 5 ++--- >> 2 files changed, 9 insertions(+), 4 deletions(-) >> >> diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h >> index 65294e3b0bef..c9b8a1953913 100644 >> --- a/fs/f2fs/f2fs.h >> +++ b/fs/f2fs/f2fs.h >> @@ -4397,13 +4397,19 @@ static inline int set_compress_context(struct inode *inode) >> #endif >> } >> >> +static inline bool inode_has_data(struct inode *inode) >> +{ >> + return (S_ISREG(inode->i_mode) && >> + (F2FS_HAS_BLOCKS(inode) || i_size_read(inode))); >> +} >> + >> static inline bool f2fs_disable_compressed_file(struct inode *inode) >> { >> struct f2fs_inode_info *fi = F2FS_I(inode); >> >> if (!f2fs_compressed_file(inode)) >> return true; >> - if (S_ISREG(inode->i_mode) && F2FS_HAS_BLOCKS(inode)) >> + if (inode_has_data(inode)) >> return false; >> >> fi->i_flags &= ~F2FS_COMPR_FL; >> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c >> index 1a3c29a9a6a0..8af4b29c3e1a 100644 >> --- a/fs/f2fs/file.c >> +++ b/fs/f2fs/file.c >> @@ -1922,8 +1922,7 @@ static int f2fs_setflags_common(struct inode *inode, u32 iflags, u32 mask) >> >> f2fs_down_write(&F2FS_I(inode)->i_sem); >> if (!f2fs_may_compress(inode) || >> - (S_ISREG(inode->i_mode) && >> - F2FS_HAS_BLOCKS(inode))) { >> + inode_has_data(inode)) { >> f2fs_up_write(&F2FS_I(inode)->i_sem); >> return -EINVAL; >> } >> @@ -3996,7 +3995,7 @@ static int f2fs_ioc_set_compress_option(struct file *filp, unsigned long arg) >> goto out; >> } >> >> - if (F2FS_HAS_BLOCKS(inode)) { >> + if (inode_has_data(inode)) { >> ret = -EFBIG; >> goto out; >> } >> -- >> 2.40.1