procfs.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:18k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /* -*- linux-c -*- */
  2. /* fs/reiserfs/procfs.c */
  3. /*
  4.  * Copyright 2000 by Hans Reiser, licensing governed by reiserfs/README
  5.  */
  6. /* proc info support a la one created by Sizif@Botik.RU for PGC */
  7. /* $Id: procfs.c,v 1.1.8.2 2001/07/15 17:08:42 god Exp $ */
  8. #include <linux/config.h>
  9. #include <linux/module.h>
  10. #include <linux/sched.h>
  11. #include <asm/uaccess.h>
  12. #include <linux/reiserfs_fs.h>
  13. #include <linux/reiserfs_fs_sb.h>
  14. #include <linux/smp_lock.h>
  15. #include <linux/locks.h>
  16. #include <linux/init.h>
  17. #include <linux/proc_fs.h>
  18. #if defined( REISERFS_PROC_INFO )
  19. /*
  20.  * LOCKING:
  21.  *
  22.  * We rely on new Alexander Viro's super-block locking.
  23.  *
  24.  */
  25. static struct super_block *procinfo_prologue( kdev_t dev )
  26. {
  27. struct super_block *result;
  28. /* get super-block by device */
  29. result = get_super( dev );
  30. if( result != NULL ) {
  31. if( !reiserfs_is_super( result ) ) {
  32. printk( KERN_DEBUG "reiserfs: procfs-52: "
  33. "non-reiserfs super foundn" );
  34. drop_super( result );
  35. result = NULL;
  36. }
  37. } else
  38. printk( KERN_DEBUG "reiserfs: procfs-74: "
  39. "race between procinfo and umountn" );
  40. return result;
  41. }
  42. int procinfo_epilogue( struct super_block *super )
  43. {
  44. drop_super( super );
  45. return 0;
  46. }
  47. int reiserfs_proc_tail( int len, char *buffer, char **start, 
  48. off_t offset, int count, int *eof )
  49. {
  50. /* this is black procfs magic */
  51. if( offset >= len ) {
  52. *start = buffer;
  53. *eof = 1;
  54. return 0;
  55. }
  56. *start = buffer + offset;
  57. if( ( len -= offset ) > count ) {
  58. return count;
  59. }
  60. *eof = 1;
  61. return len;
  62. }
  63. int reiserfs_version_in_proc( char *buffer, char **start, off_t offset,
  64.       int count, int *eof, void *data )
  65. {
  66. int len = 0;
  67. struct super_block *sb;
  68. char *format;
  69.     
  70. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  71. if( sb == NULL )
  72. return -ENOENT;
  73. if ( sb->u.reiserfs_sb.s_properties & (1 << REISERFS_3_6) ) {
  74. format = "3.6";
  75. } else if ( sb->u.reiserfs_sb.s_properties & (1 << REISERFS_3_5) ) {
  76. format = "3.5";
  77. } else {
  78. format = "unknown";
  79. }
  80. len += sprintf( &buffer[ len ], "%s formattwith checks %sn",
  81. format,
  82. #if defined( CONFIG_REISERFS_CHECK )
  83. "on"
  84. #else
  85. "off"
  86. #endif
  87. );
  88. procinfo_epilogue( sb );
  89. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  90. }
  91. int reiserfs_global_version_in_proc( char *buffer, char **start, off_t offset,
  92.      int count, int *eof, void *data )
  93. {
  94. int len = 0;
  95.     
  96. len += sprintf( &buffer[ len ], "%s [%s]n", 
  97. reiserfs_get_version_string(),
  98. #if defined( CONFIG_REISERFS_FS_MODULE )
  99. "as module"
  100. #else
  101. "built into kernel"
  102. #endif
  103. );
  104. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  105. }
  106. #define SF( x ) ( r -> x )
  107. #define SFP( x ) SF( s_proc_info_data.x )
  108. #define SFPL( x ) SFP( x[ level ] )
  109. #define SFPF( x ) SFP( find_forward.x )
  110. #define SFPJ( x ) SFP( journal.x )
  111. #define D2C( x ) le16_to_cpu( x )
  112. #define D4C( x ) le32_to_cpu( x )
  113. #define DF( x ) D2C( rs -> x )
  114. #define DFL( x ) D4C( rs -> x )
  115. #define objectid_map( s, rs ) (old_format_only (s) ?
  116.                          (__u32 *)((struct reiserfs_super_block_v1 *)rs + 1) :
  117.  (__u32 *)(rs + 1))
  118. #define MAP( i ) D4C( objectid_map( sb, rs )[ i ] )
  119. #define DJF( x ) le32_to_cpu( rs -> x )
  120. #define JF( x ) ( r -> s_journal -> x )
  121. int reiserfs_super_in_proc( char *buffer, char **start, off_t offset,
  122.     int count, int *eof, void *data )
  123. {
  124. struct super_block *sb;
  125. struct reiserfs_sb_info *r;
  126. int len = 0;
  127.     
  128. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  129. if( sb == NULL )
  130. return -ENOENT;
  131. r = &sb->u.reiserfs_sb;
  132. len += sprintf( &buffer[ len ], 
  133. "state: t%sn"
  134. "mount options: t%s%s%s%s%s%s%s%s%s%s%s%sn"
  135. "gen. counter: t%in"
  136. "s_kmallocs: t%in"
  137. "s_disk_reads: t%in"
  138. "s_disk_writes: t%in"
  139. "s_fix_nodes: t%in"
  140. "s_do_balance: t%in"
  141. "s_unneeded_left_neighbor: t%in"
  142. "s_good_search_by_key_reada: t%in"
  143. "s_bmaps: t%in"
  144. "s_bmaps_without_search: t%in"
  145. "s_direct2indirect: t%in"
  146. "s_indirect2direct: t%in"
  147. "n"
  148. "max_hash_collisions: t%in"
  149. "breads: t%lun"
  150. "bread_misses: t%lun"
  151. "search_by_key: t%lun"
  152. "search_by_key_fs_changed: t%lun"
  153. "search_by_key_restarted: t%lun"
  154. "leaked_oid: t%lun"
  155. "leaves_removable: t%lun",
  156. SF( s_mount_state ) == REISERFS_VALID_FS ?
  157. "REISERFS_VALID_FS" : "REISERFS_ERROR_FS",
  158. reiserfs_r5_hash( sb ) ? "FORCE_R5 " : "",
  159. reiserfs_rupasov_hash( sb ) ? "FORCE_RUPASOV " : "",
  160. reiserfs_tea_hash( sb ) ? "FORCE_TEA " : "",
  161. reiserfs_hash_detect( sb ) ? "DETECT_HASH " : "",
  162. reiserfs_no_border( sb ) ? "NO_BORDER " : "BORDER ",
  163. reiserfs_no_unhashed_relocation( sb ) ? "NO_UNHASHED_RELOCATION " : "",
  164. reiserfs_hashed_relocation( sb ) ? "UNHASHED_RELOCATION " : "",
  165. reiserfs_test4( sb ) ? "TEST4 " : "",
  166. dont_have_tails( sb ) ? "NO_TAILS " : "TAILS ",
  167. replay_only( sb ) ? "REPLAY_ONLY " : "",
  168. reiserfs_dont_log( sb ) ? "DONT_LOG " : "LOG ",
  169. convert_reiserfs( sb ) ? "CONV " : "",
  170. atomic_read( &r -> s_generation_counter ),
  171. SF( s_kmallocs ),
  172. SF( s_disk_reads ),
  173. SF( s_disk_writes ),
  174. SF( s_fix_nodes ),
  175. SF( s_do_balance ),
  176. SF( s_unneeded_left_neighbor ),
  177. SF( s_good_search_by_key_reada ),
  178. SF( s_bmaps ),
  179. SF( s_bmaps_without_search ),
  180. SF( s_direct2indirect ),
  181. SF( s_indirect2direct ),
  182. SFP( max_hash_collisions ),
  183. SFP( breads ),
  184. SFP( bread_miss ),
  185. SFP( search_by_key ),
  186. SFP( search_by_key_fs_changed ),
  187. SFP( search_by_key_restarted ),
  188. SFP( leaked_oid ),
  189. SFP( leaves_removable ) );
  190. procinfo_epilogue( sb );
  191. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  192. }
  193. int reiserfs_per_level_in_proc( char *buffer, char **start, off_t offset,
  194. int count, int *eof, void *data )
  195. {
  196. struct super_block *sb;
  197. struct reiserfs_sb_info *r;
  198. int len = 0;
  199. int level;
  200. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  201. if( sb == NULL )
  202. return -ENOENT;
  203. r = &sb->u.reiserfs_sb;
  204. len += sprintf( &buffer[ len ],
  205. "levelt"
  206. "     balances"
  207. " [sbk:  reads"
  208. "   fs_changed"
  209. "   restarted]"
  210. "   free space"
  211. "        items"
  212. "   can_remove"
  213. "         lnum"
  214. "         rnum"
  215. "       lbytes"
  216. "       rbytes"
  217. "     get_neig"
  218. " get_neig_res"
  219. "  need_l_neig"
  220. "  need_r_neig"
  221. "n"
  222. );
  223. for( level = 0 ; level < MAX_HEIGHT ; ++ level ) {
  224. if( len > PAGE_SIZE - 240 ) {
  225. len += sprintf( &buffer[ len ], "... and moren" );
  226. break;
  227. }
  228. len += sprintf( &buffer[ len ], 
  229. "%it"
  230. " %12lu"
  231. " %12lu"
  232. " %12lu"
  233. " %12lu"
  234. " %12lu"
  235. " %12lu"
  236. " %12lu"
  237. " %12li"
  238. " %12li"
  239. " %12li"
  240. " %12li"
  241. " %12lu"
  242. " %12lu"
  243. " %12lu"
  244. " %12lu"
  245. "n",
  246. level, 
  247. SFPL( balance_at ),
  248. SFPL( sbk_read_at ),
  249. SFPL( sbk_fs_changed ),
  250. SFPL( sbk_restarted ),
  251. SFPL( free_at ),
  252. SFPL( items_at ),
  253. SFPL( can_node_be_removed ),
  254. SFPL( lnum ),
  255. SFPL( rnum ),
  256. SFPL( lbytes ),
  257. SFPL( rbytes ),
  258. SFPL( get_neighbors ),
  259. SFPL( get_neighbors_restart ),
  260. SFPL( need_l_neighbor ),
  261. SFPL( need_r_neighbor )
  262. );
  263. }
  264. procinfo_epilogue( sb );
  265. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  266. }
  267. int reiserfs_bitmap_in_proc( char *buffer, char **start, off_t offset,
  268.      int count, int *eof, void *data )
  269. {
  270. struct super_block *sb;
  271. struct reiserfs_sb_info *r = &sb->u.reiserfs_sb;
  272. int len = 0;
  273.     
  274. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  275. if( sb == NULL )
  276. return -ENOENT;
  277. r = &sb->u.reiserfs_sb;
  278. len += sprintf( &buffer[ len ], "free_block: %lun"
  279. "find_forward:"
  280. "         wait"
  281. "         bmap"
  282. "        retry"
  283. " journal_hint"
  284. "  journal_out"
  285. "n"
  286. " %12lu"
  287. " %12lu"
  288. " %12lu"
  289. " %12lu"
  290. " %12lu"
  291. " %12lu"
  292. "n",
  293. SFP( free_block ),
  294. SFPF( call ), 
  295. SFPF( wait ), 
  296. SFPF( bmap ),
  297. SFPF( retry ),
  298. SFPF( in_journal_hint ),
  299. SFPF( in_journal_out ) );
  300. procinfo_epilogue( sb );
  301. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  302. }
  303. int reiserfs_on_disk_super_in_proc( char *buffer, char **start, off_t offset,
  304.     int count, int *eof, void *data )
  305. {
  306. struct super_block *sb;
  307. struct reiserfs_sb_info *sb_info;
  308. struct reiserfs_super_block *rs;
  309. int hash_code;
  310. int len = 0;
  311.     
  312. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  313. if( sb == NULL )
  314. return -ENOENT;
  315. sb_info = &sb->u.reiserfs_sb;
  316. rs = sb_info -> s_rs;
  317. hash_code = DFL( s_hash_function_code );
  318. len += sprintf( &buffer[ len ], 
  319. "block_count: t%in"
  320. "free_blocks: t%in"
  321. "root_block: t%in"
  322. "blocksize: t%in"
  323. "oid_maxsize: t%in"
  324. "oid_cursize: t%in"
  325. "state: t%in"
  326. "magic: t%12.12sn"
  327. "hash: t%sn"
  328. "tree_height: t%in"
  329. "bmap_nr: t%in"
  330. "version: t%in",
  331. DFL( s_block_count ),
  332. DFL( s_free_blocks ),
  333. DFL( s_root_block ),
  334. DF( s_blocksize ),
  335. DF( s_oid_maxsize ),
  336. DF( s_oid_cursize ),
  337. DF( s_state ),
  338. rs -> s_magic,
  339. hash_code == TEA_HASH ? "tea" :
  340. ( hash_code == YURA_HASH ) ? "rupasov" :
  341. ( hash_code == R5_HASH ) ? "r5" :
  342. ( hash_code == UNSET_HASH ) ? "unset" : "unknown",
  343. DF( s_tree_height ),
  344. DF( s_bmap_nr ),
  345. DF( s_version ) );
  346. procinfo_epilogue( sb );
  347. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  348. }
  349. int reiserfs_oidmap_in_proc( char *buffer, char **start, off_t offset,
  350.      int count, int *eof, void *data )
  351. {
  352. struct super_block *sb;
  353. struct reiserfs_sb_info *sb_info;
  354. struct reiserfs_super_block *rs;
  355. int i;
  356. unsigned int mapsize;
  357. unsigned long total_used;
  358. int len = 0;
  359. int exact;
  360.     
  361. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  362. if( sb == NULL )
  363. return -ENOENT;
  364. sb_info = &sb->u.reiserfs_sb;
  365. rs = sb_info -> s_rs;
  366. mapsize = le16_to_cpu( rs -> s_oid_cursize );
  367. total_used = 0;
  368. for( i = 0 ; i < mapsize ; ++i ) {
  369. __u32 right;
  370. right = ( i == mapsize - 1 ) ? MAX_KEY_OBJECTID : MAP( i + 1 );
  371. len += sprintf( &buffer[ len ], "%s: [ %x .. %x )n",
  372. ( i & 1 ) ? "free" : "used", MAP( i ), right );
  373. if( ! ( i & 1 ) ) {
  374. total_used += right - MAP( i );
  375. }
  376. if( len > PAGE_SIZE - 100 ) {
  377. len += sprintf( &buffer[ len ], "... and moren" );
  378. break;
  379. }
  380. }
  381. #if defined( REISERFS_USE_OIDMAPF )
  382. if( sb_info -> oidmap.use_file && ( sb_info -> oidmap.mapf != NULL ) ) {
  383. loff_t size;
  384. size = sb_info -> oidmap.mapf -> f_dentry -> d_inode -> i_size;
  385. total_used += size / sizeof( reiserfs_oidinterval_d_t );
  386. exact = 1;
  387. } else
  388. #endif
  389. {
  390. exact = ( i == mapsize );
  391. }
  392. len += sprintf( &buffer[ len ], "total: t%i [%i/%i] used: %lu [%s]n", 
  393. i, 
  394. mapsize, le16_to_cpu( rs -> s_oid_maxsize ),
  395. total_used, exact ? "exact" : "estimation" );
  396. procinfo_epilogue( sb );
  397. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  398. }
  399. int reiserfs_journal_in_proc( char *buffer, char **start, off_t offset,
  400.       int count, int *eof, void *data )
  401. {
  402. struct super_block *sb;
  403. struct reiserfs_sb_info *r;
  404. struct reiserfs_super_block *rs;
  405. int len = 0;
  406.     
  407. sb = procinfo_prologue( ( kdev_t ) ( long ) data );
  408. if( sb == NULL )
  409. return -ENOENT;
  410. r = &sb->u.reiserfs_sb;
  411. rs = r -> s_rs;
  412. len += sprintf( &buffer[ len ], 
  413. /* on-disk fields */
  414. "s_journal_block: t%in"
  415. "s_journal_dev: t%s[%x]n"
  416. "s_orig_journal_size: t%in"
  417. "s_journal_trans_max: t%in"
  418. "s_journal_block_count: t%in"
  419. "s_journal_max_batch: t%in"
  420. "s_journal_max_commit_age: t%in"
  421. "s_journal_max_trans_age: t%in"
  422. /* incore fields */
  423. "j_state: t%lin"
  424. "j_trans_id: t%lun"
  425. "j_mount_id: t%lun"
  426. "j_start: t%lun"
  427. "j_len: t%lun"
  428. "j_len_alloc: t%lun"
  429. "j_wcount: t%in"
  430. "j_bcount: t%lun"
  431. "j_first_unflushed_offset: t%lun"
  432. "j_last_flush_trans_id: t%lun"
  433. "j_trans_start_time: t%lin"
  434. "j_journal_list_index: t%in"
  435. "j_list_bitmap_index: t%in"
  436. "j_must_wait: t%in"
  437. "j_next_full_flush: t%in"
  438. "j_next_async_flush: t%in"
  439. "j_cnode_used: t%in"
  440. "j_cnode_free: t%in"
  441. "n"
  442. /* reiserfs_proc_info_data_t.journal fields */
  443. "in_journal: t%12lun"
  444. "in_journal_bitmap: t%12lun"
  445. "in_journal_reusable: t%12lun"
  446. "lock_journal: t%12lun"
  447. "lock_journal_wait: t%12lun"
  448. "journal_begin: t%12lun"
  449. "journal_relock_writers: t%12lun"
  450. "journal_relock_wcount: t%12lun"
  451. "mark_dirty: t%12lun"
  452. "mark_dirty_already: t%12lun"
  453. "mark_dirty_notjournal: t%12lun"
  454. "restore_prepared: t%12lun"
  455. "prepare: t%12lun"
  456. "prepare_retry: t%12lun",
  457. DJF( s_journal_block ),
  458. DJF( s_journal_dev ) == 0 ? "none" : bdevname( DJF( s_journal_dev ) ), 
  459. DJF( s_journal_dev ),
  460. DJF( s_orig_journal_size ),
  461. DJF( s_journal_trans_max ),
  462. DJF( s_journal_block_count ),
  463. DJF( s_journal_max_batch ),
  464. DJF( s_journal_max_commit_age ),
  465. DJF( s_journal_max_trans_age ),
  466. JF( j_state ),
  467. JF( j_trans_id ),
  468. JF( j_mount_id ),
  469. JF( j_start ),
  470. JF( j_len ),
  471. JF( j_len_alloc ),
  472. atomic_read( & r -> s_journal -> j_wcount ),
  473. JF( j_bcount ),
  474. JF( j_first_unflushed_offset ),
  475. JF( j_last_flush_trans_id ),
  476. JF( j_trans_start_time ),
  477. JF( j_journal_list_index ),
  478. JF( j_list_bitmap_index ),
  479. JF( j_must_wait ),
  480. JF( j_next_full_flush ),
  481. JF( j_next_async_flush ),
  482. JF( j_cnode_used ),
  483. JF( j_cnode_free ),
  484. SFPJ( in_journal ),
  485. SFPJ( in_journal_bitmap ),
  486. SFPJ( in_journal_reusable ),
  487. SFPJ( lock_journal ),
  488. SFPJ( lock_journal_wait ),
  489. SFPJ( journal_being ),
  490. SFPJ( journal_relock_writers ),
  491. SFPJ( journal_relock_wcount ),
  492. SFPJ( mark_dirty ),
  493. SFPJ( mark_dirty_already ),
  494. SFPJ( mark_dirty_notjournal ),
  495. SFPJ( restore_prepared ),
  496. SFPJ( prepare ),
  497. SFPJ( prepare_retry )
  498. );
  499. procinfo_epilogue( sb );
  500. return reiserfs_proc_tail( len, buffer, start, offset, count, eof );
  501. }
  502. static struct proc_dir_entry *proc_info_root = NULL;
  503. static const char *proc_info_root_name = "fs/reiserfs";
  504. int reiserfs_proc_info_init( struct super_block *sb )
  505. {
  506. spin_lock_init( & __PINFO( sb ).lock );
  507. sb->u.reiserfs_sb.procdir = proc_mkdir( bdevname( sb -> s_dev ), 
  508. proc_info_root );
  509. if( sb->u.reiserfs_sb.procdir ) {
  510. sb->u.reiserfs_sb.procdir -> owner = THIS_MODULE;
  511. return 0;
  512. }
  513. reiserfs_warning( "reiserfs: cannot create /proc/%s/%sn",
  514.   proc_info_root_name, bdevname( sb -> s_dev ) );
  515. return 1;
  516. }
  517. int reiserfs_proc_info_done( struct super_block *sb )
  518. {
  519. spin_lock( & __PINFO( sb ).lock );
  520. __PINFO( sb ).exiting = 1;
  521. spin_unlock( & __PINFO( sb ).lock );
  522. if ( proc_info_root ) {
  523. remove_proc_entry( bdevname( sb -> s_dev ), proc_info_root );
  524. sb->u.reiserfs_sb.procdir = NULL;
  525. }
  526. return 0;
  527. }
  528. /* Create /proc/fs/reiserfs/DEV/name and attach read procedure @func
  529.    to it.  Other parts of reiserfs use this function to make their
  530.    per-device statistics available via /proc */
  531. struct proc_dir_entry *reiserfs_proc_register( struct super_block *sb, 
  532.        char *name, read_proc_t *func )
  533. {
  534. return ( sb->u.reiserfs_sb.procdir ) ? create_proc_read_entry
  535. ( name, 0, sb->u.reiserfs_sb.procdir, func, 
  536.   ( void * ) ( long ) sb -> s_dev ) : NULL;
  537. }
  538. void reiserfs_proc_unregister( struct super_block *sb, const char *name )
  539. {
  540. remove_proc_entry( name, sb->u.reiserfs_sb.procdir );
  541. }
  542. struct proc_dir_entry *reiserfs_proc_register_global( char *name, 
  543.       read_proc_t *func )
  544. {
  545. return ( proc_info_root ) ? create_proc_read_entry( name, 0, 
  546.     proc_info_root, 
  547.     func, NULL ) : NULL;
  548. }
  549. void reiserfs_proc_unregister_global( const char *name )
  550. {
  551. remove_proc_entry( name, proc_info_root );
  552. }
  553. int reiserfs_proc_info_global_init( void )
  554. {
  555. if( proc_info_root == NULL ) {
  556. proc_info_root = proc_mkdir( proc_info_root_name, 0 );
  557. if( proc_info_root ) {
  558. proc_info_root -> owner = THIS_MODULE;
  559. } else {
  560. reiserfs_warning( "reiserfs: cannot create /proc/%sn",
  561.   proc_info_root_name );
  562. return 1;
  563. }
  564. }
  565. return 0;
  566. }
  567. int reiserfs_proc_info_global_done( void )
  568. {
  569. if ( proc_info_root != NULL ) {
  570. proc_info_root = NULL;
  571. remove_proc_entry( proc_info_root_name, 0 );
  572. }
  573. return 0;
  574. }
  575. /* REISERFS_PROC_INFO */
  576. #else
  577. int reiserfs_proc_info_init( struct super_block *sb ) { return 0; }
  578. int reiserfs_proc_info_done( struct super_block *sb ) { return 0; }
  579. struct proc_dir_entry *reiserfs_proc_register( struct super_block *sb, 
  580.        char *name, 
  581.        read_proc_t *func ) 
  582. { return NULL; }
  583. void reiserfs_proc_unregister( struct super_block *sb, const char *name ) 
  584. {;}
  585. struct proc_dir_entry *reiserfs_proc_register_global( char *name, 
  586.       read_proc_t *func )
  587. { return NULL; }
  588. void reiserfs_proc_unregister_global( const char *name ) {;}
  589. int reiserfs_proc_info_global_init( void ) { return 0; }
  590. int reiserfs_proc_info_global_done( void ) { return 0; }
  591. int reiserfs_global_version_in_proc( char *buffer, char **start, 
  592.      off_t offset,
  593.      int count, int *eof, void *data )
  594. { return 0; }
  595. int reiserfs_version_in_proc( char *buffer, char **start, off_t offset,
  596.       int count, int *eof, void *data )
  597. { return 0; }
  598. int reiserfs_super_in_proc( char *buffer, char **start, off_t offset,
  599.     int count, int *eof, void *data )
  600. { return 0; }
  601. int reiserfs_per_level_in_proc( char *buffer, char **start, off_t offset,
  602. int count, int *eof, void *data )
  603. { return 0; }
  604. int reiserfs_bitmap_in_proc( char *buffer, char **start, off_t offset,
  605.      int count, int *eof, void *data )
  606. { return 0; }
  607. int reiserfs_on_disk_super_in_proc( char *buffer, char **start, off_t offset,
  608.     int count, int *eof, void *data )
  609. { return 0; }
  610. int reiserfs_oidmap_in_proc( char *buffer, char **start, off_t offset,
  611.      int count, int *eof, void *data )
  612. { return 0; }
  613. int reiserfs_journal_in_proc( char *buffer, char **start, off_t offset,
  614.       int count, int *eof, void *data )
  615. { return 0; }
  616. /* REISERFS_PROC_INFO */
  617. #endif
  618. /*
  619.  * $Log: procfs.c,v $
  620.  * Revision 1.1.8.2  2001/07/15 17:08:42  god
  621.  *  . use get_super() in procfs.c
  622.  *  . remove remove_save_link() from reiserfs_do_truncate()
  623.  *
  624.  * I accept terms and conditions stated in the Legal Agreement
  625.  * (available at http://www.namesys.com/legalese.html)
  626.  *
  627.  * Revision 1.1.8.1  2001/07/11 16:48:50  god
  628.  * proc info support
  629.  *
  630.  * I accept terms and conditions stated in the Legal Agreement
  631.  * (available at http://www.namesys.com/legalese.html)
  632.  *
  633.  */
  634. /* 
  635.  * Make Linus happy.
  636.  * Local variables:
  637.  * c-indentation-style: "K&R"
  638.  * mode-name: "LC"
  639.  * c-basic-offset: 8
  640.  * tab-width: 8
  641.  * End:
  642.  */