diff mbox series

[f2fs-dev] mkfs.f2fs: should give section-aligned reserved segments

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

Commit Message

Jaegeuk Kim Feb. 24, 2024, 1:14 a.m. UTC
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(-)

Comments

Jaegeuk Kim Feb. 24, 2024, 2 a.m. UTC | #1
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;
Daeho Jeong March 8, 2024, 4:44 p.m. UTC | #2
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 mbox series

Patch

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)