sysfs.c (a8253684eb4b30abd3faf055bc475c23da748dc6) sysfs.c (d98af5f4552058a5c22030641ef79cee92c61f54)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * f2fs sysfs interface
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
7 * Copyright (c) 2017 Chao Yu <chao@kernel.org>
8 */

--- 187 unchanged lines hidden (view full) ---

196 else
197 unusable = f2fs_get_unusable_blocks(sbi);
198 return sprintf(buf, "%llu\n", (unsigned long long)unusable);
199}
200
201static ssize_t encoding_show(struct f2fs_attr *a,
202 struct f2fs_sb_info *sbi, char *buf)
203{
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * f2fs sysfs interface
4 *
5 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
6 * http://www.samsung.com/
7 * Copyright (c) 2017 Chao Yu <chao@kernel.org>
8 */

--- 187 unchanged lines hidden (view full) ---

196 else
197 unusable = f2fs_get_unusable_blocks(sbi);
198 return sprintf(buf, "%llu\n", (unsigned long long)unusable);
199}
200
201static ssize_t encoding_show(struct f2fs_attr *a,
202 struct f2fs_sb_info *sbi, char *buf)
203{
204#if IS_ENABLED(CONFIG_UNICODE)
204#ifdef CONFIG_UNICODE
205 struct super_block *sb = sbi->sb;
206
207 if (f2fs_sb_has_casefold(sbi))
208 return sysfs_emit(buf, "UTF-8 (%d.%d.%d)\n",
209 (sb->s_encoding->version >> 16) & 0xff,
210 (sb->s_encoding->version >> 8) & 0xff,
211 sb->s_encoding->version & 0xff);
212#endif

--- 145 unchanged lines hidden (view full) ---

358 if (*name == '!') {
359 name++;
360 set = false;
361 }
362
363 if (!strlen(name) || strlen(name) >= F2FS_EXTENSION_LEN)
364 return -EINVAL;
365
205 struct super_block *sb = sbi->sb;
206
207 if (f2fs_sb_has_casefold(sbi))
208 return sysfs_emit(buf, "UTF-8 (%d.%d.%d)\n",
209 (sb->s_encoding->version >> 16) & 0xff,
210 (sb->s_encoding->version >> 8) & 0xff,
211 sb->s_encoding->version & 0xff);
212#endif

--- 145 unchanged lines hidden (view full) ---

358 if (*name == '!') {
359 name++;
360 set = false;
361 }
362
363 if (!strlen(name) || strlen(name) >= F2FS_EXTENSION_LEN)
364 return -EINVAL;
365
366 down_write(&sbi->sb_lock);
366 f2fs_down_write(&sbi->sb_lock);
367
368 ret = f2fs_update_extension_list(sbi, name, hot, set);
369 if (ret)
370 goto out;
371
372 ret = f2fs_commit_super(sbi, false);
373 if (ret)
374 f2fs_update_extension_list(sbi, name, hot, !set);
375out:
367
368 ret = f2fs_update_extension_list(sbi, name, hot, set);
369 if (ret)
370 goto out;
371
372 ret = f2fs_commit_super(sbi, false);
373 if (ret)
374 f2fs_update_extension_list(sbi, name, hot, !set);
375out:
376 up_write(&sbi->sb_lock);
376 f2fs_up_write(&sbi->sb_lock);
377 return ret ? ret : count;
378 }
379
380 if (!strcmp(a->attr.name, "ckpt_thread_ioprio")) {
381 const char *name = strim((char *)buf);
382 struct ckpt_req_control *cprc = &sbi->cprc_info;
383 int class;
384 long data;

--- 78 unchanged lines hidden (view full) ---

463 if (sbi->gc_thread) {
464 sbi->gc_thread->gc_wake = 1;
465 wake_up_interruptible_all(
466 &sbi->gc_thread->gc_wait_queue_head);
467 wake_up_discard_thread(sbi, true);
468 }
469 } else if (t == 2) {
470 sbi->gc_mode = GC_URGENT_LOW;
377 return ret ? ret : count;
378 }
379
380 if (!strcmp(a->attr.name, "ckpt_thread_ioprio")) {
381 const char *name = strim((char *)buf);
382 struct ckpt_req_control *cprc = &sbi->cprc_info;
383 int class;
384 long data;

--- 78 unchanged lines hidden (view full) ---

463 if (sbi->gc_thread) {
464 sbi->gc_thread->gc_wake = 1;
465 wake_up_interruptible_all(
466 &sbi->gc_thread->gc_wait_queue_head);
467 wake_up_discard_thread(sbi, true);
468 }
469 } else if (t == 2) {
470 sbi->gc_mode = GC_URGENT_LOW;
471 } else if (t == 3) {
472 sbi->gc_mode = GC_URGENT_MID;
473 if (sbi->gc_thread) {
474 sbi->gc_thread->gc_wake = 1;
475 wake_up_interruptible_all(
476 &sbi->gc_thread->gc_wait_queue_head);
477 }
471 } else {
472 return -EINVAL;
473 }
474 return count;
475 }
476 if (!strcmp(a->attr.name, "gc_idle")) {
477 if (t == GC_IDLE_CB) {
478 sbi->gc_mode = GC_IDLE_CB;
479 } else if (t == GC_IDLE_GREEDY) {
480 sbi->gc_mode = GC_IDLE_GREEDY;
481 } else if (t == GC_IDLE_AT) {
482 if (!sbi->am.atgc_enabled)
483 return -EINVAL;
478 } else {
479 return -EINVAL;
480 }
481 return count;
482 }
483 if (!strcmp(a->attr.name, "gc_idle")) {
484 if (t == GC_IDLE_CB) {
485 sbi->gc_mode = GC_IDLE_CB;
486 } else if (t == GC_IDLE_GREEDY) {
487 sbi->gc_mode = GC_IDLE_GREEDY;
488 } else if (t == GC_IDLE_AT) {
489 if (!sbi->am.atgc_enabled)
490 return -EINVAL;
484 sbi->gc_mode = GC_AT;
491 sbi->gc_mode = GC_IDLE_AT;
485 } else {
486 sbi->gc_mode = GC_NORMAL;
487 }
488 return count;
489 }
490
491 if (!strcmp(a->attr.name, "gc_urgent_high_remaining")) {
492 spin_lock(&sbi->gc_urgent_high_lock);

--- 218 unchanged lines hidden (view full) ---

711 urgent_sleep_time);
712F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_min_sleep_time, min_sleep_time);
713F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_max_sleep_time, max_sleep_time);
714F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_no_gc_sleep_time, no_gc_sleep_time);
715F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle, gc_mode);
716F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_urgent, gc_mode);
717F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
718F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_small_discards, max_discards);
492 } else {
493 sbi->gc_mode = GC_NORMAL;
494 }
495 return count;
496 }
497
498 if (!strcmp(a->attr.name, "gc_urgent_high_remaining")) {
499 spin_lock(&sbi->gc_urgent_high_lock);

--- 218 unchanged lines hidden (view full) ---

718 urgent_sleep_time);
719F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_min_sleep_time, min_sleep_time);
720F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_max_sleep_time, max_sleep_time);
721F2FS_RW_ATTR(GC_THREAD, f2fs_gc_kthread, gc_no_gc_sleep_time, no_gc_sleep_time);
722F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle, gc_mode);
723F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_urgent, gc_mode);
724F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, reclaim_segments, rec_prefree_segments);
725F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_small_discards, max_discards);
726F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_request, max_discard_request);
727F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, min_discard_issue_time, min_discard_issue_time);
728F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, mid_discard_issue_time, mid_discard_issue_time);
729F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, max_discard_issue_time, max_discard_issue_time);
719F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
720F2FS_RW_ATTR(RESERVED_BLOCKS, f2fs_sb_info, reserved_blocks, reserved_blocks);
721F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, batched_trim_sections, trim_sections);
722F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, ipu_policy, ipu_policy);
723F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ipu_util, min_ipu_util);
724F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_fsync_blocks, min_fsync_blocks);
725F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_seq_blocks, min_seq_blocks);
726F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_hot_blocks, min_hot_blocks);
727F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ssr_sections, min_ssr_sections);
728F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);
729F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);
730F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, dirty_nats_ratio, dirty_nats_ratio);
730F2FS_RW_ATTR(DCC_INFO, discard_cmd_control, discard_granularity, discard_granularity);
731F2FS_RW_ATTR(RESERVED_BLOCKS, f2fs_sb_info, reserved_blocks, reserved_blocks);
732F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, batched_trim_sections, trim_sections);
733F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, ipu_policy, ipu_policy);
734F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ipu_util, min_ipu_util);
735F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_fsync_blocks, min_fsync_blocks);
736F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_seq_blocks, min_seq_blocks);
737F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_hot_blocks, min_hot_blocks);
738F2FS_RW_ATTR(SM_INFO, f2fs_sm_info, min_ssr_sections, min_ssr_sections);
739F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ram_thresh, ram_thresh);
740F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, ra_nid_pages, ra_nid_pages);
741F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, dirty_nats_ratio, dirty_nats_ratio);
742F2FS_RW_ATTR(NM_INFO, f2fs_nm_info, max_roll_forward_node_blocks, max_rf_node_blocks);
731F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
732F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, migration_granularity, migration_granularity);
733F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
734F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);
735F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);
736F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, discard_idle_interval,
737 interval_time[DISCARD_TIME]);
738F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle_interval, interval_time[GC_TIME]);

--- 34 unchanged lines hidden (view full) ---

773F2FS_GENERAL_RO_ATTR(moved_blocks_background);
774F2FS_GENERAL_RO_ATTR(moved_blocks_foreground);
775F2FS_GENERAL_RO_ATTR(avg_vblocks);
776#endif
777
778#ifdef CONFIG_FS_ENCRYPTION
779F2FS_FEATURE_RO_ATTR(encryption);
780F2FS_FEATURE_RO_ATTR(test_dummy_encryption_v2);
743F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, max_victim_search, max_victim_search);
744F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, migration_granularity, migration_granularity);
745F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, dir_level, dir_level);
746F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, cp_interval, interval_time[CP_TIME]);
747F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, idle_interval, interval_time[REQ_TIME]);
748F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, discard_idle_interval,
749 interval_time[DISCARD_TIME]);
750F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, gc_idle_interval, interval_time[GC_TIME]);

--- 34 unchanged lines hidden (view full) ---

785F2FS_GENERAL_RO_ATTR(moved_blocks_background);
786F2FS_GENERAL_RO_ATTR(moved_blocks_foreground);
787F2FS_GENERAL_RO_ATTR(avg_vblocks);
788#endif
789
790#ifdef CONFIG_FS_ENCRYPTION
791F2FS_FEATURE_RO_ATTR(encryption);
792F2FS_FEATURE_RO_ATTR(test_dummy_encryption_v2);
781#if IS_ENABLED(CONFIG_UNICODE)
793#ifdef CONFIG_UNICODE
782F2FS_FEATURE_RO_ATTR(encrypted_casefold);
783#endif
784#endif /* CONFIG_FS_ENCRYPTION */
785#ifdef CONFIG_BLK_DEV_ZONED
786F2FS_FEATURE_RO_ATTR(block_zoned);
787#endif
788F2FS_FEATURE_RO_ATTR(atomic_write);
789F2FS_FEATURE_RO_ATTR(extra_attr);
790F2FS_FEATURE_RO_ATTR(project_quota);
791F2FS_FEATURE_RO_ATTR(inode_checksum);
792F2FS_FEATURE_RO_ATTR(flexible_inline_xattr);
793F2FS_FEATURE_RO_ATTR(quota_ino);
794F2FS_FEATURE_RO_ATTR(inode_crtime);
795F2FS_FEATURE_RO_ATTR(lost_found);
796#ifdef CONFIG_FS_VERITY
797F2FS_FEATURE_RO_ATTR(verity);
798#endif
799F2FS_FEATURE_RO_ATTR(sb_checksum);
794F2FS_FEATURE_RO_ATTR(encrypted_casefold);
795#endif
796#endif /* CONFIG_FS_ENCRYPTION */
797#ifdef CONFIG_BLK_DEV_ZONED
798F2FS_FEATURE_RO_ATTR(block_zoned);
799#endif
800F2FS_FEATURE_RO_ATTR(atomic_write);
801F2FS_FEATURE_RO_ATTR(extra_attr);
802F2FS_FEATURE_RO_ATTR(project_quota);
803F2FS_FEATURE_RO_ATTR(inode_checksum);
804F2FS_FEATURE_RO_ATTR(flexible_inline_xattr);
805F2FS_FEATURE_RO_ATTR(quota_ino);
806F2FS_FEATURE_RO_ATTR(inode_crtime);
807F2FS_FEATURE_RO_ATTR(lost_found);
808#ifdef CONFIG_FS_VERITY
809F2FS_FEATURE_RO_ATTR(verity);
810#endif
811F2FS_FEATURE_RO_ATTR(sb_checksum);
800#if IS_ENABLED(CONFIG_UNICODE)
812#ifdef CONFIG_UNICODE
801F2FS_FEATURE_RO_ATTR(casefold);
802#endif
803F2FS_FEATURE_RO_ATTR(readonly);
804#ifdef CONFIG_F2FS_FS_COMPRESSION
805F2FS_FEATURE_RO_ATTR(compression);
806F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_written_block, compr_written_block);
807F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_saved_block, compr_saved_block);
808F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_new_inode, compr_new_inode);

--- 18 unchanged lines hidden (view full) ---

827 ATTR_LIST(gc_min_sleep_time),
828 ATTR_LIST(gc_max_sleep_time),
829 ATTR_LIST(gc_no_gc_sleep_time),
830 ATTR_LIST(gc_idle),
831 ATTR_LIST(gc_urgent),
832 ATTR_LIST(reclaim_segments),
833 ATTR_LIST(main_blkaddr),
834 ATTR_LIST(max_small_discards),
813F2FS_FEATURE_RO_ATTR(casefold);
814#endif
815F2FS_FEATURE_RO_ATTR(readonly);
816#ifdef CONFIG_F2FS_FS_COMPRESSION
817F2FS_FEATURE_RO_ATTR(compression);
818F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_written_block, compr_written_block);
819F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_saved_block, compr_saved_block);
820F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_new_inode, compr_new_inode);

--- 18 unchanged lines hidden (view full) ---

839 ATTR_LIST(gc_min_sleep_time),
840 ATTR_LIST(gc_max_sleep_time),
841 ATTR_LIST(gc_no_gc_sleep_time),
842 ATTR_LIST(gc_idle),
843 ATTR_LIST(gc_urgent),
844 ATTR_LIST(reclaim_segments),
845 ATTR_LIST(main_blkaddr),
846 ATTR_LIST(max_small_discards),
847 ATTR_LIST(max_discard_request),
848 ATTR_LIST(min_discard_issue_time),
849 ATTR_LIST(mid_discard_issue_time),
850 ATTR_LIST(max_discard_issue_time),
835 ATTR_LIST(discard_granularity),
836 ATTR_LIST(pending_discard),
837 ATTR_LIST(batched_trim_sections),
838 ATTR_LIST(ipu_policy),
839 ATTR_LIST(min_ipu_util),
840 ATTR_LIST(min_fsync_blocks),
841 ATTR_LIST(min_seq_blocks),
842 ATTR_LIST(min_hot_blocks),
843 ATTR_LIST(min_ssr_sections),
844 ATTR_LIST(max_victim_search),
845 ATTR_LIST(migration_granularity),
846 ATTR_LIST(dir_level),
847 ATTR_LIST(ram_thresh),
848 ATTR_LIST(ra_nid_pages),
849 ATTR_LIST(dirty_nats_ratio),
851 ATTR_LIST(discard_granularity),
852 ATTR_LIST(pending_discard),
853 ATTR_LIST(batched_trim_sections),
854 ATTR_LIST(ipu_policy),
855 ATTR_LIST(min_ipu_util),
856 ATTR_LIST(min_fsync_blocks),
857 ATTR_LIST(min_seq_blocks),
858 ATTR_LIST(min_hot_blocks),
859 ATTR_LIST(min_ssr_sections),
860 ATTR_LIST(max_victim_search),
861 ATTR_LIST(migration_granularity),
862 ATTR_LIST(dir_level),
863 ATTR_LIST(ram_thresh),
864 ATTR_LIST(ra_nid_pages),
865 ATTR_LIST(dirty_nats_ratio),
866 ATTR_LIST(max_roll_forward_node_blocks),
850 ATTR_LIST(cp_interval),
851 ATTR_LIST(idle_interval),
852 ATTR_LIST(discard_idle_interval),
853 ATTR_LIST(gc_idle_interval),
854 ATTR_LIST(umount_discard_timeout),
855#ifdef CONFIG_F2FS_IOSTAT
856 ATTR_LIST(iostat_enable),
857 ATTR_LIST(iostat_period_ms),

--- 47 unchanged lines hidden (view full) ---

905 NULL,
906};
907ATTRIBUTE_GROUPS(f2fs);
908
909static struct attribute *f2fs_feat_attrs[] = {
910#ifdef CONFIG_FS_ENCRYPTION
911 ATTR_LIST(encryption),
912 ATTR_LIST(test_dummy_encryption_v2),
867 ATTR_LIST(cp_interval),
868 ATTR_LIST(idle_interval),
869 ATTR_LIST(discard_idle_interval),
870 ATTR_LIST(gc_idle_interval),
871 ATTR_LIST(umount_discard_timeout),
872#ifdef CONFIG_F2FS_IOSTAT
873 ATTR_LIST(iostat_enable),
874 ATTR_LIST(iostat_period_ms),

--- 47 unchanged lines hidden (view full) ---

922 NULL,
923};
924ATTRIBUTE_GROUPS(f2fs);
925
926static struct attribute *f2fs_feat_attrs[] = {
927#ifdef CONFIG_FS_ENCRYPTION
928 ATTR_LIST(encryption),
929 ATTR_LIST(test_dummy_encryption_v2),
913#if IS_ENABLED(CONFIG_UNICODE)
930#ifdef CONFIG_UNICODE
914 ATTR_LIST(encrypted_casefold),
915#endif
916#endif /* CONFIG_FS_ENCRYPTION */
917#ifdef CONFIG_BLK_DEV_ZONED
918 ATTR_LIST(block_zoned),
919#endif
920 ATTR_LIST(atomic_write),
921 ATTR_LIST(extra_attr),
922 ATTR_LIST(project_quota),
923 ATTR_LIST(inode_checksum),
924 ATTR_LIST(flexible_inline_xattr),
925 ATTR_LIST(quota_ino),
926 ATTR_LIST(inode_crtime),
927 ATTR_LIST(lost_found),
928#ifdef CONFIG_FS_VERITY
929 ATTR_LIST(verity),
930#endif
931 ATTR_LIST(sb_checksum),
931 ATTR_LIST(encrypted_casefold),
932#endif
933#endif /* CONFIG_FS_ENCRYPTION */
934#ifdef CONFIG_BLK_DEV_ZONED
935 ATTR_LIST(block_zoned),
936#endif
937 ATTR_LIST(atomic_write),
938 ATTR_LIST(extra_attr),
939 ATTR_LIST(project_quota),
940 ATTR_LIST(inode_checksum),
941 ATTR_LIST(flexible_inline_xattr),
942 ATTR_LIST(quota_ino),
943 ATTR_LIST(inode_crtime),
944 ATTR_LIST(lost_found),
945#ifdef CONFIG_FS_VERITY
946 ATTR_LIST(verity),
947#endif
948 ATTR_LIST(sb_checksum),
932#if IS_ENABLED(CONFIG_UNICODE)
949#ifdef CONFIG_UNICODE
933 ATTR_LIST(casefold),
934#endif
935 ATTR_LIST(readonly),
936#ifdef CONFIG_F2FS_FS_COMPRESSION
937 ATTR_LIST(compression),
938#endif
939 ATTR_LIST(pin_file),
940 NULL,

--- 317 unchanged lines hidden ---
950 ATTR_LIST(casefold),
951#endif
952 ATTR_LIST(readonly),
953#ifdef CONFIG_F2FS_FS_COMPRESSION
954 ATTR_LIST(compression),
955#endif
956 ATTR_LIST(pin_file),
957 NULL,

--- 317 unchanged lines hidden ---