The reserved segments should be aligned to the section boundary.

Signed-off-by: Jaegeuk Kim <jaeg...@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

Reply via email to