Received: by 2002:a05:6a10:17d3:0:0:0:0 with SMTP id hz19csp2751518pxb; Tue, 13 Apr 2021 09:18:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwpTQ5abK9XT0tqwIvCh7J7T4/bqvxEN+CRjgLttX4L1zNkwM3n+Ni8bYKeRvP21r0A9fmJ X-Received: by 2002:a50:d0d8:: with SMTP id g24mr22724595edf.290.1618330708324; Tue, 13 Apr 2021 09:18:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1618330708; cv=none; d=google.com; s=arc-20160816; b=eZQkZs3Mf9zApaYKn6tlRg5Z5GUvrjmA6a6CcY5rH4PEpSnWFUQSe8BCeM3N64LAlh 676we1zf3kvcMevo1WhoY18ZE0iyStMDhwZ+paOyjePLRpADarmyBNZDVzOTYY+4uRrL OxML3GFMog+QU+nSokGsEqmJD4vXeFbhQOFpvGBbXiOS+U17vIX+BHCzZrXfth6HE0CA KN+yIctBcMoowaWNSF7E5GQajHA9KgJ4kiRyliaESuM5hgQ9+RyzK2nWeGcxyUQckTy+ 5wTXm9OCQSBjyfxOjGxvzMGCOxm3ESpN67uWInITkiuDeLv3JufHV4iXklnOJ08mnWSt JYHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=xM8uS+J8V1VHMKQY1QWr32FpL4wyhBRr//OTVwF3ohs=; b=LbNLmNjfX2x8f2+FcHkjwJM4eeUImajkAye+Tq7LOkz/hrF0d+1y4cdNd1jwPS0bN+ uY4w4PA/5CFPnRlYZ/Z2+WOt86TgdVyjWmZ9PfPW7M1SEdSPce/uljZO/7XqgEfNYKX/ jXECXVqN/XhbHzWh9jJaOac1fhUijMFnleX9/Khn2C+rqJ94HHRKHuV5IxAw1JihB5tv qE946qGAplRE9QnzjXMrE7ahThbojOaR2wIrmJIC1c4/HuURFd/T94AioAjRcazyHL43 4ljlszNocbIyx3r3/+XMtRVKB4+ZoaeMKHi4oChuPNF0HHFhlGgqn1BKOCJiYf5Dm2R/ 1KLQ== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r3si11512755eda.505.2021.04.13.09.18.04; Tue, 13 Apr 2021 09:18:28 -0700 (PDT) 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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231880AbhDMJ4o (ORCPT + 99 others); Tue, 13 Apr 2021 05:56:44 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:15672 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231462AbhDMJ4m (ORCPT ); Tue, 13 Apr 2021 05:56:42 -0400 Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga04-in.huawei.com (SkyGuard) with ESMTP id 4FKLX83QYbznZL7; Tue, 13 Apr 2021 17:53:28 +0800 (CST) Received: from [10.136.110.154] (10.136.110.154) by smtp.huawei.com (10.3.19.206) with Microsoft SMTP Server (TLS) id 14.3.498.0; Tue, 13 Apr 2021 17:56:18 +0800 Subject: Re: [f2fs-dev] [PATCH v2] f2fs: fix to avoid touching checkpointed data in get_victim() To: Jaegeuk Kim , Chao Yu CC: , References: <20210324031828.67133-1-yuchao0@huawei.com> <2dfb085b-80ce-050b-5650-986675a07488@huawei.com> <66e0a225-7f52-a33e-ccd6-e7bfa1067ed1@kernel.org> From: Chao Yu Message-ID: Date: Tue, 13 Apr 2021 17:56:18 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="windows-1252"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.136.110.154] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2021/4/13 10:59, Jaegeuk Kim wrote: > On 04/11, Chao Yu wrote: >> Hi Jaegeuk, >> >> Could you please help to merge below cleanup diff into original patch? >> or merge this separately if it is too late since it is near rc7. > > I didn't review this tho, this gives an error in xfstests/083. > From 59c2bd34fb0c77bcede2af7e5d308c014c544a1e Mon Sep 17 00:00:00 2001 From: Chao Yu Date: Sun, 11 Apr 2021 14:29:34 +0800 Subject: [PATCH] f2fs: avoid duplicated codes for cleanup f2fs_segment_has_free_slot() was copied and modified from __next_free_blkoff(), they are almost the same, clean up to reuse common code as much as possible. Signed-off-by: Chao Yu --- - fix to assign .next_blkoff in change_curseg() fs/f2fs/segment.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/fs/f2fs/segment.c b/fs/f2fs/segment.c index d6c6c13feb43..6e740ecf0814 100644 --- a/fs/f2fs/segment.c +++ b/fs/f2fs/segment.c @@ -2638,22 +2638,20 @@ static void new_curseg(struct f2fs_sb_info *sbi, int type, bool new_sec) curseg->alloc_type = LFS; } -static void __next_free_blkoff(struct f2fs_sb_info *sbi, - struct curseg_info *seg, block_t start) +static int __next_free_blkoff(struct f2fs_sb_info *sbi, + int segno, block_t start) { - struct seg_entry *se = get_seg_entry(sbi, seg->segno); + struct seg_entry *se = get_seg_entry(sbi, segno); int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); unsigned long *target_map = SIT_I(sbi)->tmp_map; unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; unsigned long *cur_map = (unsigned long *)se->cur_valid_map; - int i, pos; + int i; for (i = 0; i < entries; i++) target_map[i] = ckpt_map[i] | cur_map[i]; - pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start); - - seg->next_blkoff = pos; + return __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, start); } /* @@ -2665,26 +2663,16 @@ static void __refresh_next_blkoff(struct f2fs_sb_info *sbi, struct curseg_info *seg) { if (seg->alloc_type == SSR) - __next_free_blkoff(sbi, seg, seg->next_blkoff + 1); + seg->next_blkoff = + __next_free_blkoff(sbi, seg->segno, + seg->next_blkoff + 1); else seg->next_blkoff++; } bool f2fs_segment_has_free_slot(struct f2fs_sb_info *sbi, int segno) { - struct seg_entry *se = get_seg_entry(sbi, segno); - int entries = SIT_VBLOCK_MAP_SIZE / sizeof(unsigned long); - unsigned long *target_map = SIT_I(sbi)->tmp_map; - unsigned long *ckpt_map = (unsigned long *)se->ckpt_valid_map; - unsigned long *cur_map = (unsigned long *)se->cur_valid_map; - int i, pos; - - for (i = 0; i < entries; i++) - target_map[i] = ckpt_map[i] | cur_map[i]; - - pos = __find_rev_next_zero_bit(target_map, sbi->blocks_per_seg, 0); - - return pos < sbi->blocks_per_seg; + return __next_free_blkoff(sbi, segno, 0) < sbi->blocks_per_seg; } /* @@ -2712,7 +2700,7 @@ static void change_curseg(struct f2fs_sb_info *sbi, int type, bool flush) reset_curseg(sbi, type, 1); curseg->alloc_type = SSR; - __next_free_blkoff(sbi, curseg, 0); + curseg->next_blkoff = __next_free_blkoff(sbi, curseg->segno, 0); sum_page = f2fs_get_sum_page(sbi, new_segno); if (IS_ERR(sum_page)) { -- 2.29.2