From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sahitya Tummala <stummala@codeaurora.org>, Chao Yu <yuchao0@huawei.com>, Jaegeuk Kim <jaegeuk@kernel.org>, Sasha Levin <sashal@kernel.org>, linux-f2fs-devel@lists.sourceforge.net Subject: [PATCH AUTOSEL 5.8 23/29] f2fs: fix indefinite loop scanning for free nid Date: Mon, 14 Sep 2020 09:03:52 -0400 [thread overview] Message-ID: <20200914130358.1804194-23-sashal@kernel.org> (raw) In-Reply-To: <20200914130358.1804194-1-sashal@kernel.org> From: Sahitya Tummala <stummala@codeaurora.org> [ Upstream commit e2cab031ba7b5003cd12185b3ef38f1a75e3dae8 ] If the sbi->ckpt->next_free_nid is not NAT block aligned and if there are free nids in that NAT block between the start of the block and next_free_nid, then those free nids will not be scanned in scan_nat_page(). This results into mismatch between nm_i->available_nids and the sum of nm_i->free_nid_count of all NAT blocks scanned. And nm_i->available_nids will always be greater than the sum of free nids in all the blocks. Under this condition, if we use all the currently scanned free nids, then it will loop forever in f2fs_alloc_nid() as nm_i->available_nids is still not zero but nm_i->free_nid_count of that partially scanned NAT block is zero. Fix this to align the nm_i->next_scan_nid to the first nid of the corresponding NAT block. Signed-off-by: Sahitya Tummala <stummala@codeaurora.org> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> --- fs/f2fs/node.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 98736d0598b8d..0fde35611df18 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -2375,6 +2375,9 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi, if (unlikely(nid >= nm_i->max_nid)) nid = 0; + if (unlikely(nid % NAT_ENTRY_PER_BLOCK)) + nid = NAT_BLOCK_OFFSET(nid) * NAT_ENTRY_PER_BLOCK; + /* Enough entries */ if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) return 0; -- 2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: Sasha Levin <sashal@kernel.org> To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Sasha Levin <sashal@kernel.org>, Jaegeuk Kim <jaegeuk@kernel.org>, linux-f2fs-devel@lists.sourceforge.net Subject: [f2fs-dev] [PATCH AUTOSEL 5.8 23/29] f2fs: fix indefinite loop scanning for free nid Date: Mon, 14 Sep 2020 09:03:52 -0400 [thread overview] Message-ID: <20200914130358.1804194-23-sashal@kernel.org> (raw) In-Reply-To: <20200914130358.1804194-1-sashal@kernel.org> From: Sahitya Tummala <stummala@codeaurora.org> [ Upstream commit e2cab031ba7b5003cd12185b3ef38f1a75e3dae8 ] If the sbi->ckpt->next_free_nid is not NAT block aligned and if there are free nids in that NAT block between the start of the block and next_free_nid, then those free nids will not be scanned in scan_nat_page(). This results into mismatch between nm_i->available_nids and the sum of nm_i->free_nid_count of all NAT blocks scanned. And nm_i->available_nids will always be greater than the sum of free nids in all the blocks. Under this condition, if we use all the currently scanned free nids, then it will loop forever in f2fs_alloc_nid() as nm_i->available_nids is still not zero but nm_i->free_nid_count of that partially scanned NAT block is zero. Fix this to align the nm_i->next_scan_nid to the first nid of the corresponding NAT block. Signed-off-by: Sahitya Tummala <stummala@codeaurora.org> Reviewed-by: Chao Yu <yuchao0@huawei.com> Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org> --- fs/f2fs/node.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/fs/f2fs/node.c b/fs/f2fs/node.c index 98736d0598b8d..0fde35611df18 100644 --- a/fs/f2fs/node.c +++ b/fs/f2fs/node.c @@ -2375,6 +2375,9 @@ static int __f2fs_build_free_nids(struct f2fs_sb_info *sbi, if (unlikely(nid >= nm_i->max_nid)) nid = 0; + if (unlikely(nid % NAT_ENTRY_PER_BLOCK)) + nid = NAT_BLOCK_OFFSET(nid) * NAT_ENTRY_PER_BLOCK; + /* Enough entries */ if (nm_i->nid_cnt[FREE_NID] >= NAT_ENTRY_PER_BLOCK) return 0; -- 2.25.1 _______________________________________________ Linux-f2fs-devel mailing list Linux-f2fs-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
next prev parent reply other threads:[~2020-09-14 17:06 UTC|newest] Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-09-14 13:03 [PATCH AUTOSEL 5.8 01/29] xprtrdma: Release in-flight MRs on disconnect Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 02/29] NFSv4.1 handle ERR_DELAY error reclaiming locking state on delegation recall Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 03/29] phy: omap-usb2-phy: disable PHY charger detect Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 04/29] habanalabs: prevent user buff overflow Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 05/29] habanalabs: fix report of RAZWI initiator coordinates Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 06/29] scsi: pm8001: Fix memleak in pm8001_exec_internal_task_abort Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 07/29] scsi: libfc: Fix for double free() Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 08/29] scsi: lpfc: Fix FLOGI/PLOGI receive race condition in pt2pt discovery Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 09/29] scsi: lpfc: Extend the RDF FPIN Registration descriptor for additional events Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 10/29] regulator: pwm: Fix machine constraints application Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 11/29] spi: spi-loopback-test: Fix out-of-bounds read Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 12/29] interconnect: Show bandwidth for disabled paths as zero in debugfs Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 13/29] NFS: Zero-stateid SETATTR should first return delegation Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 14/29] SUNRPC: stop printk reading past end of string Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 15/29] rapidio: Replace 'select' DMAENGINES 'with depends on' Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 16/29] cifs: fix DFS mount with cifsacl/modefromsid Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 17/29] kobject: Drop unneeded conditional in __kobject_del() Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 18/29] openrisc: Fix cache API compile issue when not inlining Sasha Levin 2020-09-14 13:03 ` [OpenRISC] " Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 19/29] nvme-fc: cancel async events before freeing event struct Sasha Levin 2020-09-14 13:03 ` Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 20/29] nvme-rdma: " Sasha Levin 2020-09-14 13:03 ` Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 21/29] nvme-tcp: " Sasha Levin 2020-09-14 13:03 ` Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 22/29] block: only call sched requeue_request() for scheduled requests Sasha Levin 2020-09-14 13:03 ` Sasha Levin [this message] 2020-09-14 13:03 ` [f2fs-dev] [PATCH AUTOSEL 5.8 23/29] f2fs: fix indefinite loop scanning for free nid Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 24/29] f2fs: Return EOF on unaligned end of file DIO read Sasha Levin 2020-09-14 13:03 ` [f2fs-dev] " Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 25/29] i2c: algo: pca: Reapply i2c bus settings after reset Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 26/29] spi: Fix memory leak on splited transfers Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 27/29] gcov: add support for GCC 10.1 Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 28/29] KVM: Check the allocation of pv cpu mask Sasha Levin 2020-09-14 13:03 ` [PATCH AUTOSEL 5.8 29/29] KVM: MIPS: Change the definition of kvm type Sasha Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200914130358.1804194-23-sashal@kernel.org \ --to=sashal@kernel.org \ --cc=jaegeuk@kernel.org \ --cc=linux-f2fs-devel@lists.sourceforge.net \ --cc=linux-kernel@vger.kernel.org \ --cc=stable@vger.kernel.org \ --cc=stummala@codeaurora.org \ --cc=yuchao0@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.