Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp1179516ybe; Mon, 2 Sep 2019 16:08:41 -0700 (PDT) X-Google-Smtp-Source: APXvYqza/CYpY+N/vIKX5KgJqliYX6FfEnIYY2g2B3P4y9ahCwaEbq78yif95PA8ZlZfSqgh05bT X-Received: by 2002:a63:2b84:: with SMTP id r126mr27894424pgr.308.1567465721499; Mon, 02 Sep 2019 16:08:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1567465721; cv=none; d=google.com; s=arc-20160816; b=nLoWsEFff+2FzmhZjaVgPuNTNZpdZJo9GoISWb12NJuS5NEjX7hgFzCTqHaGWuqziB bh5doeR4ampE1z05kAn2Ox8aZpsZOaXVnzTcUMek0Yq8+L1uAqKIJsvEbQ/ZHd1MSylS Fvlk8uVVBYDi118lX8BsKNhf160ME214mj0A9xkY2AWuTLljaBX4abkWoXIrnv/j98yn ayqbOHjagqhpPtYhJa/JvXqXAGHZ346pR3MsszuL8ZTdNR6Jc/FtDDAQOri6jlGp+omu AeG3P6yXHqxYULVNitqqDZXN3tn8bqsNCf1o6XM6sUjqMmwXLwDmER3zzeyDXKBUF92E w2rw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=SNC1VQHbylAlj1129c/IOpeaXEjMHFid7p/JY04JTbk=; b=VZoWjNp7fd5Zu+witcg/cXI7qeHKijbtzXaAFwQwc0vAQPXVxYPrbXUEjQqeKmd1lE EPyo4llPI44yR0ZGSQsUN9eCnPaFhzux0/AAXRVCAWf1SJCEQLVHt/Qb6sEZV5f97YN8 k5pVabtk27exUK4JlDFXSjY+GRO0C5cOi3aC+rsX6C6wWr+FGZ851qXw3msIMLyhiQpO 1serwWvcMkdj2NTdgMfYLVtH9QK94QOeaWrDoJMhB/cquID4TzZQDFbHNV0VbABVRLJR 2CKScpglprDiPHPQkE++rwl6Fdnu6E4mYijZSJl5DiYXS47fflSsBXAN3xFQyTtGsaRs 9ElA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=J8t+x8kB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id t19si1726156pfe.197.2019.09.02.16.08.25; Mon, 02 Sep 2019 16:08:41 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=J8t+x8kB; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S1727257AbfIBXHD (ORCPT + 99 others); Mon, 2 Sep 2019 19:07:03 -0400 Received: from mail.kernel.org ([198.145.29.99]:51706 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726796AbfIBXHC (ORCPT ); Mon, 2 Sep 2019 19:07:02 -0400 Received: from localhost (unknown [104.132.0.81]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 55FBB216C8; Mon, 2 Sep 2019 23:07:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1567465621; bh=JfnJi+MoWLuaNhiDMD7JAvvU1XldinmEDk13pza+dm0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=J8t+x8kBt3VsNTlaXd2EPQWaWlefuHZQxk+zYNbZuBljRl/Nog2uiezGpBo9YAYND xfJX5KPEFjz0J+6cRBnf+cz6i9c4QbGEob4cDq0AcYWq5WasG5wqjC21etQe/jx3RJ l8mu5Err+dbmmarEbCtMkiR29JIZD69H4X2szOLw= Date: Mon, 2 Sep 2019 16:07:00 -0700 From: Jaegeuk Kim To: Chao Yu Cc: linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net Subject: Re: [f2fs-dev] [PATCH] f2fs: convert inline_data in prior to i_size_write Message-ID: <20190902230700.GE71929@jaegeuk-macbookpro.roam.corp.google.com> References: <20190830153453.24684-1-jaegeuk@kernel.org> <20190901072529.GB49907@jaegeuk-macbookpro.roam.corp.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.8.2 (2017-04-18) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/02, Chao Yu wrote: > On 2019/9/1 15:25, Jaegeuk Kim wrote: > > On 08/31, Chao Yu wrote: > >> On 2019/8/30 23:34, Jaegeuk Kim wrote: > >>> This can guarantee inline_data has smaller i_size. > >> > >> So I guess "f2fs: fix to avoid corruption during inline conversion" didn't fix > >> such corruption right, I guess checkpoint & SPO before i_size recovery will > >> cause this issue? > >> > >> err = f2fs_convert_inline_inode(inode); > >> if (err) { > >> > >> --> > > > > Yup, I think so. > > Oh, we'd better to avoid wrong fixing patch as much as possible, so what about > letting me change that patch to just fix error path of > f2fs_convert_inline_page() by adding missing f2fs_truncate_data_blocks_range()? Could you post another patch? I'm okay to combine them. > > Meanwhile I need to add below 'Fixes' tag line: > 7735730d39d7 ("f2fs: fix to propagate error from __get_meta_page()") > > > And if possible, could you add: > > In below call path, if we failed to convert inline inode, inline inode may have > wrong i_size which is larger than max inline size. > - f2fs_setattr > - truncate_setsize > - f2fs_convert_inline_inode > > Fixes: 0cab80ee0c9e ("f2fs: fix to convert inline inode in ->setattr") > > > > >> > >> /* recover old i_size */ > >> i_size_write(inode, old_size); > >> return err; > >> > >>> > >>> Signed-off-by: Jaegeuk Kim > >> > >> Reviewed-by: Chao Yu > >> > >>> --- > >>> fs/f2fs/file.c | 25 +++++++++---------------- > >>> 1 file changed, 9 insertions(+), 16 deletions(-) > >>> > >>> diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c > >>> index 08caaead6f16..a43193dd27cb 100644 > >>> --- a/fs/f2fs/file.c > >>> +++ b/fs/f2fs/file.c > >>> @@ -815,14 +815,20 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr) > >>> > >>> if (attr->ia_valid & ATTR_SIZE) { > >>> loff_t old_size = i_size_read(inode); > >>> - bool to_smaller = (attr->ia_size <= old_size); > >>> + > >>> + if (attr->ia_size > MAX_INLINE_DATA(inode)) { > >>> + /* should convert inline inode here */ > >> > >> Would it be better: > >> > >> /* should convert inline inode here in piror to i_size_write to avoid > >> inconsistent status in between inline flag and i_size */ > > > > Put like this. > > > > + /* > > + * should convert inline inode before i_size_write to > > + * keep smaller than inline_data size with inline flag. > > + */ > > Better, :) > > thanks, > > > > >> > >> Thanks, > >> > >>> + err = f2fs_convert_inline_inode(inode); > >>> + if (err) > >>> + return err; > >>> + } > >>> > >>> down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); > >>> down_write(&F2FS_I(inode)->i_mmap_sem); > >>> > >>> truncate_setsize(inode, attr->ia_size); > >>> > >>> - if (to_smaller) > >>> + if (attr->ia_size <= old_size) > >>> err = f2fs_truncate(inode); > >>> /* > >>> * do not trim all blocks after i_size if target size is > >>> @@ -830,24 +836,11 @@ int f2fs_setattr(struct dentry *dentry, struct iattr *attr) > >>> */ > >>> up_write(&F2FS_I(inode)->i_mmap_sem); > >>> up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); > >>> - > >>> if (err) > >>> return err; > >>> > >>> - if (!to_smaller) { > >>> - /* should convert inline inode here */ > >>> - if (!f2fs_may_inline_data(inode)) { > >>> - err = f2fs_convert_inline_inode(inode); > >>> - if (err) { > >>> - /* recover old i_size */ > >>> - i_size_write(inode, old_size); > >>> - return err; > >>> - } > >>> - } > >>> - inode->i_mtime = inode->i_ctime = current_time(inode); > >>> - } > >>> - > >>> down_write(&F2FS_I(inode)->i_sem); > >>> + inode->i_mtime = inode->i_ctime = current_time(inode); > >>> F2FS_I(inode)->last_disk_size = i_size_read(inode); > >>> up_write(&F2FS_I(inode)->i_sem); > >>> } > >>> > > . > >