mirror of
https://github.com/torvalds/linux.git
synced 2024-11-22 20:22:09 +00:00
ext4: refactor out ext4_generic_attr_show()
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>
This commit is contained in:
parent
f536808adc
commit
57341fe317
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user