f2fs: print zone status in string and some log
authorJaegeuk Kim <jaegeuk@kernel.org>
Fri, 16 Feb 2024 21:52:25 +0000 (13:52 -0800)
committerJaegeuk Kim <jaegeuk@kernel.org>
Mon, 4 Mar 2024 17:22:30 +0000 (09:22 -0800)
No functional change, but add some more logs.

Note, it includes the spelling mistakes pointed by Colin Ian King.

Reviewed-by: Chao Yu <chao@kernel.org>
Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
fs/f2fs/segment.c
fs/f2fs/super.c

index dab9544f871aa1d0050576043a07cdadfa78dd21..0e32ea36b0f4a2e5e10edd479a66e59b5b48d9f0 100644 (file)
@@ -4909,6 +4909,16 @@ out:
 }
 
 #ifdef CONFIG_BLK_DEV_ZONED
+static const char *f2fs_zone_status[BLK_ZONE_COND_OFFLINE + 1] = {
+       [BLK_ZONE_COND_NOT_WP]          = "NOT_WP",
+       [BLK_ZONE_COND_EMPTY]           = "EMPTY",
+       [BLK_ZONE_COND_IMP_OPEN]        = "IMPLICIT_OPEN",
+       [BLK_ZONE_COND_EXP_OPEN]        = "EXPLICIT_OPEN",
+       [BLK_ZONE_COND_CLOSED]          = "CLOSED",
+       [BLK_ZONE_COND_READONLY]        = "READONLY",
+       [BLK_ZONE_COND_FULL]            = "FULL",
+       [BLK_ZONE_COND_OFFLINE]         = "OFFLINE",
+};
 
 static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
                                    struct f2fs_dev_info *fdev,
@@ -4929,14 +4939,19 @@ static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
         * Skip check of zones cursegs point to, since
         * fix_curseg_write_pointer() checks them.
         */
-       if (zone_segno >= MAIN_SEGS(sbi) ||
-           IS_CURSEC(sbi, GET_SEC_FROM_SEG(sbi, zone_segno)))
+       if (zone_segno >= MAIN_SEGS(sbi))
                return 0;
 
        /*
         * Get # of valid block of the zone.
         */
        valid_block_cnt = get_valid_blocks(sbi, zone_segno, true);
+       if (IS_CURSEC(sbi, GET_SEC_FROM_SEG(sbi, zone_segno))) {
+               f2fs_notice(sbi, "Open zones: valid block[0x%x,0x%x] cond[%s]",
+                               zone_segno, valid_block_cnt,
+                               f2fs_zone_status[zone->cond]);
+               return 0;
+       }
 
        if ((!valid_block_cnt && zone->cond == BLK_ZONE_COND_EMPTY) ||
            (valid_block_cnt && zone->cond == BLK_ZONE_COND_FULL))
@@ -4944,8 +4959,8 @@ static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
 
        if (!valid_block_cnt) {
                f2fs_notice(sbi, "Zone without valid block has non-zero write "
-                           "pointer. Reset the write pointer: cond[0x%x]",
-                           zone->cond);
+                           "pointer. Reset the write pointer: cond[%s]",
+                           f2fs_zone_status[zone->cond]);
                ret = __f2fs_issue_discard_zone(sbi, fdev->bdev, zone_block,
                                        zone->len >> log_sectors_per_block);
                if (ret)
@@ -4962,8 +4977,8 @@ static int check_zone_write_pointer(struct f2fs_sb_info *sbi,
         * selected for write operation until it get discarded.
         */
        f2fs_notice(sbi, "Valid blocks are not aligned with write "
-                   "pointer: valid block[0x%x,0x%x] cond[0x%x]",
-                   zone_segno, valid_block_cnt, zone->cond);
+                   "pointer: valid block[0x%x,0x%x] cond[%s]",
+                   zone_segno, valid_block_cnt, f2fs_zone_status[zone->cond]);
 
        ret = blkdev_zone_mgmt(fdev->bdev, REQ_OP_ZONE_FINISH,
                                zone->start, zone->len, GFP_NOFS);
index 32c23a0caf04aff20a5e34246560b949a3a2f91a..b038028cff27e77e3f7c2b41ec216d1712fcb0b8 100644 (file)
@@ -4675,8 +4675,10 @@ reset_checkpoint:
         * check zoned block devices' write pointer consistency.
         */
        if (f2fs_sb_has_blkzoned(sbi) && !f2fs_readonly(sb)) {
-               int err2 = f2fs_check_write_pointer(sbi);
+               int err2;
 
+               f2fs_notice(sbi, "Checking entire write pointers");
+               err2 = f2fs_check_write_pointer(sbi);
                if (err2)
                        err = err2;
        }