From patchwork Sat Aug 26 11:46:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunlong Song X-Patchwork-Id: 9923477 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 83F3A603FA for ; Sat, 26 Aug 2017 11:47:49 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 3D3D8285A2 for ; Sat, 26 Aug 2017 11:47:48 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 31EE2285C9; Sat, 26 Aug 2017 11:47:48 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F05CD285A2 for ; Sat, 26 Aug 2017 11:47:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752258AbdHZLrd (ORCPT ); Sat, 26 Aug 2017 07:47:33 -0400 Received: from szxga04-in.huawei.com ([45.249.212.190]:5466 "EHLO szxga04-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752129AbdHZLrd (ORCPT ); Sat, 26 Aug 2017 07:47:33 -0400 Received: from 172.30.72.60 (EHLO DGGEMS402-HUB.china.huawei.com) ([172.30.72.60]) by dggrg04-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id DFX98530; Sat, 26 Aug 2017 19:47:27 +0800 (CST) Received: from huawei.com (10.107.193.250) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.301.0; Sat, 26 Aug 2017 19:47:17 +0800 From: Yunlong Song To: , , , , CC: , , , , Subject: [PATCH] f2fs: collect prefree segments to avoild write checkpoint fail Date: Sat, 26 Aug 2017 19:46:59 +0800 Message-ID: <1503748019-152845-1-git-send-email-yunlong.song@huawei.com> X-Mailer: git-send-email 1.8.5.2 MIME-Version: 1.0 X-Originating-IP: [10.107.193.250] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090202.59A15FD1.0006, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: e335f0c5c6269020ec02f1b4e23a70b9 Sender: linux-fsdevel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fsdevel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In come corner case, the reserved segments are used to do gc, and there are not enough free segments for write checkpoint to finish its job, then the gc process will fail to change the prefree segments to free segments. Signed-off-by: Yunlong Song --- fs/f2fs/gc.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c index cd147e7..c8a828f 100644 --- a/fs/f2fs/gc.c +++ b/fs/f2fs/gc.c @@ -1056,6 +1056,13 @@ int f2fs_gc(struct f2fs_sb_info *sbi, bool sync, if (!sync) { if (has_not_enough_free_secs(sbi, sec_freed, 0)) { segno = NULL_SEGNO; + if (prefree_segments(sbi) && + has_not_enough_free_secs(sbi, + reserved_sections(sbi), 0)) { + ret = write_checkpoint(sbi, &cpc); + if (ret) + goto stop; + } goto gc_more; }