Message ID | 20240224011411.3820719-1-jaegeuk@kernel.org (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | [f2fs-dev] mkfs.f2fs: should give section-aligned reserved segments | expand |
The reserved segments should be aligned to the section boundary.
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
---
v2:
- fix bug
include/f2fs_fs.h | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
index 9056e02acd29..fc56396fa358 100644
--- a/include/f2fs_fs.h
+++ b/include/f2fs_fs.h
@@ -1760,25 +1760,27 @@ extern uint32_t f2fs_get_usable_segments(struct f2fs_super_block *sb);
#define ZONE_ALIGN(blks) SIZE_ALIGN(blks, c.blks_per_seg * \
c.segs_per_zone)
-static inline double get_reserved(struct f2fs_super_block *sb, double ovp)
+static inline uint32_t get_reserved(struct f2fs_super_block *sb, double ovp)
{
- double reserved;
uint32_t usable_main_segs = f2fs_get_usable_segments(sb);
uint32_t segs_per_sec = round_up(usable_main_segs, get_sb(section_count));
+ uint32_t reserved;
if (c.conf_reserved_sections)
reserved = c.conf_reserved_sections * segs_per_sec;
else
reserved = (100 / ovp + 1 + NR_CURSEG_TYPE) * segs_per_sec;
- return reserved;
+ /* Let's keep the section alignment */
+ return round_up(reserved, segs_per_sec) * segs_per_sec;
}
static inline double get_best_overprovision(struct f2fs_super_block *sb)
{
- double reserved, ovp, candidate, end, diff, space;
+ double ovp, candidate, end, diff, space;
double max_ovp = 0, max_space = 0;
uint32_t usable_main_segs = f2fs_get_usable_segments(sb);
+ uint32_t reserved;
if (get_sb(segment_count_main) < 256) {
candidate = 10;
@@ -1795,7 +1797,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb)
ovp = (usable_main_segs - reserved) * candidate / 100;
if (ovp < 0)
continue;
- space = usable_main_segs - max(reserved, ovp) -
+ space = usable_main_segs - max((double)reserved, ovp) -
2 * get_sb(segs_per_sec);
if (max_space < space) {
max_space = space;
Reviewed-by: Daeho Jeong <daehojeong@google.com> On Fri, Feb 23, 2024 at 6:02 PM Jaegeuk Kim <jaegeuk@kernel.org> wrote: > > The reserved segments should be aligned to the section boundary. > > Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> > --- > > v2: > - fix bug > > include/f2fs_fs.h | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h > index 9056e02acd29..fc56396fa358 100644 > --- a/include/f2fs_fs.h > +++ b/include/f2fs_fs.h > @@ -1760,25 +1760,27 @@ extern uint32_t f2fs_get_usable_segments(struct f2fs_super_block *sb); > #define ZONE_ALIGN(blks) SIZE_ALIGN(blks, c.blks_per_seg * \ > c.segs_per_zone) > > -static inline double get_reserved(struct f2fs_super_block *sb, double ovp) > +static inline uint32_t get_reserved(struct f2fs_super_block *sb, double ovp) > { > - double reserved; > uint32_t usable_main_segs = f2fs_get_usable_segments(sb); > uint32_t segs_per_sec = round_up(usable_main_segs, get_sb(section_count)); > + uint32_t reserved; > > if (c.conf_reserved_sections) > reserved = c.conf_reserved_sections * segs_per_sec; > else > reserved = (100 / ovp + 1 + NR_CURSEG_TYPE) * segs_per_sec; > > - return reserved; > + /* Let's keep the section alignment */ > + return round_up(reserved, segs_per_sec) * segs_per_sec; > } > > static inline double get_best_overprovision(struct f2fs_super_block *sb) > { > - double reserved, ovp, candidate, end, diff, space; > + double ovp, candidate, end, diff, space; > double max_ovp = 0, max_space = 0; > uint32_t usable_main_segs = f2fs_get_usable_segments(sb); > + uint32_t reserved; > > if (get_sb(segment_count_main) < 256) { > candidate = 10; > @@ -1795,7 +1797,7 @@ static inline double get_best_overprovision(struct f2fs_super_block *sb) > ovp = (usable_main_segs - reserved) * candidate / 100; > if (ovp < 0) > continue; > - space = usable_main_segs - max(reserved, ovp) - > + space = usable_main_segs - max((double)reserved, ovp) - > 2 * get_sb(segs_per_sec); > if (max_space < space) { > max_space = space; > -- > 2.44.0.rc0.258.g7320e95886-goog > > > > _______________________________________________ > Linux-f2fs-devel mailing list > Linux-f2fs-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 9056e02acd29..2e93503cada9 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -1771,7 +1771,8 @@ static inline double get_reserved(struct f2fs_super_block *sb, double ovp) else reserved = (100 / ovp + 1 + NR_CURSEG_TYPE) * segs_per_sec; - return reserved; + /* Let's keep the section alignment */ + return round_up(reserved, segs_per_sec); } static inline double get_best_overprovision(struct f2fs_super_block *sb)
The reserved segments should be aligned to the section boundary. Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org> --- include/f2fs_fs.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)