2.4 reiserfs updates for 2.4.19-rc2 all in one.
PATCH 1/1 2.4 reiserfs updates for 2.4.19-rc2 all in one.
Hello!
Attached patch contains these 24 patches (all in one as you requested):
01-corrupt_items_checks.diff
Certain disk corruptions may end-up making item-type to be garbage. This patch makes reiserfs not to crash when dealing with such items.
02-ioerrors-checks-2.diff
Correctly check return value of reiserfs_find_entry for io errors.
03-key_output_fix.diff
Correctly output cpu keys as %K
04-mkdir_nospace_nowarning.diff
Do not print warnings if cannot create a dir due to no free space.
05-non4kpages_size_fix.diff
Fix a case where filesizes in blocks could be incorrectly determined if pagesize != blocksize
06-return_braindamage_removal.diff
Removal of some dead code that never can be executed.
07-rm_truncate_nospace_nowarn.diff
Do not print a warning if we cannot insert rm/truncate record into the tree due to no space condition
08-savelink_nospace_nowarning.diff
Do not print a warning if we cannot inser a savelink item into the tree due to no space condition.
09-tailconv_nospace_nowarn.diff
Do not print a warning if we cannot conwert file tail into ordinar page due to no space condition.
10-unfinished_rebuildtree_message.diff
Print a hint for a user if we encounter a filesystem that was not correctly processed by reiserfsck --rebuild-tree
11-reiserfs-bitmap-journal-read-ahead.diff
Read-ahead of journal bitmaps, this should speed-up mount times in case of journal replay. Especially on rebuilding RAID arrays.
12-v3.6_uuid_support-1.diff
Add some support for UUID and LABELs on v3.6 filesystems.
13-pap14030-not-crash-2.diff
Fix a problem where subsequent get_block() failures may lead to incorrect data in page case marced as uptodate.
14-remount-options.diff
Add support for more remount options.
15-more-procfs.diff
Add more vatiables to reiserfs procfs monitoring interface
16-blocksize_lessthan_pagesize_fix.diff
Fixes a bug in case we have pagesize > blocksize and active buffers flushing.
17-kmalloc_cleanup.diff
Convert all kmalloc's into the reiserfs_kmallocs. Make reiserfs_kmalloc to be of no extra overhead in case CONFIG_REISERFS_CHECK was not selected.
18-hash_autodetect_fix.diff
Fix hash autodetecting.
19-inode-attrs.diff
Add support for ext2-style inode attributes. Note, you must use -o attrs flag, also you must have previous attribute contents cleaned and special flag set in the superblock.
20-unlink_print_nogarbage.diff
Do not print garbage priority level on savelinks replay.
21-docupdate.diff
Update current reiserfsprogs information, fix "unused variable" warning.
22-atime_fix.diff
Correctly update atime on file access.
23-truncate-fix.diff
Add missed journal_begin call for a case where direct2indirect failed, but block for this conversion was already allocated and needs to be freed.
24-o_direct.diff
Add O_DIRECT support.
Bye,
Oleg
Documentation/Changes +2 -2
@@ -54,7 +54,7 @@ o util-linux 2.10o # fdformat --version o modutils 2.4.2 # insmod -V o e2fsprogs 1.25 # tune2fs -o reiserfsprogs 3.x.0j # reiserfsck 2>&1|grep reiserfsprogs +o reiserfsprogs 3.x.1b # reiserfsck 2>&1|grep reiserfsprogs o pcmcia-cs 3.1.21 # cardmgr -V o PPP 2.4.0 # pppd --version o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version
@@ -321,7 +321,7 @@ Reiserfsprogs ------------- -o <ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.x.0j.tar.gz> +o <ftp://ftp.namesys.com/pub/reiserfsprogs/reiserfsprogs-3.x.0b.tar.gz> LVM toolset -----------
fs/reiserfs/bitmap.c +2 -4
@@ -139,10 +139,8 @@/* preallocated blocks don't need to be run through journal_mark_freed */ void reiserfs_free_prealloc_block (struct reiserfs_transaction_handle *th,unsigned long block) { -struct super_block * s = th->t_super; - -RFALSE (!s,"vs-4060: trying to free block on nonexistent device" ); -RFALSE (is_reusable (s, block,1 ) ==0 ,"vs-4070: can not free such block" ); +RFALSE (!th->t_super,"vs-4060: trying to free block on nonexistent device" ); +RFALSE (is_reusable (th->t_super, block,1 ) ==0 ,"vs-4070: can not free such block" );_reiserfs_free_block (th, block) ; }
fs/reiserfs/dir.c +7 -5
@@ -20,6 +20,7 @@ read: generic_read_dir, readdir: reiserfs_readdir, fsync: reiserfs_dir_fsync, + ioctl: reiserfs_ioctl, };int reiserfs_dir_fsync (struct file *filp,struct dentry *dentry,int datasync) {
@@ -76,7 +77,7 @@/* we must have found item, that is item of this directory, */ RFALSE (COMP_SHORT_KEYS (&(ih->ih_key), &pos_key), -"vs-9000: found item %h does not match to dir we readdir %k" , +"vs-9000: found item %h does not match to dir we readdir %K" , ih, &pos_key); RFALSE( item_num > B_NR_ITEMS (bh) - 1, "vs-9005 item_num == %d, item amount == %d",
@@ -115,13 +116,13 @@if (d_reclen <=32 ) { local_buf = small_buf ; }else { - local_buf =kmalloc (d_reclen,GFP_NOFS ) ; + local_buf =reiserfs_kmalloc (d_reclen,GFP_NOFS , inode->i_sb) ;if (!local_buf) {pathrelse (&path_to_entry);return -ENOMEM ; }if (item_moved (&tmp_ih, &path_to_entry)) { -kfree (local_buf) ; +reiserfs_kfree (local_buf, d_reclen, inode->i_sb) ; goto research; } }
@@ -133,12 +134,12 @@if (filldir (dirent, local_buf, d_reclen, d_off, d_ino,DT_UNKNOWN ) <0 ) {if (local_buf != small_buf) { -kfree (local_buf) ; +reiserfs_kfree (local_buf, d_reclen, inode->i_sb) ; } goto end; }if (local_buf != small_buf) { -kfree (local_buf) ; +reiserfs_kfree (local_buf, d_reclen, inode->i_sb) ; }// next entry should be looked for with such offset
@@ -180,6 +181,7 @@ filp->f_pos = next_pos;pathrelse (&path_to_entry);reiserfs_check_path (&path_to_entry) ; +UPDATE_ATIME (inode) ;return 0 ; }
fs/reiserfs/fix_node.c +3 -7
@@ -1979,7 +1979,7 @@return CARRY_ON ; } - +#ifdef CONFIG_REISERFS_CHECK void *reiserfs_kmalloc (size_t size,int flags,struct super_block * s) {void * vp;
@@ -2007,6 +2007,7 @@ reiserfs_warning ("vs-8302: reiserfs_kfree: allocated memory %d\n", s->u.reiserfs_sb.s_kmallocs); } +#endif static int get_virtual_node_size (struct super_block * sb,struct buffer_head * bh)
@@ -2356,7 +2357,6 @@ for ( n_h = 0; n_h < MAX_HEIGHT && p_s_tb->insert_size[n_h]; n_h++ ) { if ( (n_ret_value = get_direct_parent(p_s_tb, n_h)) != CARRY_ON ) { goto repeat; - return n_ret_value; } if ( (n_ret_value = check_balance (n_op_mode, p_s_tb, n_h, n_item_num,
@@ -2365,7 +2365,6 @@/* No balancing for higher levels needed. */ if ( (n_ret_value =get_neighbors (p_s_tb, n_h)) !=CARRY_ON ) { goto repeat; -return n_ret_value; }if ( n_h !=MAX_HEIGHT -1 ) p_s_tb->insert_size[n_h +1 ] =0 ;
@@ -2373,17 +2372,14 @@break ; } goto repeat; -return n_ret_value; }if ( (n_ret_value =get_neighbors (p_s_tb, n_h)) !=CARRY_ON ) { goto repeat; -return n_ret_value; }if ( (n_ret_value =get_empty_nodes (p_s_tb, n_h)) !=CARRY_ON ) { - goto repeat; -return n_ret_value;/* No disk space, or schedule occurred and + goto repeat;/* No disk space, or schedule occurred and analysis may be invalid and needs to be redone. */ }
fs/reiserfs/inode.c +112 -15
222 lines not on this page · raw message
fs/reiserfs/ioctl.c +57 -3
81 lines not on this page · raw message
fs/reiserfs/item_ops.c +95 -2
112 lines not on this page · raw message
fs/reiserfs/journal.c +61 -23
169 lines not on this page · raw message
fs/reiserfs/namei.c +25 -7
@@ -340,7 +340,7 @@static struct dentry *reiserfs_lookup (struct inode * dir,struct dentry * dentry) {int retval; -struct inode * inode =0 ; +struct inode * inode =NULL ;struct reiserfs_dir_entry de;INITIALIZE_PATH (path_to_entry);
@@ -358,6 +358,9 @@return ERR_PTR (-EACCES ); } } +if ( retval ==IO_ERROR ) { +return ERR_PTR (-EIO ); + }d_add (dentry, inode);return NULL ;
@@ -443,6 +446,10 @@reiserfs_kfree (buffer, buflen, dir->i_sb);pathrelse (&path); +if ( retval ==IO_ERROR ) { +return -EIO ; + } +if (retval !=NAME_FOUND ) {reiserfs_warning ("zam-7002:" __FUNCTION__": \"reiserfs_find_entry\" has returned" " unexpected value (%d)\n" , retval);
@@ -470,7 +477,7 @@if (gen_number !=0 ) {/* we need to re-search for the insertion point */ if (search_by_entry_key (dir->i_sb, &entry_key, &path, &de) !=NAME_NOT_FOUND ) {reiserfs_warning ("vs-7032: reiserfs_add_entry: " -"entry with this key (%k) already exists\n" , &entry_key); +"entry with this key (%K) already exists\n" , &entry_key);if (buffer != small_buf)reiserfs_kfree (buffer, buflen, dir->i_sb);
@@ -715,10 +722,14 @@ windex =push_journal_writer ("reiserfs_rmdir" ) ; de.de_gen_number_bit_string =0 ; -if (reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de) ==NAME_NOT_FOUND ) { +if ( (retval =reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de)) ==NAME_NOT_FOUND ) { retval = -ENOENT ; goto end_rmdir; + }else if ( retval ==IO_ERROR ) { + retval = -EIO ; + goto end_rmdir; } + inode = dentry->d_inode;reiserfs_update_inode_transaction (inode) ;
@@ -800,9 +811,12 @@ windex =push_journal_writer ("reiserfs_unlink" ) ; de.de_gen_number_bit_string =0 ; -if (reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de) ==NAME_NOT_FOUND ) { +if ( (retval =reiserfs_find_entry (dir, dentry->d_name.name, dentry->d_name.len, &path, &de)) ==NAME_NOT_FOUND ) { retval = -ENOENT ; goto end_unlink; + }else if (retval ==IO_ERROR ) { + retval = -EIO ; + goto end_unlink; }reiserfs_update_inode_transaction (inode) ;
@@ -881,7 +895,7 @@return -ENAMETOOLONG ; } - name =kmalloc (item_len,GFP_NOFS ); + name =reiserfs_kmalloc (item_len,GFP_NOFS , dir->i_sb);if (!name) {iput (inode) ;return -ENOMEM ;
@@ -894,7 +908,7 @@ inode =reiserfs_new_inode (&th, dir,S_IFLNK |S_IRWXUGO , name,strlen (symname), dentry, inode, &retval); -kfree (name); +reiserfs_kfree (name, item_len, dir->i_sb);if (inode ==0 ) {/* reiserfs_new_inode iputs for us */ pop_journal_writer (windex) ;journal_end (&th, dir->i_sb, jbegin_count) ;
@@ -1065,8 +1079,10 @@ retval =reiserfs_find_entry (old_dir, old_dentry->d_name.name, old_dentry->d_name.len, &old_entry_path, &old_de);pathrelse (&old_entry_path); +if (retval ==IO_ERROR ) +return -EIO ; +if (retval !=NAME_FOUND || old_de.de_objectid != old_inode->i_ino) { -// FIXME: IO error is possible here return -ENOENT ; }
@@ -1138,6 +1154,8 @@ new_de.de_gen_number_bit_string =0 ; retval =reiserfs_find_entry (new_dir, new_dentry->d_name.name, new_dentry->d_name.len, &new_entry_path, &new_de); +// reiserfs_add_entry should not return IO_ERROR, because it is called with essentially same parameters from +// reiserfs_add_entry above, and we'll catch any i/o errors before we get here. if (retval !=NAME_FOUND_INVISIBLE && retval !=NAME_FOUND )BUG ();
fs/reiserfs/objectid.c +5 -0
@@ -5,6 +5,7 @@#include <linux/config.h> #include <linux/string.h> #include <linux/locks.h> +#include <linux/random.h> #include <linux/sched.h> #include <linux/reiserfs_fs.h>
@@ -195,6 +196,10 @@/* set the max size so we don't overflow later */ disk_sb->s_oid_maxsize =cpu_to_le16 (new_size) ; + +/* Zero out label and generate random UUID */ +memset (disk_sb->s_label,0 ,sizeof (disk_sb->s_label)) ; +generate_random_uuid (disk_sb->s_uuid);/* finally, zero out the unused chunk of the new super */ memset (disk_sb->s_unused,0 ,sizeof (disk_sb->s_unused)) ;
fs/reiserfs/prints.c +12 -2
@@ -477,6 +477,17 @@return 0 ; } +char *reiserfs_hashname (int code) +{ +if ( code ==YURA_HASH ) +return "rupasov" ; +if ( code ==TEA_HASH ) +return "tea" ; +if ( code ==R5_HASH ) +return "r5" ; + +return "unknown" ; +}/* return 1 if this is not super block */ static int print_super_block (struct buffer_head * bh) {
@@ -519,8 +530,7 @@printk ("Filesystem state %s\n" , (sb_state (rs) ==REISERFS_VALID_FS ) ?"VALID" :"ERROR" );printk ("Hash function \"%s\"\n" , -sb_hash_function_code (rs) ==TEA_HASH ?"tea" : - (sb_hash_function_code (rs) ==YURA_HASH ?"rupasov" : (sb_hash_function_code (rs) ==R5_HASH ?"r5" :"unknown" ))); +reiserfs_hashname (sb_hash_function_code (rs)));printk ("Tree height %d\n" ,sb_tree_height (rs));return 0 ;
fs/reiserfs/procfs.c +21 -2
@@ -172,6 +172,12 @@"search_by_key_fs_changed: \t%lu\n" "search_by_key_restarted: \t%lu\n" +"insert_item_restarted: \t%lu\n" +"paste_into_item_restarted: \t%lu\n" +"cut_from_item_restarted: \t%lu\n" +"delete_solid_item_restarted: \t%lu\n" +"delete_item_restarted: \t%lu\n" +"leaked_oid: \t%lu\n" "leaves_removable: \t%lu\n",
@@ -208,6 +214,13 @@SFP ( search_by_key ),SFP ( search_by_key_fs_changed ),SFP ( search_by_key_restarted ), + +SFP ( insert_item_restarted ), +SFP ( paste_into_item_restarted ), +SFP ( cut_from_item_restarted ), +SFP ( delete_solid_item_restarted ), +SFP ( delete_item_restarted ), +SFP ( leaked_oid ), SFP( leaves_removable ) );
@@ -341,6 +354,7 @@struct reiserfs_sb_info *sb_info;struct reiserfs_super_block *rs;int hash_code; +__u32 flags;int len =0 ; sb =procinfo_prologue ( (kdev_t ) (long ) data );
@@ -349,6 +363,7 @@ sb_info = &sb->u.reiserfs_sb; rs = sb_info -> s_rs; hash_code =DFL ( s_hash_function_code ); + flags =DFL ( s_flags ); len +=sprintf ( &buffer[ len ], "block_count: \t%i\n"
@@ -362,7 +377,8 @@"hash: \t%s\n" "tree_height: \t%i\n" "bmap_nr: \t%i\n" -"version: \t%i\n" , +"version: \t%i\n" +"flags: \t%x[%s]\n" ,DFL ( s_block_count ), DFL( s_free_blocks ),
@@ -378,7 +394,10 @@ ( hash_code ==UNSET_HASH ) ?"unset" :"unknown" ,DF ( s_tree_height ),DF ( s_bmap_nr ), - DF( s_version ) ); +DF ( s_version ), + flags, + ( flags & reiserfs_attrs_cleared ) + ? "attrs_cleared" : "" );procinfo_epilogue ( sb );return reiserfs_proc_tail ( len, buffer, start, offset, count, eof );
fs/reiserfs/stree.c +20 -6
@@ -166,7 +166,7 @@if (cpu_key_k_offset (key1) >cpu_key_k_offset (key2))return 1 ; -reiserfs_warning ("comp_cpu_keys: type are compared for %k and %k\n" , +reiserfs_warning ("comp_cpu_keys: type are compared for %K and %K\n" , key1, key2);if (cpu_key_k_type (key1) <cpu_key_k_type (key2))
@@ -524,6 +524,10 @@ ih = (struct item_head *)(buf +BLKH_SIZE ); prev_location = blocksize;for (i =0 ; i < nr; i ++, ih ++) { +if (le_ih_k_type (ih) ==TYPE_ANY ) { +reiserfs_warning ("is_leaf: wrong item type for item %h\n" ,ih); +return 0 ; + }if (ih_location (ih) >= blocksize ||ih_location (ih) <IH_SIZE * nr) {reiserfs_warning ("is_leaf: item location seems wrong: %h\n" , ih);return 0 ;
@@ -1242,6 +1246,8 @@if ( n_ret_value !=REPEAT_SEARCH )break ; +PROC_INFO_INC ( p_s_sb, delete_item_restarted ); +// file system changed, repeat search n_ret_value =search_for_position_by_key (p_s_sb, p_s_item_key, p_s_path);if (n_ret_value ==IO_ERROR )
@@ -1339,8 +1345,10 @@ }if (retval !=ITEM_FOUND ) {pathrelse (&path); -reiserfs_warning ("vs-5355: reiserfs_delete_solid_item: %k not found" , - key); +// No need for a warning, if there is just no free space to insert '..' item into the newly-created subdir +if ( !( (unsigned long long )GET_HASH_VALUE (le_key_k_offset (le_key_version (key), key)) ==0 && \ +GET_GENERATION_NUMBER (le_key_k_offset (le_key_version (key), key)) ==1 ) ) +reiserfs_warning ("vs-5355: reiserfs_delete_solid_item: %k not found" , key);break ; }if (!tb_init) {
@@ -1350,8 +1358,10 @@ } retval =fix_nodes (M_DELETE , &tb,NULL ,0 ); -if (retval ==REPEAT_SEARCH ) +if (retval ==REPEAT_SEARCH ) { +PROC_INFO_INC ( th -> t_super, delete_solid_item_restarted );continue ; + }if (retval ==CARRY_ON ) {do_balance (&tb,0 ,0 ,M_DELETE );
@@ -1523,7 +1533,7 @@set_cpu_key_k_offset (p_s_item_key, n_new_file_size +1 );if (search_for_position_by_key (p_s_sb, p_s_item_key, p_s_path) ==POSITION_NOT_FOUND ){print_block (PATH_PLAST_BUFFER (p_s_path),3 ,PATH_LAST_POSITION (p_s_path) -1 ,PATH_LAST_POSITION (p_s_path) +1 ); -reiserfs_panic (p_s_sb,"PAP-5580: reiserfs_cut_from_item: item to convert does not exist (%k)" , p_s_item_key); +reiserfs_panic (p_s_sb,"PAP-5580: reiserfs_cut_from_item: item to convert does not exist (%K)" , p_s_item_key); }continue ; }
@@ -1538,6 +1548,8 @@if ( n_ret_value !=REPEAT_SEARCH )break ; +PROC_INFO_INC ( p_s_sb, cut_from_item_restarted ); + n_ret_value =search_for_position_by_key (p_s_sb, p_s_item_key, p_s_path);if (n_ret_value ==POSITION_FOUND )continue ;
@@ -1716,7 +1728,7 @@ }RFALSE ( n_deleted > n_file_size, -"PAP-5670: reiserfs_truncate_file returns too big number: deleted %d, file_size %lu, item_key %k" , +"PAP-5670: reiserfs_truncate_file returns too big number: deleted %d, file_size %lu, item_key %K" , n_deleted, n_file_size, &s_item_key);/* Change key to search the last file item. */
@@ -1805,6 +1817,7 @@while ( (retval =fix_nodes (M_PASTE , &s_paste_balance,NULL , p_c_body)) ==REPEAT_SEARCH ) {/* file system changed while we were in the fix_nodes */ +PROC_INFO_INC ( th -> t_super, paste_into_item_restarted ); retval =search_for_position_by_key (th->t_super, p_s_key, p_s_search_path);if (retval ==IO_ERROR ) { retval = -EIO ;
@@ -1855,6 +1868,7 @@while ( (retval =fix_nodes (M_INSERT , &s_ins_balance, p_s_ih, p_c_body)) ==REPEAT_SEARCH ) {/* file system changed while we were in the fix_nodes */ +PROC_INFO_INC ( th -> t_super, insert_item_restarted ); retval =search_item (th->t_super, key, p_s_path);if (retval ==IO_ERROR ) { retval = -EIO ;
fs/reiserfs/super.c +107 -42
247 lines not on this page · raw message
fs/reiserfs/tail_conversion.c +10 -6
@@ -49,9 +49,13 @@make_cpu_key (&end_key, inode, tail_offset,TYPE_INDIRECT ,4 );// FIXME: we could avoid this -if (search_for_position_by_key (sb, &end_key, path) ==POSITION_FOUND ) -reiserfs_panic (sb,"PAP-14030: direct2indirect: " -"pasted or inserted byte exists in the tree" ); +if (search_for_position_by_key (sb, &end_key, path) ==POSITION_FOUND ) { +reiserfs_warning ("PAP-14030: direct2indirect: " +"pasted or inserted byte exists in the tree %K. " +"Use fsck to repair.\n" , &end_key); +pathrelse (path); +return -EIO ; + } p_le_ih =PATH_PITEM_HEAD (path);
@@ -90,10 +94,10 @@last item of the file */ if (search_for_position_by_key (sb, &end_key, path) ==POSITION_FOUND )reiserfs_panic (sb,"PAP-14050: direct2indirect: " -"direct item (%k) not found" , &end_key); +"direct item (%K) not found" , &end_key); p_le_ih =PATH_PITEM_HEAD (path);RFALSE ( !is_direct_le_ih (p_le_ih), -"vs-14055: direct item expected(%k), found %h" , +"vs-14055: direct item expected(%K), found %h" , &end_key, p_le_ih); tail_size = (le_ih_k_offset (p_le_ih) & (n_blk_size -1 )) +ih_item_len (p_le_ih) -1 ;
@@ -227,7 +231,7 @@/* re-search indirect item */ if (search_for_position_by_key (p_s_sb, p_s_item_key, p_s_path) ==POSITION_NOT_FOUND )reiserfs_panic (p_s_sb,"PAP-5520: indirect2direct: " -"item to be converted %k does not exist" , p_s_item_key); +"item to be converted %K does not exist" , p_s_item_key);copy_item_head (&s_ih,PATH_PITEM_HEAD (p_s_path));#ifdef CONFIG_REISERFS_CHECK pos = le_ih_k_offset (&s_ih) - 1 +
include/linux/reiserfs_fs.h +60 -13
139 lines not on this page · raw message
include/linux/reiserfs_fs_i.h +3 -0
@@ -33,6 +33,9 @@__u32 i_first_direct_byte;// offset of first byte stored in direct item. +/* copy of persistent inode flags read from sd_attrs. */ +__u32 i_attrs; +int i_prealloc_block;/* first unused block of a sequence of unused blocks */ int i_prealloc_count;/* length of that sequence */ struct list_head i_prealloc_list;/* per-transaction list of inodes which
include/linux/reiserfs_fs_sb.h +20 -1
@@ -61,9 +61,19 @@superblock. -Hans */ __u16 s_reserved;__u32 s_inode_generation; -char s_unused[124 ] ;/* zero filled by mkreiserfs */ +__u32 s_flags;/* Right now used only by inode-attributes, if enabled */ +unsigned char s_uuid[16 ];/* filesystem unique identifier */ +unsigned char s_label[16 ];/* filesystem volume label */ +char s_unused[88 ] ;/* zero filled by mkreiserfs and +* reiserfs_convert_objectid_map_v1() +* so any additions must be updated +* there as well. */ } __attribute__ ((__packed__)); +typedef enum { + reiserfs_attrs_cleared =0x00000001 , +}reiserfs_super_block_flags ; +#define SB_SIZE (sizeof(struct reiserfs_super_block))/* struct reiserfs_super_block accessors/mutators * since this is a disk structure, it will always be in
@@ -330,6 +340,12 @@stat_cnt_t search_by_key_fs_changed;stat_cnt_t search_by_key_restarted; +stat_cnt_t insert_item_restarted; +stat_cnt_t paste_into_item_restarted; +stat_cnt_t cut_from_item_restarted; +stat_cnt_t delete_solid_item_restarted; +stat_cnt_t delete_item_restarted; +stat_cnt_t leaked_oid;stat_cnt_t leaves_removable;
@@ -472,6 +488,8 @@#define REISERFS_TEST3 13#define REISERFS_TEST4 14 +#define REISERFS_ATTRS (15) +#define reiserfs_r5_hash (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_R5_HASH))#define reiserfs_rupasov_hash (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_RUPASOV_HASH))#define reiserfs_tea_hash (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << FORCE_TEA_HASH))
@@ -484,6 +502,7 @@#define dont_have_tails (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << NOTAIL))#define replay_only (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REPLAYONLY))#define reiserfs_dont_log (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_NOLOG)) +#define reiserfs_attrs (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_ATTRS))#define old_format_only (s) ((s)->u.reiserfs_sb.s_properties & (1 << REISERFS_3_5))#define convert_reiserfs (s) ((s)->u.reiserfs_sb.s_mount_opt & (1 << REISERFS_CONVERT))