f2fs: use finish zone command when closing a zone
authorDaeho Jeong <daehojeong@google.com>
Thu, 24 Aug 2023 16:08:31 +0000 (09:08 -0700)
committerJaegeuk Kim <jaegeuk@kernel.org>
Fri, 25 Aug 2023 17:30:37 +0000 (10:30 -0700)
Use the finish zone command first when a zone should be closed.

Signed-off-by: Daeho Jeong <daehojeong@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c

index b38bf2b..d05b416 100644 (file)
@@ -4948,12 +4948,19 @@ static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
                    GET_BLKOFF_FROM_SEG0(sbi, last_valid_block),
                    wp_segno, wp_blkoff);
 
-       ret = blkdev_issue_zeroout(fdev->bdev, zone->wp,
-                               zone->len - (zone->wp - zone->start),
-                               GFP_NOFS, 0);
-       if (ret)
-               f2fs_err(sbi, "Fill up zone failed: %s (errno=%d)",
-                        fdev->path, ret);
+       ret = blkdev_zone_mgmt(fdev->bdev, REQ_OP_ZONE_FINISH,
+                               zone->start, zone->len, GFP_NOFS);
+       if (ret == -EOPNOTSUPP) {
+               ret = blkdev_issue_zeroout(fdev->bdev, zone->wp,
+                                       zone->len - (zone->wp - zone->start),
+                                       GFP_NOFS, 0);
+               if (ret)
+                       f2fs_err(sbi, "Fill up zone failed: %s (errno=%d)",
+                                       fdev->path, ret);
+       } else if (ret) {
+               f2fs_err(sbi, "Finishing zone failed: %s (errno=%d)",
+                               fdev->path, ret);
+       }
 
        return ret;
 }