@@ -366,13 +366,42 @@ static ssize_t __print_tstamp(char *buf, __le32 lo, __u8 hi)
366366#define print_tstamp (buf , es , tstamp ) \
367367 __print_tstamp(buf, (es)->tstamp, (es)->tstamp ## _hi)
368368
369+ static ssize_t ext4_generic_attr_show (struct ext4_attr * a ,
370+ struct ext4_sb_info * sbi , char * buf )
371+ {
372+ void * ptr = calc_ptr (a , sbi );
373+
374+ if (!ptr )
375+ return 0 ;
376+
377+ switch (a -> attr_id ) {
378+ case attr_inode_readahead :
379+ case attr_pointer_ui :
380+ if (a -> attr_ptr == ptr_ext4_super_block_offset )
381+ return sysfs_emit (buf , "%u\n" , le32_to_cpup (ptr ));
382+ return sysfs_emit (buf , "%u\n" , * ((unsigned int * ) ptr ));
383+ case attr_pointer_ul :
384+ return sysfs_emit (buf , "%lu\n" , * ((unsigned long * ) ptr ));
385+ case attr_pointer_u8 :
386+ return sysfs_emit (buf , "%u\n" , * ((unsigned char * ) ptr ));
387+ case attr_pointer_u64 :
388+ if (a -> attr_ptr == ptr_ext4_super_block_offset )
389+ return sysfs_emit (buf , "%llu\n" , le64_to_cpup (ptr ));
390+ return sysfs_emit (buf , "%llu\n" , * ((unsigned long long * ) ptr ));
391+ case attr_pointer_string :
392+ return sysfs_emit (buf , "%.*s\n" , a -> attr_size , (char * ) ptr );
393+ case attr_pointer_atomic :
394+ return sysfs_emit (buf , "%d\n" , atomic_read ((atomic_t * ) ptr ));
395+ }
396+ return 0 ;
397+ }
398+
369399static ssize_t ext4_attr_show (struct kobject * kobj ,
370400 struct attribute * attr , char * buf )
371401{
372402 struct ext4_sb_info * sbi = container_of (kobj , struct ext4_sb_info ,
373403 s_kobj );
374404 struct ext4_attr * a = container_of (attr , struct ext4_attr , attr );
375- void * ptr = calc_ptr (a , sbi );
376405
377406 switch (a -> attr_id ) {
378407 case attr_delayed_allocation_blocks :
@@ -391,45 +420,6 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
391420 return sysfs_emit (buf , "%llu\n" ,
392421 (unsigned long long )
393422 percpu_counter_sum (& sbi -> s_sra_exceeded_retry_limit ));
394- case attr_inode_readahead :
395- case attr_pointer_ui :
396- if (!ptr )
397- return 0 ;
398- if (a -> attr_ptr == ptr_ext4_super_block_offset )
399- return sysfs_emit (buf , "%u\n" ,
400- le32_to_cpup (ptr ));
401- else
402- return sysfs_emit (buf , "%u\n" ,
403- * ((unsigned int * ) ptr ));
404- case attr_pointer_ul :
405- if (!ptr )
406- return 0 ;
407- return sysfs_emit (buf , "%lu\n" ,
408- * ((unsigned long * ) ptr ));
409- case attr_pointer_u8 :
410- if (!ptr )
411- return 0 ;
412- return sysfs_emit (buf , "%u\n" ,
413- * ((unsigned char * ) ptr ));
414- case attr_pointer_u64 :
415- if (!ptr )
416- return 0 ;
417- if (a -> attr_ptr == ptr_ext4_super_block_offset )
418- return sysfs_emit (buf , "%llu\n" ,
419- le64_to_cpup (ptr ));
420- else
421- return sysfs_emit (buf , "%llu\n" ,
422- * ((unsigned long long * ) ptr ));
423- case attr_pointer_string :
424- if (!ptr )
425- return 0 ;
426- return sysfs_emit (buf , "%.*s\n" , a -> attr_size ,
427- (char * ) ptr );
428- case attr_pointer_atomic :
429- if (!ptr )
430- return 0 ;
431- return sysfs_emit (buf , "%d\n" ,
432- atomic_read ((atomic_t * ) ptr ));
433423 case attr_feature :
434424 return sysfs_emit (buf , "supported\n" );
435425 case attr_first_error_time :
@@ -438,9 +428,9 @@ static ssize_t ext4_attr_show(struct kobject *kobj,
438428 return print_tstamp (buf , sbi -> s_es , s_last_error_time );
439429 case attr_journal_task :
440430 return journal_task_show (sbi , buf );
431+ default :
432+ return ext4_generic_attr_show (a , sbi , buf );
441433 }
442-
443- return 0 ;
444434}
445435
446436static ssize_t ext4_generic_attr_store (struct ext4_attr * a ,
0 commit comments