Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753424AbdCMNqB (ORCPT ); Mon, 13 Mar 2017 09:46:01 -0400 Received: from mail-it0-f66.google.com ([209.85.214.66]:33081 "EHLO mail-it0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753397AbdCMNpb (ORCPT ); Mon, 13 Mar 2017 09:45:31 -0400 Subject: Re: [f2fs-dev] [PATCH v2] f2fs: restrict write IO alignment condition To: Chao Yu , jaegeuk@kernel.org References: <20170313130216.108395-1-yuchao0@huawei.com> Cc: chao@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, Kinglong Mee From: Kinglong Mee Message-ID: Date: Mon, 13 Mar 2017 21:45:08 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <20170313130216.108395-1-yuchao0@huawei.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2322 Lines: 72 On 3/13/2017 21:02, Chao Yu wrote: > We should only align start offset of bio with defined IO_SIZE for below > conditions: > a. mode=lfs mount option > b. write IOs > c. Out-place-update > d. non-meta pages > > Signed-off-by: Chao Yu > --- > fs/f2fs/data.c | 10 +++++++--- > 1 file changed, 7 insertions(+), 3 deletions(-) > > diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c > index 1375fef11146..53fe79c70406 100644 > --- a/fs/f2fs/data.c > +++ b/fs/f2fs/data.c > @@ -190,6 +190,9 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi, > current->plug && (type == DATA || type == NODE)) > blk_finish_plug(current->plug); > > + if (!test_opt(sbi, LFS)) > + goto submit_io; > + > if (type != DATA && type != NODE) > goto submit_io; Is the position of checking LFS here right? I have a plan of change the code order as, diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c index 2ab5ca0..698dbf3 100644 --- a/fs/f2fs/data.c +++ b/fs/f2fs/data.c @@ -186,13 +186,12 @@ static inline void __submit_bio(struct f2fs_sb_info *sbi, if (!is_read_io(bio_op(bio))) { unsigned int start; - if (f2fs_sb_mounted_blkzoned(sbi->sb) && - current->plug && (type == DATA || type == NODE)) - blk_finish_plug(current->plug); - if (type != DATA && type != NODE) goto submit_io; + if (f2fs_sb_mounted_blkzoned(sbi->sb) && current->plug) + blk_finish_plug(current->plug); + start = bio->bi_iter.bi_size >> F2FS_BLKSIZE_BITS; start %= F2FS_IO_SIZE(sbi); thanks, Kinglong Mee > > @@ -395,11 +398,12 @@ int f2fs_submit_page_mbio(struct f2fs_io_info *fio) > __submit_merged_bio(io); > alloc_new: > if (io->bio == NULL) { > - if ((fio->type == DATA || fio->type == NODE) && > + if (test_opt(sbi, LFS) && > + !is_read && (fio->type == DATA || fio->type == NODE) && > fio->new_blkaddr & F2FS_IO_SIZE_MASK(sbi)) { > err = -EAGAIN; > - if (!is_read) > - dec_page_count(sbi, WB_DATA_TYPE(bio_page)); > + f2fs_bug_on(sbi, fio->new_blkaddr == fio->old_blkaddr); > + dec_page_count(sbi, WB_DATA_TYPE(bio_page)); > goto out_fail; > } > io->bio = __bio_alloc(sbi, fio->new_blkaddr, >