From: Daejun Park <daejun7.park@samsung.com>
To: "jaegeuk@kernel.org" <jaegeuk@kernel.org>,
"chao@kernel.org" <chao@kernel.org>,
"linux-f2fs-devel@lists.sourceforge.net"
<linux-f2fs-devel@lists.sourceforge.net>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Cc: Daejun Park <daejun7.park@samsung.com>,
Seokhwan Kim <sukka.kim@samsung.com>,
Dongjin Kim <dongjin_.kim@samsung.com>,
Yonggil Song <yonggil.song@samsung.com>,
Jaeyoon Choi <j_yoon.choi@samsung.com>,
Jeuk Kim <jeuk20.kim@samsung.com>,
Nayeon Kim <nayeoni.kim@samsung.com>,
Siwoo Jung <siu.jung@samsung.com>
Subject: [PATCH] f2fs: avoid unused block when dio write in LFS mode
Date: Thu, 01 Aug 2024 16:47:15 +0900 [thread overview]
Message-ID: <20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p7> (raw)
In-Reply-To: <CGME20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p7>
This patch addresses the problem that when using LFS mode, unused blocks
may occur in f2fs_map_blocks() during block allocation for dio writes.
If a new section is allocated during block allocation, it will not be
included in the map struct by map_is_mergeable() if the LBA of the
allocated block is not contiguous. However, the block already allocated
in this process will remain unused due to the LFS mode.
This patch avoids the possibility of unused blocks by escaping
f2fs_map_blocks() when allocating the last block in a section.
Signed-off-by: Daejun Park <daejun7.park@samsung.com>
---
fs/f2fs/data.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/fs/f2fs/data.c b/fs/f2fs/data.c
index b6dcb3bcaef7..b27a3f448f32 100644
--- a/fs/f2fs/data.c
+++ b/fs/f2fs/data.c
@@ -1711,6 +1711,19 @@ int f2fs_map_blocks(struct inode *inode, struct f2fs_map_blocks *map, int flag)
dn.ofs_in_node = end_offset;
}
+ if (flag == F2FS_GET_BLOCK_DIO && f2fs_lfs_mode(sbi)) {
+ int segno = GET_SEGNO(sbi, blkaddr);
+ bool last_seg, last_blk;
+
+ last_seg = !((segno + 1) % SEGS_PER_SEC(sbi));
+ last_blk = (f2fs_usable_blks_in_seg(sbi, segno) - 1) ==
+ GET_BLKOFF_FROM_SEG0(sbi, blkaddr);
+
+ /* LBA of the next block to be allocated may not be contiguous. */
+ if (last_seg && last_blk)
+ goto sync_out;
+ }
+
if (pgofs >= end)
goto sync_out;
else if (dn.ofs_in_node < end_offset)
--
2.25.1
next parent reply other threads:[~2024-08-01 7:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p7>
2024-08-01 7:47 ` Daejun Park [this message]
2024-08-14 9:50 ` Chao Yu
[not found] ` <CGME20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p3>
2024-08-16 0:17 ` Daejun Park
2024-08-16 1:56 ` (2) " Chao Yu
[not found] ` <CGME20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p6>
2024-08-16 3:36 ` Daejun Park
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=20240801074715epcms2p788934486cd0e8090f67ed0d7cffbc91b@epcms2p7 \
--to=daejun7.park@samsung.com \
--cc=chao@kernel.org \
--cc=dongjin_.kim@samsung.com \
--cc=j_yoon.choi@samsung.com \
--cc=jaegeuk@kernel.org \
--cc=jeuk20.kim@samsung.com \
--cc=linux-f2fs-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=nayeoni.kim@samsung.com \
--cc=siu.jung@samsung.com \
--cc=sukka.kim@samsung.com \
--cc=yonggil.song@samsung.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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®