sysfs.c (c441bfb5f2866de71e092c1b9d866a65978dfe1a) sysfs.c (a7d9fe3c33887085a2e10c085d378126314dc222)
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 */

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

32 STAT_INFO, /* struct f2fs_stat_info */
33#endif
34#ifdef CONFIG_F2FS_FAULT_INJECTION
35 FAULT_INFO_RATE, /* struct f2fs_fault_info */
36 FAULT_INFO_TYPE, /* struct f2fs_fault_info */
37#endif
38 RESERVED_BLOCKS, /* struct f2fs_sb_info */
39 CPRC_INFO, /* struct ckpt_req_control */
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 */

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

32 STAT_INFO, /* struct f2fs_stat_info */
33#endif
34#ifdef CONFIG_F2FS_FAULT_INJECTION
35 FAULT_INFO_RATE, /* struct f2fs_fault_info */
36 FAULT_INFO_TYPE, /* struct f2fs_fault_info */
37#endif
38 RESERVED_BLOCKS, /* struct f2fs_sb_info */
39 CPRC_INFO, /* struct ckpt_req_control */
40 ATGC_INFO, /* struct atgc_management */
40};
41
42struct f2fs_attr {
43 struct attribute attr;
44 ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
45 ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *,
46 const char *, size_t);
47 int struct_type;

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

70 return (unsigned char *)&F2FS_OPTION(sbi).fault_info;
71#endif
72#ifdef CONFIG_F2FS_STAT_FS
73 else if (struct_type == STAT_INFO)
74 return (unsigned char *)F2FS_STAT(sbi);
75#endif
76 else if (struct_type == CPRC_INFO)
77 return (unsigned char *)&sbi->cprc_info;
41};
42
43struct f2fs_attr {
44 struct attribute attr;
45 ssize_t (*show)(struct f2fs_attr *, struct f2fs_sb_info *, char *);
46 ssize_t (*store)(struct f2fs_attr *, struct f2fs_sb_info *,
47 const char *, size_t);
48 int struct_type;

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

71 return (unsigned char *)&F2FS_OPTION(sbi).fault_info;
72#endif
73#ifdef CONFIG_F2FS_STAT_FS
74 else if (struct_type == STAT_INFO)
75 return (unsigned char *)F2FS_STAT(sbi);
76#endif
77 else if (struct_type == CPRC_INFO)
78 return (unsigned char *)&sbi->cprc_info;
79 else if (struct_type == ATGC_INFO)
80 return (unsigned char *)&sbi->am;
78 return NULL;
79}
80
81static ssize_t dirty_segments_show(struct f2fs_attr *a,
82 struct f2fs_sb_info *sbi, char *buf)
83{
84 return sprintf(buf, "%llu\n",
85 (unsigned long long)(dirty_segments(sbi)));

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

150 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
151 len ? ", " : "", "verity");
152 if (f2fs_sb_has_sb_chksum(sbi))
153 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
154 len ? ", " : "", "sb_checksum");
155 if (f2fs_sb_has_casefold(sbi))
156 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
157 len ? ", " : "", "casefold");
81 return NULL;
82}
83
84static ssize_t dirty_segments_show(struct f2fs_attr *a,
85 struct f2fs_sb_info *sbi, char *buf)
86{
87 return sprintf(buf, "%llu\n",
88 (unsigned long long)(dirty_segments(sbi)));

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

153 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
154 len ? ", " : "", "verity");
155 if (f2fs_sb_has_sb_chksum(sbi))
156 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
157 len ? ", " : "", "sb_checksum");
158 if (f2fs_sb_has_casefold(sbi))
159 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
160 len ? ", " : "", "casefold");
161 if (f2fs_sb_has_readonly(sbi))
162 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
163 len ? ", " : "", "readonly");
158 if (f2fs_sb_has_compression(sbi))
159 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
160 len ? ", " : "", "compression");
161 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
162 len ? ", " : "", "pin_file");
163 len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
164 return len;
165}

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

490 if (!strcmp(a->attr.name, "compr_new_inode")) {
491 if (t != 0)
492 return -EINVAL;
493 sbi->compr_new_inode = 0;
494 return count;
495 }
496#endif
497
164 if (f2fs_sb_has_compression(sbi))
165 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
166 len ? ", " : "", "compression");
167 len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s",
168 len ? ", " : "", "pin_file");
169 len += scnprintf(buf + len, PAGE_SIZE - len, "\n");
170 return len;
171}

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

496 if (!strcmp(a->attr.name, "compr_new_inode")) {
497 if (t != 0)
498 return -EINVAL;
499 sbi->compr_new_inode = 0;
500 return count;
501 }
502#endif
503
504 if (!strcmp(a->attr.name, "atgc_candidate_ratio")) {
505 if (t > 100)
506 return -EINVAL;
507 sbi->am.candidate_ratio = t;
508 return count;
509 }
510
511 if (!strcmp(a->attr.name, "atgc_age_weight")) {
512 if (t > 100)
513 return -EINVAL;
514 sbi->am.age_weight = t;
515 return count;
516 }
517
498 *ui = (unsigned int)t;
499
500 return count;
501}
502
503static ssize_t f2fs_sbi_store(struct f2fs_attr *a,
504 struct f2fs_sb_info *sbi,
505 const char *buf, size_t count)

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

556 FEAT_FLEXIBLE_INLINE_XATTR,
557 FEAT_QUOTA_INO,
558 FEAT_INODE_CRTIME,
559 FEAT_LOST_FOUND,
560 FEAT_VERITY,
561 FEAT_SB_CHECKSUM,
562 FEAT_CASEFOLD,
563 FEAT_COMPRESSION,
518 *ui = (unsigned int)t;
519
520 return count;
521}
522
523static ssize_t f2fs_sbi_store(struct f2fs_attr *a,
524 struct f2fs_sb_info *sbi,
525 const char *buf, size_t count)

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

576 FEAT_FLEXIBLE_INLINE_XATTR,
577 FEAT_QUOTA_INO,
578 FEAT_INODE_CRTIME,
579 FEAT_LOST_FOUND,
580 FEAT_VERITY,
581 FEAT_SB_CHECKSUM,
582 FEAT_CASEFOLD,
583 FEAT_COMPRESSION,
584 FEAT_RO,
564 FEAT_TEST_DUMMY_ENCRYPTION_V2,
565};
566
567static ssize_t f2fs_feature_show(struct f2fs_attr *a,
568 struct f2fs_sb_info *sbi, char *buf)
569{
570 switch (a->id) {
571 case FEAT_CRYPTO:

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

577 case FEAT_FLEXIBLE_INLINE_XATTR:
578 case FEAT_QUOTA_INO:
579 case FEAT_INODE_CRTIME:
580 case FEAT_LOST_FOUND:
581 case FEAT_VERITY:
582 case FEAT_SB_CHECKSUM:
583 case FEAT_CASEFOLD:
584 case FEAT_COMPRESSION:
585 FEAT_TEST_DUMMY_ENCRYPTION_V2,
586};
587
588static ssize_t f2fs_feature_show(struct f2fs_attr *a,
589 struct f2fs_sb_info *sbi, char *buf)
590{
591 switch (a->id) {
592 case FEAT_CRYPTO:

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

598 case FEAT_FLEXIBLE_INLINE_XATTR:
599 case FEAT_QUOTA_INO:
600 case FEAT_INODE_CRTIME:
601 case FEAT_LOST_FOUND:
602 case FEAT_VERITY:
603 case FEAT_SB_CHECKSUM:
604 case FEAT_CASEFOLD:
605 case FEAT_COMPRESSION:
606 case FEAT_RO:
585 case FEAT_TEST_DUMMY_ENCRYPTION_V2:
586 return sprintf(buf, "supported\n");
587 }
588 return 0;
589}
590
591#define F2FS_ATTR_OFFSET(_struct_type, _name, _mode, _show, _store, _offset) \
592static struct f2fs_attr f2fs_attr_##_name = { \

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

699F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO);
700F2FS_FEATURE_RO_ATTR(inode_crtime, FEAT_INODE_CRTIME);
701F2FS_FEATURE_RO_ATTR(lost_found, FEAT_LOST_FOUND);
702#ifdef CONFIG_FS_VERITY
703F2FS_FEATURE_RO_ATTR(verity, FEAT_VERITY);
704#endif
705F2FS_FEATURE_RO_ATTR(sb_checksum, FEAT_SB_CHECKSUM);
706F2FS_FEATURE_RO_ATTR(casefold, FEAT_CASEFOLD);
607 case FEAT_TEST_DUMMY_ENCRYPTION_V2:
608 return sprintf(buf, "supported\n");
609 }
610 return 0;
611}
612
613#define F2FS_ATTR_OFFSET(_struct_type, _name, _mode, _show, _store, _offset) \
614static struct f2fs_attr f2fs_attr_##_name = { \

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

721F2FS_FEATURE_RO_ATTR(quota_ino, FEAT_QUOTA_INO);
722F2FS_FEATURE_RO_ATTR(inode_crtime, FEAT_INODE_CRTIME);
723F2FS_FEATURE_RO_ATTR(lost_found, FEAT_LOST_FOUND);
724#ifdef CONFIG_FS_VERITY
725F2FS_FEATURE_RO_ATTR(verity, FEAT_VERITY);
726#endif
727F2FS_FEATURE_RO_ATTR(sb_checksum, FEAT_SB_CHECKSUM);
728F2FS_FEATURE_RO_ATTR(casefold, FEAT_CASEFOLD);
729F2FS_FEATURE_RO_ATTR(readonly, FEAT_RO);
707#ifdef CONFIG_F2FS_FS_COMPRESSION
708F2FS_FEATURE_RO_ATTR(compression, FEAT_COMPRESSION);
709F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_written_block, compr_written_block);
710F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_saved_block, compr_saved_block);
711F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_new_inode, compr_new_inode);
712#endif
713
730#ifdef CONFIG_F2FS_FS_COMPRESSION
731F2FS_FEATURE_RO_ATTR(compression, FEAT_COMPRESSION);
732F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_written_block, compr_written_block);
733F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_saved_block, compr_saved_block);
734F2FS_RW_ATTR(F2FS_SBI, f2fs_sb_info, compr_new_inode, compr_new_inode);
735#endif
736
737/* For ATGC */
738F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_candidate_ratio, candidate_ratio);
739F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_candidate_count, max_candidate_count);
740F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_weight, age_weight);
741F2FS_RW_ATTR(ATGC_INFO, atgc_management, atgc_age_threshold, age_threshold);
742
714#define ATTR_LIST(name) (&f2fs_attr_##name.attr)
715static struct attribute *f2fs_attrs[] = {
716 ATTR_LIST(gc_urgent_sleep_time),
717 ATTR_LIST(gc_min_sleep_time),
718 ATTR_LIST(gc_max_sleep_time),
719 ATTR_LIST(gc_no_gc_sleep_time),
720 ATTR_LIST(gc_idle),
721 ATTR_LIST(gc_urgent),

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

773 ATTR_LIST(moved_blocks_background),
774 ATTR_LIST(avg_vblocks),
775#endif
776#ifdef CONFIG_F2FS_FS_COMPRESSION
777 ATTR_LIST(compr_written_block),
778 ATTR_LIST(compr_saved_block),
779 ATTR_LIST(compr_new_inode),
780#endif
743#define ATTR_LIST(name) (&f2fs_attr_##name.attr)
744static struct attribute *f2fs_attrs[] = {
745 ATTR_LIST(gc_urgent_sleep_time),
746 ATTR_LIST(gc_min_sleep_time),
747 ATTR_LIST(gc_max_sleep_time),
748 ATTR_LIST(gc_no_gc_sleep_time),
749 ATTR_LIST(gc_idle),
750 ATTR_LIST(gc_urgent),

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

802 ATTR_LIST(moved_blocks_background),
803 ATTR_LIST(avg_vblocks),
804#endif
805#ifdef CONFIG_F2FS_FS_COMPRESSION
806 ATTR_LIST(compr_written_block),
807 ATTR_LIST(compr_saved_block),
808 ATTR_LIST(compr_new_inode),
809#endif
810 /* For ATGC */
811 ATTR_LIST(atgc_candidate_ratio),
812 ATTR_LIST(atgc_candidate_count),
813 ATTR_LIST(atgc_age_weight),
814 ATTR_LIST(atgc_age_threshold),
781 NULL,
782};
783ATTRIBUTE_GROUPS(f2fs);
784
785static struct attribute *f2fs_feat_attrs[] = {
786#ifdef CONFIG_FS_ENCRYPTION
787 ATTR_LIST(encryption),
788 ATTR_LIST(test_dummy_encryption_v2),

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

798 ATTR_LIST(quota_ino),
799 ATTR_LIST(inode_crtime),
800 ATTR_LIST(lost_found),
801#ifdef CONFIG_FS_VERITY
802 ATTR_LIST(verity),
803#endif
804 ATTR_LIST(sb_checksum),
805 ATTR_LIST(casefold),
815 NULL,
816};
817ATTRIBUTE_GROUPS(f2fs);
818
819static struct attribute *f2fs_feat_attrs[] = {
820#ifdef CONFIG_FS_ENCRYPTION
821 ATTR_LIST(encryption),
822 ATTR_LIST(test_dummy_encryption_v2),

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

832 ATTR_LIST(quota_ino),
833 ATTR_LIST(inode_crtime),
834 ATTR_LIST(lost_found),
835#ifdef CONFIG_FS_VERITY
836 ATTR_LIST(verity),
837#endif
838 ATTR_LIST(sb_checksum),
839 ATTR_LIST(casefold),
840 ATTR_LIST(readonly),
806#ifdef CONFIG_F2FS_FS_COMPRESSION
807 ATTR_LIST(compression),
808#endif
809 NULL,
810};
811ATTRIBUTE_GROUPS(f2fs_feat);
812
813F2FS_GENERAL_RO_ATTR(sb_status);

--- 329 unchanged lines hidden ---
841#ifdef CONFIG_F2FS_FS_COMPRESSION
842 ATTR_LIST(compression),
843#endif
844 NULL,
845};
846ATTRIBUTE_GROUPS(f2fs_feat);
847
848F2FS_GENERAL_RO_ATTR(sb_status);

--- 329 unchanged lines hidden ---