ext4: refactor out ext4_generic_attr_show()
authorBaokun Li <libaokun1@huawei.com>
Tue, 19 Mar 2024 11:33:19 +0000 (19:33 +0800)
committerTheodore Ts'o <tytso@mit.edu>
Fri, 3 May 2024 03:48:30 +0000 (23:48 -0400)
Refactor out the function ext4_generic_attr_show() to handle the reading
of values of various common types, with no functional changes.

Signed-off-by: Baokun Li <libaokun1@huawei.com>
Reviewed-by: Zhang Yi <yi.zhang@huawei.com>
Reviewed-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20240319113325.3110393-4-libaokun1@huawei.com
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
fs/ext4/sysfs.c

index 2b1c529b7fdfbf942731ddb18d6d272d971ded49..7f455b5f22c0f6544724b8ec49961b126af5d982 100644 (file)
@@ -366,13 +366,42 @@ static ssize_t __print_tstamp(char *buf, __le32 lo, __u8 hi)
 #define print_tstamp(buf, es, tstamp) \
        __print_tstamp(buf, (es)->tstamp, (es)->tstamp ## _hi)
 
+static ssize_t ext4_generic_attr_show(struct ext4_attr *a,
+                                     struct ext4_sb_info *sbi, char *buf)
+{
+       void *ptr = calc_ptr(a, sbi);
+
+       if (!ptr)
+               return 0;
+
+       switch (a->attr_id) {
+       case attr_inode_readahead:
+       case attr_pointer_ui:
+               if (a->attr_ptr == ptr_ext4_super_block_offset)
+                       return sysfs_emit(buf, "%u\n", le32_to_cpup(ptr));
+               return sysfs_emit(buf, "%u\n", *((unsigned int *) ptr));
+       case attr_pointer_ul:
+               return sysfs_emit(buf, "%lu\n", *((unsigned long *) ptr));
+       case attr_pointer_u8:
+               return sysfs_emit(buf, "%u\n", *((unsigned char *) ptr));
+       case attr_pointer_u64:
+               if (a->attr_ptr == ptr_ext4_super_block_offset)
+                       return sysfs_emit(buf, "%llu\n", le64_to_cpup(ptr));
+               return sysfs_emit(buf, "%llu\n", *((unsigned long long *) ptr));
+       case attr_pointer_string:
+               return sysfs_emit(buf, "%.*s\n", a->attr_size, (char *) ptr);
+       case attr_pointer_atomic:
+               return sysfs_emit(buf, "%d\n", atomic_read((atomic_t *) ptr));
+       }
+       return 0;
+}
+
 static ssize_t ext4_attr_show(struct kobject *kobj,
                              struct attribute *attr, char *buf)
 {
        struct ext4_sb_info *sbi = container_of(kobj, struct ext4_sb_info,
                                                s_kobj);
        struct ext4_attr *a = container_of(attr, struct ext4_attr, attr);
-       void *ptr = calc_ptr(a, sbi);
 
        switch (a->attr_id) {
        case attr_delayed_allocation_blocks:
@@ -391,45 +420,6 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
                return sysfs_emit(buf, "%llu\n",
                                (unsigned long long)
                        percpu_counter_sum(&sbi->s_sra_exceeded_retry_limit));
-       case attr_inode_readahead:
-       case attr_pointer_ui:
-               if (!ptr)
-                       return 0;
-               if (a->attr_ptr == ptr_ext4_super_block_offset)
-                       return sysfs_emit(buf, "%u\n",
-                                       le32_to_cpup(ptr));
-               else
-                       return sysfs_emit(buf, "%u\n",
-                                       *((unsigned int *) ptr));
-       case attr_pointer_ul:
-               if (!ptr)
-                       return 0;
-               return sysfs_emit(buf, "%lu\n",
-                               *((unsigned long *) ptr));
-       case attr_pointer_u8:
-               if (!ptr)
-                       return 0;
-               return sysfs_emit(buf, "%u\n",
-                               *((unsigned char *) ptr));
-       case attr_pointer_u64:
-               if (!ptr)
-                       return 0;
-               if (a->attr_ptr == ptr_ext4_super_block_offset)
-                       return sysfs_emit(buf, "%llu\n",
-                                       le64_to_cpup(ptr));
-               else
-                       return sysfs_emit(buf, "%llu\n",
-                                       *((unsigned long long *) ptr));
-       case attr_pointer_string:
-               if (!ptr)
-                       return 0;
-               return sysfs_emit(buf, "%.*s\n", a->attr_size,
-                               (char *) ptr);
-       case attr_pointer_atomic:
-               if (!ptr)
-                       return 0;
-               return sysfs_emit(buf, "%d\n",
-                               atomic_read((atomic_t *) ptr));
        case attr_feature:
                return sysfs_emit(buf, "supported\n");
        case attr_first_error_time:
@@ -438,9 +428,9 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
                return print_tstamp(buf, sbi->s_es, s_last_error_time);
        case attr_journal_task:
                return journal_task_show(sbi, buf);
+       default:
+               return ext4_generic_attr_show(a, sbi, buf);
        }
-
-       return 0;
 }
 
 static ssize_t ext4_generic_attr_store(struct ext4_attr *a,