Merge tag 'linux-kselftest-next-5.18-rc1' of git://git.kernel.org/pub/scm/linux/kerne...
[linux-2.6-microblaze.git] / fs / f2fs / sysfs.c
index 8ac5066..4c50aed 100644 (file)
@@ -41,6 +41,16 @@ enum {
        ATGC_INFO,      /* struct atgc_management */
 };
 
+static const char *gc_mode_names[MAX_GC_MODE] = {
+       "GC_NORMAL",
+       "GC_IDLE_CB",
+       "GC_IDLE_GREEDY",
+       "GC_IDLE_AT",
+       "GC_URGENT_HIGH",
+       "GC_URGENT_LOW",
+       "GC_URGENT_MID"
+};
+
 struct f2fs_attr {
        struct attribute attr;
        ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
@@ -316,8 +326,13 @@ static ssize_t f2fs_sbi_show(struct f2fs_attr *a,
                return sysfs_emit(buf, "%u\n", sbi->compr_new_inode);
 #endif
 
+       if (!strcmp(a->attr.name, "gc_urgent"))
+               return sysfs_emit(buf, "%s\n",
+                               gc_mode_names[sbi->gc_mode]);
+
        if (!strcmp(a->attr.name, "gc_segment_mode"))
-               return sysfs_emit(buf, "%u\n", sbi->gc_segment_mode);
+               return sysfs_emit(buf, "%s\n",
+                               gc_mode_names[sbi->gc_segment_mode]);
 
        if (!strcmp(a->attr.name, "gc_reclaimed_segments")) {
                return sysfs_emit(buf, "%u\n",
@@ -363,7 +378,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
                if (!strlen(name) || strlen(name) >= F2FS_EXTENSION_LEN)
                        return -EINVAL;
 
-               down_write(&sbi->sb_lock);
+               f2fs_down_write(&sbi->sb_lock);
 
                ret = f2fs_update_extension_list(sbi, name, hot, set);
                if (ret)
@@ -373,7 +388,7 @@ static ssize_t __sbi_store(struct f2fs_attr *a,
                if (ret)
                        f2fs_update_extension_list(sbi, name, hot, !set);
 out:
-               up_write(&sbi->sb_lock);
+               f2fs_up_write(&sbi->sb_lock);
                return ret ? ret : count;
        }
 
@@ -468,6 +483,13 @@ out:
                        }
                } else if (t == 2) {
                        sbi->gc_mode = GC_URGENT_LOW;
+               } else if (t == 3) {
+                       sbi->gc_mode = GC_URGENT_MID;
+                       if (sbi->gc_thread) {
+                               sbi->gc_thread->gc_wake = 1;
+                               wake_up_interruptible_all(
+                                       &sbi->gc_thread->gc_wait_queue_head);
+                       }
                } else {
                        return -EINVAL;
                }
@@ -481,7 +503,7 @@ out:
                } else if (t == GC_IDLE_AT) {
                        if (!sbi->am.atgc_enabled)
                                return -EINVAL;
-                       sbi->gc_mode = GC_AT;
+                       sbi->gc_mode = GC_IDLE_AT;
                } else {
                        sbi->gc_mode = GC_NORMAL;
                }
@@ -716,6 +738,10 @@ F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle, gc_mode);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_urgent, gc_mode);
 F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
 F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_small_discards, max_discards);
+F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_request, max_discard_request);
+F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, min_discard_issue_time, min_discard_issue_time);
+F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, mid_discard_issue_time, mid_discard_issue_time);
+F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_issue_time, max_discard_issue_time);
 F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
 F2FS_RW_ATTR(RESERVED_BLOCKS, f2fs_sb_info, reserved_blocks, reserved_blocks);
 F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, batched_trim_sections, trim_sections);
@@ -728,6 +754,7 @@ F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ssr_sections, min_ssr_sections);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);
 F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, dirty_nats_ratio, dirty_nats_ratio);
+F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, max_roll_forward_node_blocks, max_rf_node_blocks);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, migration_granularity, migration_granularity);
 F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
@@ -832,6 +859,10 @@ static struct attribute *f2fs_attrs[] = {
        ATTR_LIST(reclaim_segments),
        ATTR_LIST(main_blkaddr),
        ATTR_LIST(max_small_discards),
+       ATTR_LIST(max_discard_request),
+       ATTR_LIST(min_discard_issue_time),
+       ATTR_LIST(mid_discard_issue_time),
+       ATTR_LIST(max_discard_issue_time),
        ATTR_LIST(discard_granularity),
        ATTR_LIST(pending_discard),
        ATTR_LIST(batched_trim_sections),
@@ -847,6 +878,7 @@ static struct attribute *f2fs_attrs[] = {
        ATTR_LIST(ram_thresh),
        ATTR_LIST(ra_nid_pages),
        ATTR_LIST(dirty_nats_ratio),
+       ATTR_LIST(max_roll_forward_node_blocks),
        ATTR_LIST(cp_interval),
        ATTR_LIST(idle_interval),
        ATTR_LIST(discard_idle_interval),