~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/reiserfs/procfs.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /fs/reiserfs/procfs.c (Version linux-6.12-rc7) and /fs/reiserfs/procfs.c (Version linux-5.4.284)


** Warning: Cannot open xref database.

  1 /* -*- linux-c -*- */                               1 
  2                                                   
  3 /* fs/reiserfs/procfs.c */                        
  4                                                   
  5 /*                                                
  6  * Copyright 2000 by Hans Reiser, licensing go    
  7  */                                               
  8                                                   
  9 /* proc info support a la one created by Sizif    
 10                                                   
 11 #include <linux/module.h>                         
 12 #include <linux/time.h>                           
 13 #include <linux/seq_file.h>                       
 14 #include <linux/uaccess.h>                        
 15 #include "reiserfs.h"                             
 16 #include <linux/init.h>                           
 17 #include <linux/proc_fs.h>                        
 18 #include <linux/blkdev.h>                         
 19                                                   
 20 /*                                                
 21  * LOCKING:                                       
 22  *                                                
 23  * These guys are evicted from procfs as the v    
 24  *                                                
 25  */                                               
 26                                                   
 27 static int show_version(struct seq_file *m, vo    
 28 {                                                 
 29         struct super_block *sb = m->private;      
 30         char *format;                             
 31                                                   
 32         if (REISERFS_SB(sb)->s_properties & (1    
 33                 format = "3.6";                   
 34         } else if (REISERFS_SB(sb)->s_properti    
 35                 format = "3.5";                   
 36         } else {                                  
 37                 format = "unknown";               
 38         }                                         
 39                                                   
 40         seq_printf(m, "%s format\twith checks     
 41 #if defined( CONFIG_REISERFS_CHECK )              
 42                    "on"                           
 43 #else                                             
 44                    "off"                          
 45 #endif                                            
 46             );                                    
 47         return 0;                                 
 48 }                                                 
 49                                                   
 50 #define SF( x ) ( r -> x )                        
 51 #define SFP( x ) SF( s_proc_info_data.x )         
 52 #define SFPL( x ) SFP( x[ level ] )               
 53 #define SFPF( x ) SFP( scan_bitmap.x )            
 54 #define SFPJ( x ) SFP( journal.x )                
 55                                                   
 56 #define D2C( x ) le16_to_cpu( x )                 
 57 #define D4C( x ) le32_to_cpu( x )                 
 58 #define DF( x ) D2C( rs -> s_v1.x )               
 59 #define DFL( x ) D4C( rs -> s_v1.x )              
 60                                                   
 61 #define objectid_map( s, rs ) (old_format_only    
 62                          (__le32 *)((struct re    
 63                          (__le32 *)(rs + 1))      
 64 #define MAP( i ) D4C( objectid_map( sb, rs )[     
 65                                                   
 66 #define DJF( x ) le32_to_cpu( rs -> x )           
 67 #define DJP( x ) le32_to_cpu( jp -> x )           
 68 #define JF( x ) ( r -> s_journal -> x )           
 69                                                   
 70 static int show_super(struct seq_file *m, void    
 71 {                                                 
 72         struct super_block *sb = m->private;      
 73         struct reiserfs_sb_info *r = REISERFS_    
 74                                                   
 75         seq_printf(m, "state: \t%s\n"             
 76                    "mount options: \t%s%s%s%s%    
 77                    "gen. counter: \t%i\n"         
 78                    "s_disk_reads: \t%i\n"         
 79                    "s_disk_writes: \t%i\n"        
 80                    "s_fix_nodes: \t%i\n"          
 81                    "s_do_balance: \t%i\n"         
 82                    "s_unneeded_left_neighbor:     
 83                    "s_good_search_by_key_reada    
 84                    "s_bmaps: \t%i\n"              
 85                    "s_bmaps_without_search: \t    
 86                    "s_direct2indirect: \t%i\n"    
 87                    "s_indirect2direct: \t%i\n"    
 88                    "\n"                           
 89                    "max_hash_collisions: \t%i\    
 90                    "breads: \t%lu\n"              
 91                    "bread_misses: \t%lu\n"        
 92                    "search_by_key: \t%lu\n"       
 93                    "search_by_key_fs_changed:     
 94                    "search_by_key_restarted: \    
 95                    "insert_item_restarted: \t%    
 96                    "paste_into_item_restarted:    
 97                    "cut_from_item_restarted: \    
 98                    "delete_solid_item_restarte    
 99                    "delete_item_restarted: \t%    
100                    "leaked_oid: \t%lu\n"          
101                    "leaves_removable: \t%lu\n"    
102                    SF(s_mount_state) == REISER    
103                    "REISERFS_VALID_FS" : "REIS    
104                    reiserfs_r5_hash(sb) ? "FOR    
105                    reiserfs_rupasov_hash(sb) ?    
106                    reiserfs_tea_hash(sb) ? "FO    
107                    reiserfs_hash_detect(sb) ?     
108                    reiserfs_no_border(sb) ? "N    
109                    reiserfs_no_unhashed_reloca    
110                    "NO_UNHASHED_RELOCATION " :    
111                    reiserfs_hashed_relocation(    
112                    reiserfs_test4(sb) ? "TEST4    
113                    have_large_tails(sb) ? "TAI    
114                    "SMALL_TAILS " : "NO_TAILS     
115                    replay_only(sb) ? "REPLAY_O    
116                    convert_reiserfs(sb) ? "CON    
117                    atomic_read(&r->s_generatio    
118                    SF(s_disk_reads), SF(s_disk    
119                    SF(s_do_balance), SF(s_unne    
120                    SF(s_good_search_by_key_rea    
121                    SF(s_bmaps_without_search),    
122                    SF(s_indirect2direct), SFP(    
123                    SFP(bread_miss), SFP(search    
124                    SFP(search_by_key_fs_change    
125                    SFP(insert_item_restarted),    
126                    SFP(cut_from_item_restarted    
127                    SFP(delete_solid_item_resta    
128                    SFP(leaked_oid), SFP(leaves    
129                                                   
130         return 0;                                 
131 }                                                 
132                                                   
133 static int show_per_level(struct seq_file *m,     
134 {                                                 
135         struct super_block *sb = m->private;      
136         struct reiserfs_sb_info *r = REISERFS_    
137         int level;                                
138                                                   
139         seq_printf(m, "level\t"                   
140                    "     balances"                
141                    " [sbk:  reads"                
142                    "   fs_changed"                
143                    "   restarted]"                
144                    "   free space"                
145                    "        items"                
146                    "   can_remove"                
147                    "         lnum"                
148                    "         rnum"                
149                    "       lbytes"                
150                    "       rbytes"                
151                    "     get_neig"                
152                    " get_neig_res" "  need_l_n    
153                                                   
154         for (level = 0; level < MAX_HEIGHT; ++    
155                 seq_printf(m, "%i\t"              
156                            " %12lu"               
157                            " %12lu"               
158                            " %12lu"               
159                            " %12lu"               
160                            " %12lu"               
161                            " %12lu"               
162                            " %12lu"               
163                            " %12li"               
164                            " %12li"               
165                            " %12li"               
166                            " %12li"               
167                            " %12lu"               
168                            " %12lu"               
169                            " %12lu"               
170                            " %12lu"               
171                            "\n",                  
172                            level,                 
173                            SFPL(balance_at),      
174                            SFPL(sbk_read_at),     
175                            SFPL(sbk_fs_changed    
176                            SFPL(sbk_restarted)    
177                            SFPL(free_at),         
178                            SFPL(items_at),        
179                            SFPL(can_node_be_re    
180                            SFPL(lnum),            
181                            SFPL(rnum),            
182                            SFPL(lbytes),          
183                            SFPL(rbytes),          
184                            SFPL(get_neighbors)    
185                            SFPL(get_neighbors_    
186                            SFPL(need_l_neighbo    
187                     );                            
188         }                                         
189         return 0;                                 
190 }                                                 
191                                                   
192 static int show_bitmap(struct seq_file *m, voi    
193 {                                                 
194         struct super_block *sb = m->private;      
195         struct reiserfs_sb_info *r = REISERFS_    
196                                                   
197         seq_printf(m, "free_block: %lu\n"         
198                    "  scan_bitmap:"               
199                    "          wait"               
200                    "          bmap"               
201                    "         retry"               
202                    "        stolen"               
203                    "  journal_hint"               
204                    "journal_nohint"               
205                    "\n"                           
206                    " %14lu"                       
207                    " %14lu"                       
208                    " %14lu"                       
209                    " %14lu"                       
210                    " %14lu"                       
211                    " %14lu"                       
212                    " %14lu"                       
213                    "\n",                          
214                    SFP(free_block),               
215                    SFPF(call),                    
216                    SFPF(wait),                    
217                    SFPF(bmap),                    
218                    SFPF(retry),                   
219                    SFPF(stolen),                  
220                    SFPF(in_journal_hint), SFPF    
221                                                   
222         return 0;                                 
223 }                                                 
224                                                   
225 static int show_on_disk_super(struct seq_file     
226 {                                                 
227         struct super_block *sb = m->private;      
228         struct reiserfs_sb_info *sb_info = REI    
229         struct reiserfs_super_block *rs = sb_i    
230         int hash_code = DFL(s_hash_function_co    
231         __u32 flags = DJF(s_flags);               
232                                                   
233         seq_printf(m, "block_count: \t%i\n"       
234                    "free_blocks: \t%i\n"          
235                    "root_block: \t%i\n"           
236                    "blocksize: \t%i\n"            
237                    "oid_maxsize: \t%i\n"          
238                    "oid_cursize: \t%i\n"          
239                    "umount_state: \t%i\n"         
240                    "magic: \t%10.10s\n"           
241                    "fs_state: \t%i\n"             
242                    "hash: \t%s\n"                 
243                    "tree_height: \t%i\n"          
244                    "bmap_nr: \t%i\n"              
245                    "version: \t%i\n"              
246                    "flags: \t%x[%s]\n"            
247                    "reserved_for_journal: \t%i    
248                    DFL(s_block_count),            
249                    DFL(s_free_blocks),            
250                    DFL(s_root_block),             
251                    DF(s_blocksize),               
252                    DF(s_oid_maxsize),             
253                    DF(s_oid_cursize),             
254                    DF(s_umount_state),            
255                    rs->s_v1.s_magic,              
256                    DF(s_fs_state),                
257                    hash_code == TEA_HASH ? "te    
258                    (hash_code == YURA_HASH) ?     
259                    (hash_code == R5_HASH) ? "r    
260                    (hash_code == UNSET_HASH) ?    
261                    DF(s_tree_height),             
262                    DF(s_bmap_nr),                 
263                    DF(s_version), flags, (flag    
264                    ? "attrs_cleared" : "", DF(    
265                                                   
266         return 0;                                 
267 }                                                 
268                                                   
269 static int show_oidmap(struct seq_file *m, voi    
270 {                                                 
271         struct super_block *sb = m->private;      
272         struct reiserfs_sb_info *sb_info = REI    
273         struct reiserfs_super_block *rs = sb_i    
274         unsigned int mapsize = le16_to_cpu(rs-    
275         unsigned long total_used = 0;             
276         int i;                                    
277                                                   
278         for (i = 0; i < mapsize; ++i) {           
279                 __u32 right;                      
280                                                   
281                 right = (i == mapsize - 1) ? M    
282                 seq_printf(m, "%s: [ %x .. %x     
283                            (i & 1) ? "free" :     
284                 if (!(i & 1)) {                   
285                         total_used += right -     
286                 }                                 
287         }                                         
288 #if defined( REISERFS_USE_OIDMAPF )               
289         if (sb_info->oidmap.use_file && (sb_in    
290                 loff_t size = file_inode(sb_in    
291                 total_used += size / sizeof(re    
292         }                                         
293 #endif                                            
294         seq_printf(m, "total: \t%i [%i/%i] use    
295                    mapsize,                       
296                    mapsize, le16_to_cpu(rs->s_    
297         return 0;                                 
298 }                                                 
299                                                   
300 static time64_t ktime_mono_to_real_seconds(tim    
301 {                                                 
302         ktime_t kt = ktime_set(mono, NSEC_PER_    
303                                                   
304         return ktime_divns(ktime_mono_to_real(    
305 }                                                 
306                                                   
307 static int show_journal(struct seq_file *m, vo    
308 {                                                 
309         struct super_block *sb = m->private;      
310         struct reiserfs_sb_info *r = REISERFS_    
311         struct reiserfs_super_block *rs = r->s    
312         struct journal_params *jp = &rs->s_v1.    
313                                                   
314         seq_printf(m,           /* on-disk fie    
315                    "jp_journal_1st_block: \t%i    
316                    "jp_journal_dev: \t%pg[%x]\    
317                    "jp_journal_size: \t%i\n"      
318                    "jp_journal_trans_max: \t%i    
319                    "jp_journal_magic: \t%i\n"     
320                    "jp_journal_max_batch: \t%i    
321                    "jp_journal_max_commit_age:    
322                    "jp_journal_max_trans_age:     
323                    /* incore fields */            
324                    "j_1st_reserved_block: \t%i    
325                    "j_state: \t%li\n"             
326                    "j_trans_id: \t%u\n"           
327                    "j_mount_id: \t%lu\n"          
328                    "j_start: \t%lu\n"             
329                    "j_len: \t%lu\n"               
330                    "j_len_alloc: \t%lu\n"         
331                    "j_wcount: \t%i\n"             
332                    "j_bcount: \t%lu\n"            
333                    "j_first_unflushed_offset:     
334                    "j_last_flush_trans_id: \t%    
335                    "j_trans_start_time: \t%lli    
336                    "j_list_bitmap_index: \t%i\    
337                    "j_must_wait: \t%i\n"          
338                    "j_next_full_flush: \t%i\n"    
339                    "j_next_async_flush: \t%i\n    
340                    "j_cnode_used: \t%i\n" "j_c    
341                    /* reiserfs_proc_info_data_    
342                    "in_journal: \t%12lu\n"        
343                    "in_journal_bitmap: \t%12lu    
344                    "in_journal_reusable: \t%12    
345                    "lock_journal: \t%12lu\n"      
346                    "lock_journal_wait: \t%12lu    
347                    "journal_begin: \t%12lu\n"     
348                    "journal_relock_writers: \t    
349                    "journal_relock_wcount: \t%    
350                    "mark_dirty: \t%12lu\n"        
351                    "mark_dirty_already: \t%12l    
352                    "mark_dirty_notjournal: \t%    
353                    "restore_prepared: \t%12lu\    
354                    "prepare: \t%12lu\n"           
355                    "prepare_retry: \t%12lu\n",    
356                    DJP(jp_journal_1st_block),     
357                    file_bdev(SB_JOURNAL(sb)->j    
358                    DJP(jp_journal_dev),           
359                    DJP(jp_journal_size),          
360                    DJP(jp_journal_trans_max),     
361                    DJP(jp_journal_magic),         
362                    DJP(jp_journal_max_batch),     
363                    SB_JOURNAL(sb)->j_max_commi    
364                    DJP(jp_journal_max_trans_ag    
365                    JF(j_1st_reserved_block),      
366                    JF(j_state),                   
367                    JF(j_trans_id),                
368                    JF(j_mount_id),                
369                    JF(j_start),                   
370                    JF(j_len),                     
371                    JF(j_len_alloc),               
372                    atomic_read(&r->s_journal->    
373                    JF(j_bcount),                  
374                    JF(j_first_unflushed_offset    
375                    JF(j_last_flush_trans_id),     
376                    ktime_mono_to_real_seconds(    
377                    JF(j_list_bitmap_index),       
378                    JF(j_must_wait),               
379                    JF(j_next_full_flush),         
380                    JF(j_next_async_flush),        
381                    JF(j_cnode_used),              
382                    JF(j_cnode_free),              
383                    SFPJ(in_journal),              
384                    SFPJ(in_journal_bitmap),       
385                    SFPJ(in_journal_reusable),     
386                    SFPJ(lock_journal),            
387                    SFPJ(lock_journal_wait),       
388                    SFPJ(journal_being),           
389                    SFPJ(journal_relock_writers    
390                    SFPJ(journal_relock_wcount)    
391                    SFPJ(mark_dirty),              
392                    SFPJ(mark_dirty_already),      
393                    SFPJ(mark_dirty_notjournal)    
394                    SFPJ(restore_prepared), SFP    
395             );                                    
396         return 0;                                 
397 }                                                 
398                                                   
399 static struct proc_dir_entry *proc_info_root =    
400 static const char proc_info_root_name[] = "fs/    
401                                                   
402 static void add_file(struct super_block *sb, c    
403                      int (*func) (struct seq_f    
404 {                                                 
405         proc_create_single_data(name, 0, REISE    
406 }                                                 
407                                                   
408 int reiserfs_proc_info_init(struct super_block    
409 {                                                 
410         char b[BDEVNAME_SIZE];                    
411         char *s;                                  
412                                                   
413         /* Some block devices use /'s */          
414         strscpy(b, sb->s_id, BDEVNAME_SIZE);      
415         s = strchr(b, '/');                       
416         if (s)                                    
417                 *s = '!';                         
418                                                   
419         spin_lock_init(&__PINFO(sb).lock);        
420         REISERFS_SB(sb)->procdir = proc_mkdir_    
421         if (REISERFS_SB(sb)->procdir) {           
422                 add_file(sb, "version", show_v    
423                 add_file(sb, "super", show_sup    
424                 add_file(sb, "per-level", show    
425                 add_file(sb, "bitmap", show_bi    
426                 add_file(sb, "on-disk-super",     
427                 add_file(sb, "oidmap", show_oi    
428                 add_file(sb, "journal", show_j    
429                 return 0;                         
430         }                                         
431         reiserfs_warning(sb, "cannot create /p    
432                          proc_info_root_name,     
433         return 1;                                 
434 }                                                 
435                                                   
436 int reiserfs_proc_info_done(struct super_block    
437 {                                                 
438         struct proc_dir_entry *de = REISERFS_S    
439         if (de) {                                 
440                 char b[BDEVNAME_SIZE];            
441                 char *s;                          
442                                                   
443                 /* Some block devices use /'s     
444                 strscpy(b, sb->s_id, BDEVNAME_    
445                 s = strchr(b, '/');               
446                 if (s)                            
447                         *s = '!';                 
448                                                   
449                 remove_proc_subtree(b, proc_in    
450                 REISERFS_SB(sb)->procdir = NUL    
451         }                                         
452         return 0;                                 
453 }                                                 
454                                                   
455 int reiserfs_proc_info_global_init(void)          
456 {                                                 
457         if (proc_info_root == NULL) {             
458                 proc_info_root = proc_mkdir(pr    
459                 if (!proc_info_root) {            
460                         reiserfs_warning(NULL,    
461                                          proc_    
462                         return 1;                 
463                 }                                 
464         }                                         
465         return 0;                                 
466 }                                                 
467                                                   
468 int reiserfs_proc_info_global_done(void)          
469 {                                                 
470         if (proc_info_root != NULL) {             
471                 proc_info_root = NULL;            
472                 remove_proc_entry(proc_info_ro    
473         }                                         
474         return 0;                                 
475 }                                                 
476 /*                                                
477  * Revision 1.1.8.2  2001/07/15 17:08:42  god     
478  *  . use get_super() in procfs.c                 
479  *  . remove remove_save_link() from reiserfs_    
480  *                                                
481  * I accept terms and conditions stated in the    
482  * (available at http://www.namesys.com/legale    
483  *                                                
484  * Revision 1.1.8.1  2001/07/11 16:48:50  god     
485  * proc info support                              
486  *                                                
487  * I accept terms and conditions stated in the    
488  * (available at http://www.namesys.com/legale    
489  *                                                
490  */                                               
491                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php