From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yunlong Song Subject: Re: [PATCH] f2fs: let __get_victim successfully get a segno in corner case Date: Mon, 17 Jul 2017 09:51:44 +0800 Message-ID: <596C1830.8040202@huawei.com> References: <1500033432-57620-1-git-send-email-yunlong.song@huawei.com> <20170716010934.GC51202@jaegeuk-macbookpro.roam.corp.google.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from sog-mx-4.v43.ch3.sourceforge.com ([172.29.43.194] helo=mx.sourceforge.net) by sfs-ml-3.v29.ch3.sourceforge.com with esmtp (Exim 4.76) (envelope-from ) id 1dWvCz-0005DS-TP for linux-f2fs-devel@lists.sourceforge.net; Mon, 17 Jul 2017 01:52:25 +0000 Received: from szxga03-in.huawei.com ([45.249.212.189]) by sog-mx-4.v43.ch3.sourceforge.com with esmtps (TLSv1:RC4-SHA:128) (Exim 4.76) id 1dWvCv-0001iW-UC for linux-f2fs-devel@lists.sourceforge.net; Mon, 17 Jul 2017 01:52:25 +0000 In-Reply-To: <20170716010934.GC51202@jaegeuk-macbookpro.roam.corp.google.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linux-f2fs-devel-bounces@lists.sourceforge.net To: Jaegeuk Kim Cc: chao@kernel.org, linux-kernel@vger.kernel.org, linux-f2fs-devel@lists.sourceforge.net, sylinux@163.com, linux-fsdevel@vger.kernel.org SGkgSmF5LAogICAgSW4gZmFjdO+8jHRoaXMgaXMgbm90ICJzdXBwb3NlIiBjYXNlIHlldCwgd2Ug aGF2ZSBhbHJlYWR5IG1ldCB0aGlzIHByb2JsZW0gc2V2ZXJhbCB0aW1lcyBpbiBzb21lIHRlc3Qg c3VpdHMgZm9yIGNvcm5lciBjYXNlLCBvciBJIGNhbm5vdCBub3RpY2UgdGhhdCB0aGlzIGNvdWxk IGhhcHBlbi4KCk9uIDIwMTcvNy8xNiA5OjA5LCBKYWVnZXVrIEtpbSB3cm90ZToKPiBIaSBZdW5s b25nLAo+Cj4gT24gMDcvMTQsIFl1bmxvbmcgU29uZyB3cm90ZToKPj4gU3VwcG9zZSB0aGF0IHRo ZSB2YWxpZCBibG9ja3Mgb2YgZWFjaCBzZWN0aW9uIGFyZSBhbGwgb3ZlciBzYmktPmZnZ2NfdGhy ZXNob2xkLAo+IEhvdyBhYm91dCBhZGRpbmcgYSBrZXJuZWwgbWVzc2FnZSBmaXJzdCB0byBkZXRl Y3QgeW91ciAqc3VwcG9zZWQqIHNjZWFucmlvPwo+IElmIHRoYXQgaGFwcGVucywgaXQnbGwgYmUg YSBzb3J0IG9mIGJ1ZyB3aGljaCB3ZSBoYXZlbid0IGFzc3VtZWQuCj4KPiBUaGFua3MsCj4KPj4g YW5kIGV2ZW4gaGFzX25vdF9lbm91Z2hfZnJlZV9zZWNzIGlzIHRydWUsIGYyZnNfZ2MgY2Fubm90 IGRvIGl0cyBqb2Igc2luY2UgdGhlCj4+IG5vX2ZnZ2NfY2FuZGlkYXRlIGFsd2F5cyByZXR1cm5z IHRydWUuIEFzIGEgcmVzdWx0LCB0aGUgcmVzZXJ2ZWQgc2VnbWVudHMgY2FuIGJlCj4+IHVzZWQg dXAsIGFuZCBmaW5hbGx5IHRoZXJlIGlzIG5vIGZyZWUgc2VnbWVudCBhdCBhbGwsIGFuZCBnZXRf bmV3X3NlZ21lbnQgY2Fubm90Cj4+IGdldCBhIGZyZWUgc2VnbWVudCwgZmlsZXN5c3RlbSB3aWxs IHRyYXAgaW50byBhIHdyb25nIHN0YXR1cy4KPj4KPj4gVG8gZml4IHRoaXMsIHdlIHJlY29yZCB0 aGUgc2Vnbm8gd2hpY2ggaGFzIGEgcm91Z2ggbWluaW11bSBjb3N0IGFuZCByZXR1cm4gaXQgdG8K Pj4gX19nZXRfdmljdGltIHRvIGNvbnRpbnVlIGYyZnNfZ2MncyBqb2IuCj4+Cj4+IFNpZ25lZC1v ZmYtYnk6IFl1bmxvbmcgU29uZyA8eXVubG9uZy5zb25nQGh1YXdlaS5jb20+Cj4+IC0tLQo+PiAg ZnMvZjJmcy9nYy5jICAgICAgfCAxOSArKysrKysrKysrKysrKy0tLS0tCj4+ICBmcy9mMmZzL3Nl Z21lbnQuaCB8IDE3ICsrKysrKysrKysrKysrLS0tCj4+ICAyIGZpbGVzIGNoYW5nZWQsIDI4IGlu c2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9mcy9mMmZzL2dj LmMgYi9mcy9mMmZzL2djLmMKPj4gaW5kZXggZmEzZDJlMi4uOTY1ZTc4MyAxMDA2NDQKPj4gLS0t IGEvZnMvZjJmcy9nYy5jCj4+ICsrKyBiL2ZzL2YyZnMvZ2MuYwo+PiBAQCAtMTc4LDYgKzE3OCw4 IEBAIHN0YXRpYyB2b2lkIHNlbGVjdF9wb2xpY3koc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLCBp bnQgZ2NfdHlwZSwKPj4gIAkJcC0+b2Zmc2V0ID0gMDsKPj4gIAllbHNlCj4+ICAJCXAtPm9mZnNl dCA9IFNJVF9JKHNiaSktPmxhc3RfdmljdGltW3AtPmdjX21vZGVdOwo+PiArCj4+ICsJcC0+bWlu X2Nvc3RfciA9IFVJTlRfTUFYOwo+PiAgfQo+PiAgCj4+ICBzdGF0aWMgdW5zaWduZWQgaW50IGdl dF9tYXhfY29zdChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+IEBAIC0xOTQsNyArMTk2LDcg QEAgc3RhdGljIHVuc2lnbmVkIGludCBnZXRfbWF4X2Nvc3Qoc3RydWN0IGYyZnNfc2JfaW5mbyAq c2JpLAo+PiAgCQlyZXR1cm4gMDsKPj4gIH0KPj4gIAo+PiAtc3RhdGljIHVuc2lnbmVkIGludCBj aGVja19iZ192aWN0aW1zKHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSkKPj4gK3N0YXRpYyB1bnNp Z25lZCBpbnQgY2hlY2tfYmdfdmljdGltcyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksIHN0cnVj dCB2aWN0aW1fc2VsX3BvbGljeSAqcCkKPj4gIHsKPj4gIAlzdHJ1Y3QgZGlydHlfc2VnbGlzdF9p bmZvICpkaXJ0eV9pID0gRElSVFlfSShzYmkpOwo+PiAgCXVuc2lnbmVkIGludCBzZWNubzsKPj4g QEAgLTIwOCwxMSArMjEwLDEyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY2hlY2tfYmdfdmljdGlt cyhzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmkpCj4+ICAJCWlmIChzZWNfdXNhZ2VfY2hlY2soc2Jp LCBzZWNubykpCj4+ICAJCQljb250aW51ZTsKPj4gIAo+PiAtCQlpZiAobm9fZmdnY19jYW5kaWRh dGUoc2JpLCBzZWNubykpCj4+ICsJCXAtPmN1cl9zZWdub19yID0gR0VUX1NFR19GUk9NX1NFQyhz YmksIHNlY25vKTsKPj4gKwkJaWYgKG5vX2ZnZ2NfY2FuZGlkYXRlKHNiaSwgc2Vjbm8sIHApKQo+ PiAgCQkJY29udGludWU7Cj4+ICAKPj4gIAkJY2xlYXJfYml0KHNlY25vLCBkaXJ0eV9pLT52aWN0 aW1fc2VjbWFwKTsKPj4gLQkJcmV0dXJuIEdFVF9TRUdfRlJPTV9TRUMoc2JpLCBzZWNubyk7Cj4+ ICsJCXJldHVybiBwLT5jdXJfc2Vnbm9fcjsKPj4gIAl9Cj4+ICAJcmV0dXJuIE5VTExfU0VHTk87 Cj4+ICB9Cj4+IEBAIC0zMzIsNyArMzM1LDcgQEAgc3RhdGljIGludCBnZXRfdmljdGltX2J5X2Rl ZmF1bHQoc3RydWN0IGYyZnNfc2JfaW5mbyAqc2JpLAo+PiAgCj4+ICAJbGFzdF92aWN0aW0gPSBz bS0+bGFzdF92aWN0aW1bcC5nY19tb2RlXTsKPj4gIAlpZiAocC5hbGxvY19tb2RlID09IExGUyAm JiBnY190eXBlID09IEZHX0dDKSB7Cj4+IC0JCXAubWluX3NlZ25vID0gY2hlY2tfYmdfdmljdGlt cyhzYmkpOwo+PiArCQlwLm1pbl9zZWdubyA9IGNoZWNrX2JnX3ZpY3RpbXMoc2JpLCAmcCk7Cj4+ ICAJCWlmIChwLm1pbl9zZWdubyAhPSBOVUxMX1NFR05PKQo+PiAgCQkJZ290byBnb3RfaXQ7Cj4+ ICAJfQo+PiBAQCAtMzY5LDggKzM3Miw5IEBAIHN0YXRpYyBpbnQgZ2V0X3ZpY3RpbV9ieV9kZWZh dWx0KHN0cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwKPj4gIAkJCWdvdG8gbmV4dDsKPj4gIAkJaWYg KGdjX3R5cGUgPT0gQkdfR0MgJiYgdGVzdF9iaXQoc2Vjbm8sIGRpcnR5X2ktPnZpY3RpbV9zZWNt YXApKQo+PiAgCQkJZ290byBuZXh0Owo+PiArCQlwLmN1cl9zZWdub19yID0gc2Vnbm87Cj4+ICAJ CWlmIChnY190eXBlID09IEZHX0dDICYmIHAuYWxsb2NfbW9kZSA9PSBMRlMgJiYKPj4gLQkJCQkJ bm9fZmdnY19jYW5kaWRhdGUoc2JpLCBzZWNubykpCj4+ICsJCQkJCW5vX2ZnZ2NfY2FuZGlkYXRl KHNiaSwgc2Vjbm8sICZwKSkKPj4gIAkJCWdvdG8gbmV4dDsKPj4gIAo+PiAgCQljb3N0ID0gZ2V0 X2djX2Nvc3Qoc2JpLCBzZWdubywgJnApOwo+PiBAQCAtNDAzLDYgKzQwNywxMSBAQCBzdGF0aWMg aW50IGdldF92aWN0aW1fYnlfZGVmYXVsdChzdHJ1Y3QgZjJmc19zYl9pbmZvICpzYmksCj4+ICAJ CXRyYWNlX2YyZnNfZ2V0X3ZpY3RpbShzYmktPnNiLCB0eXBlLCBnY190eXBlLCAmcCwKPj4gIAkJ CQlzYmktPmN1cl92aWN0aW1fc2VjLAo+PiAgCQkJCXByZWZyZWVfc2VnbWVudHMoc2JpKSwgZnJl ZV9zZWdtZW50cyhzYmkpKTsKPj4gKwl9IGVsc2UgaWYgKGhhc19ub3RfZW5vdWdoX2ZyZWVfc2Vj cyhzYmksIDAsIDApKSB7Cj4+ICsJCXAubWluX3NlZ25vID0gcC5taW5fc2Vnbm9fcjsKPj4gKwkJ aWYgKHAuYWxsb2NfbW9kZSA9PSBMRlMgJiYgZ2NfdHlwZSA9PSBGR19HQykKPj4gKwkJCWNsZWFy X2JpdChHRVRfU0VDX0ZST01fU0VHKHNiaSwgcC5taW5fc2Vnbm8pLCBkaXJ0eV9pLT52aWN0aW1f c2VjbWFwKTsKPj4gKwkJZ290byBnb3RfaXQ7Cj4+ICAJfQo+PiAgb3V0Ogo+PiAgCW11dGV4X3Vu bG9jaygmZGlydHlfaS0+c2VnbGlzdF9sb2NrKTsKPj4gZGlmZiAtLWdpdCBhL2ZzL2YyZnMvc2Vn bWVudC5oIGIvZnMvZjJmcy9zZWdtZW50LmgKPj4gaW5kZXggNmI4NzFiNC4uN2QyZDBmMyAxMDA2 NDQKPj4gLS0tIGEvZnMvZjJmcy9zZWdtZW50LmgKPj4gKysrIGIvZnMvZjJmcy9zZWdtZW50LmgK Pj4gQEAgLTE2OSw2ICsxNjksOSBAQCBzdHJ1Y3QgdmljdGltX3NlbF9wb2xpY3kgewo+PiAgCXVu c2lnbmVkIGludCBvZnNfdW5pdDsJCS8qIGJpdG1hcCBzZWFyY2ggdW5pdCAqLwo+PiAgCXVuc2ln bmVkIGludCBtaW5fY29zdDsJCS8qIG1pbmltdW0gY29zdCAqLwo+PiAgCXVuc2lnbmVkIGludCBt aW5fc2Vnbm87CQkvKiBzZWdtZW50ICMgaGF2aW5nIG1pbi4gY29zdCAqLwo+PiArCXVuc2lnbmVk IGludCBtaW5fY29zdF9yOwkJLyogcm91Z2ggbWluaW11bSBjb3N0ICovCj4+ICsJdW5zaWduZWQg aW50IG1pbl9zZWdub19yOwkJLyogc2VnbWVudCAjIGhhdmluZyByb3VnaCBtaW4uIGNvc3QgKi8K Pj4gKwl1bnNpZ25lZCBpbnQgY3VyX3NlZ25vX3I7CQkvKiBzZWdtZW50ICMgcm91Z2ggcHJvY2Vz cyBpcyBoYW5kbGluZyAqLwo+PiAgfTsKPj4gIAo+PiAgc3RydWN0IHNlZ19lbnRyeSB7Cj4+IEBA IC03NDMsMTEgKzc0NiwxOSBAQCBzdGF0aWMgaW5saW5lIGJsb2NrX3Qgc3VtX2Jsa19hZGRyKHN0 cnVjdCBmMmZzX3NiX2luZm8gKnNiaSwgaW50IGJhc2UsIGludCB0eXBlKQo+PiAgfQo+PiAgCj4+ ICBzdGF0aWMgaW5saW5lIGJvb2wgbm9fZmdnY19jYW5kaWRhdGUoc3RydWN0IGYyZnNfc2JfaW5m byAqc2JpLAo+PiAtCQkJCQkJdW5zaWduZWQgaW50IHNlY25vKQo+PiArCQkJCQkJdW5zaWduZWQg aW50IHNlY25vLCBzdHJ1Y3QgdmljdGltX3NlbF9wb2xpY3kgKnApCj4+ICB7Cj4+IC0JaWYgKGdl dF92YWxpZF9ibG9ja3Moc2JpLCBHRVRfU0VHX0ZST01fU0VDKHNiaSwgc2Vjbm8pLCB0cnVlKSA+ PQo+PiAtCQkJCQkJc2JpLT5mZ2djX3RocmVzaG9sZCkKPj4gKwl1bnNpZ25lZCBpbnQgY3VyX2Nv c3Q7Cj4+ICsKPj4gKwljdXJfY29zdCA9IGdldF92YWxpZF9ibG9ja3Moc2JpLCBHRVRfU0VHX0ZS T01fU0VDKHNiaSwgc2Vjbm8pLCB0cnVlKTsKPj4gKwlpZiAoY3VyX2Nvc3QgPj0gc2JpLT5mZ2dj X3RocmVzaG9sZCkgewo+PiArCQlpZiAocC0+bWluX2Nvc3RfciA+IGN1cl9jb3N0KSB7Cj4+ICsJ CQlwLT5taW5fY29zdF9yID0gY3VyX2Nvc3Q7Cj4+ICsJCQlwLT5taW5fc2Vnbm9fciA9IHAtPmN1 cl9zZWdub19yOwo+PiArCQl9Cj4+ICAJCXJldHVybiB0cnVlOwo+PiArCX0KPj4gKwo+PiAgCXJl dHVybiBmYWxzZTsKPj4gIH0KPj4gIAo+PiAtLSAKPj4gMS44LjUuMgo+IC4KPgoKCi0tIApUaGFu a3MsCll1bmxvbmcgU29uZwoKCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQ2hlY2sgb3V0IHRoZSB2 aWJyYW50IHRlY2ggY29tbXVuaXR5IG9uIG9uZSBvZiB0aGUgd29ybGQncyBtb3N0CmVuZ2FnaW5n IHRlY2ggc2l0ZXMsIFNsYXNoZG90Lm9yZyEgaHR0cDovL3NkbS5saW5rL3NsYXNoZG90Cl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkxpbnV4LWYyZnMtZGV2 ZWwgbWFpbGluZyBsaXN0CkxpbnV4LWYyZnMtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Cmh0 dHBzOi8vbGlzdHMuc291cmNlZm9yZ2UubmV0L2xpc3RzL2xpc3RpbmZvL2xpbnV4LWYyZnMtZGV2 ZWwK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [PATCH] f2fs: let __get_victim successfully get a segno in corner case To: Jaegeuk Kim References: <1500033432-57620-1-git-send-email-yunlong.song@huawei.com> <20170716010934.GC51202@jaegeuk-macbookpro.roam.corp.google.com> CC: , , , , , , , From: Yunlong Song Message-ID: <596C1830.8040202@huawei.com> Date: Mon, 17 Jul 2017 09:51:44 +0800 MIME-Version: 1.0 In-Reply-To: <20170716010934.GC51202@jaegeuk-macbookpro.roam.corp.google.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: Hi Jay, In fact,this is not "suppose" case yet, we have already met this problem several times in some test suits for corner case, or I cannot notice that this could happen. On 2017/7/16 9:09, Jaegeuk Kim wrote: > Hi Yunlong, > > On 07/14, Yunlong Song wrote: >> Suppose that the valid blocks of each section are all over sbi->fggc_threshold, > How about adding a kernel message first to detect your *supposed* sceanrio? > If that happens, it'll be a sort of bug which we haven't assumed. > > Thanks, > >> and even has_not_enough_free_secs is true, f2fs_gc cannot do its job since the >> no_fggc_candidate always returns true. As a result, the reserved segments can be >> used up, and finally there is no free segment at all, and get_new_segment cannot >> get a free segment, filesystem will trap into a wrong status. >> >> To fix this, we record the segno which has a rough minimum cost and return it to >> __get_victim to continue f2fs_gc's job. >> >> Signed-off-by: Yunlong Song >> --- >> fs/f2fs/gc.c | 19 ++++++++++++++----- >> fs/f2fs/segment.h | 17 ++++++++++++++--- >> 2 files changed, 28 insertions(+), 8 deletions(-) >> >> diff --git a/fs/f2fs/gc.c b/fs/f2fs/gc.c >> index fa3d2e2..965e783 100644 >> --- a/fs/f2fs/gc.c >> +++ b/fs/f2fs/gc.c >> @@ -178,6 +178,8 @@ static void select_policy(struct f2fs_sb_info *sbi, int gc_type, >> p->offset = 0; >> else >> p->offset = SIT_I(sbi)->last_victim[p->gc_mode]; >> + >> + p->min_cost_r = UINT_MAX; >> } >> >> static unsigned int get_max_cost(struct f2fs_sb_info *sbi, >> @@ -194,7 +196,7 @@ static unsigned int get_max_cost(struct f2fs_sb_info *sbi, >> return 0; >> } >> >> -static unsigned int check_bg_victims(struct f2fs_sb_info *sbi) >> +static unsigned int check_bg_victims(struct f2fs_sb_info *sbi, struct victim_sel_policy *p) >> { >> struct dirty_seglist_info *dirty_i = DIRTY_I(sbi); >> unsigned int secno; >> @@ -208,11 +210,12 @@ static unsigned int check_bg_victims(struct f2fs_sb_info *sbi) >> if (sec_usage_check(sbi, secno)) >> continue; >> >> - if (no_fggc_candidate(sbi, secno)) >> + p->cur_segno_r = GET_SEG_FROM_SEC(sbi, secno); >> + if (no_fggc_candidate(sbi, secno, p)) >> continue; >> >> clear_bit(secno, dirty_i->victim_secmap); >> - return GET_SEG_FROM_SEC(sbi, secno); >> + return p->cur_segno_r; >> } >> return NULL_SEGNO; >> } >> @@ -332,7 +335,7 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi, >> >> last_victim = sm->last_victim[p.gc_mode]; >> if (p.alloc_mode == LFS && gc_type == FG_GC) { >> - p.min_segno = check_bg_victims(sbi); >> + p.min_segno = check_bg_victims(sbi, &p); >> if (p.min_segno != NULL_SEGNO) >> goto got_it; >> } >> @@ -369,8 +372,9 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi, >> goto next; >> if (gc_type == BG_GC && test_bit(secno, dirty_i->victim_secmap)) >> goto next; >> + p.cur_segno_r = segno; >> if (gc_type == FG_GC && p.alloc_mode == LFS && >> - no_fggc_candidate(sbi, secno)) >> + no_fggc_candidate(sbi, secno, &p)) >> goto next; >> >> cost = get_gc_cost(sbi, segno, &p); >> @@ -403,6 +407,11 @@ static int get_victim_by_default(struct f2fs_sb_info *sbi, >> trace_f2fs_get_victim(sbi->sb, type, gc_type, &p, >> sbi->cur_victim_sec, >> prefree_segments(sbi), free_segments(sbi)); >> + } else if (has_not_enough_free_secs(sbi, 0, 0)) { >> + p.min_segno = p.min_segno_r; >> + if (p.alloc_mode == LFS && gc_type == FG_GC) >> + clear_bit(GET_SEC_FROM_SEG(sbi, p.min_segno), dirty_i->victim_secmap); >> + goto got_it; >> } >> out: >> mutex_unlock(&dirty_i->seglist_lock); >> diff --git a/fs/f2fs/segment.h b/fs/f2fs/segment.h >> index 6b871b4..7d2d0f3 100644 >> --- a/fs/f2fs/segment.h >> +++ b/fs/f2fs/segment.h >> @@ -169,6 +169,9 @@ struct victim_sel_policy { >> unsigned int ofs_unit; /* bitmap search unit */ >> unsigned int min_cost; /* minimum cost */ >> unsigned int min_segno; /* segment # having min. cost */ >> + unsigned int min_cost_r; /* rough minimum cost */ >> + unsigned int min_segno_r; /* segment # having rough min. cost */ >> + unsigned int cur_segno_r; /* segment # rough process is handling */ >> }; >> >> struct seg_entry { >> @@ -743,11 +746,19 @@ static inline block_t sum_blk_addr(struct f2fs_sb_info *sbi, int base, int type) >> } >> >> static inline bool no_fggc_candidate(struct f2fs_sb_info *sbi, >> - unsigned int secno) >> + unsigned int secno, struct victim_sel_policy *p) >> { >> - if (get_valid_blocks(sbi, GET_SEG_FROM_SEC(sbi, secno), true) >= >> - sbi->fggc_threshold) >> + unsigned int cur_cost; >> + >> + cur_cost = get_valid_blocks(sbi, GET_SEG_FROM_SEC(sbi, secno), true); >> + if (cur_cost >= sbi->fggc_threshold) { >> + if (p->min_cost_r > cur_cost) { >> + p->min_cost_r = cur_cost; >> + p->min_segno_r = p->cur_segno_r; >> + } >> return true; >> + } >> + >> return false; >> } >> >> -- >> 1.8.5.2 > . > -- Thanks, Yunlong Song