7 #include <linux/slab.h>
9 #include <linux/sched.h>
12 #include <asm/unaligned.h>
13 #include <linux/bitops.h>
18 #define REISERFS_IOC32_UNPACK _IOW(0xCD, 1, int)
19 #define REISERFS_IOC32_GETFLAGS FS_IOC32_GETFLAGS
20 #define REISERFS_IOC32_SETFLAGS FS_IOC32_SETFLAGS
21 #define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION
22 #define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION
75 #ifdef CONFIG_REISERFS_FS_XATTR
88 #define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count))
89 #define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v))
90 #define sb_free_blocks(sbp) (le32_to_cpu((sbp)->s_v1.s_free_blocks))
91 #define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = cpu_to_le32(v))
92 #define sb_root_block(sbp) (le32_to_cpu((sbp)->s_v1.s_root_block))
93 #define set_sb_root_block(sbp,v) ((sbp)->s_v1.s_root_block = cpu_to_le32(v))
95 #define sb_jp_journal_1st_block(sbp) \
96 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_1st_block))
97 #define set_sb_jp_journal_1st_block(sbp,v) \
98 ((sbp)->s_v1.s_journal.jp_journal_1st_block = cpu_to_le32(v))
99 #define sb_jp_journal_dev(sbp) \
100 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_dev))
101 #define set_sb_jp_journal_dev(sbp,v) \
102 ((sbp)->s_v1.s_journal.jp_journal_dev = cpu_to_le32(v))
103 #define sb_jp_journal_size(sbp) \
104 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_size))
105 #define set_sb_jp_journal_size(sbp,v) \
106 ((sbp)->s_v1.s_journal.jp_journal_size = cpu_to_le32(v))
107 #define sb_jp_journal_trans_max(sbp) \
108 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_trans_max))
109 #define set_sb_jp_journal_trans_max(sbp,v) \
110 ((sbp)->s_v1.s_journal.jp_journal_trans_max = cpu_to_le32(v))
111 #define sb_jp_journal_magic(sbp) \
112 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_magic))
113 #define set_sb_jp_journal_magic(sbp,v) \
114 ((sbp)->s_v1.s_journal.jp_journal_magic = cpu_to_le32(v))
115 #define sb_jp_journal_max_batch(sbp) \
116 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_batch))
117 #define set_sb_jp_journal_max_batch(sbp,v) \
118 ((sbp)->s_v1.s_journal.jp_journal_max_batch = cpu_to_le32(v))
119 #define sb_jp_jourmal_max_commit_age(sbp) \
120 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_commit_age))
121 #define set_sb_jp_journal_max_commit_age(sbp,v) \
122 ((sbp)->s_v1.s_journal.jp_journal_max_commit_age = cpu_to_le32(v))
124 #define sb_blocksize(sbp) (le16_to_cpu((sbp)->s_v1.s_blocksize))
125 #define set_sb_blocksize(sbp,v) ((sbp)->s_v1.s_blocksize = cpu_to_le16(v))
126 #define sb_oid_maxsize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_maxsize))
127 #define set_sb_oid_maxsize(sbp,v) ((sbp)->s_v1.s_oid_maxsize = cpu_to_le16(v))
128 #define sb_oid_cursize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_cursize))
129 #define set_sb_oid_cursize(sbp,v) ((sbp)->s_v1.s_oid_cursize = cpu_to_le16(v))
130 #define sb_umount_state(sbp) (le16_to_cpu((sbp)->s_v1.s_umount_state))
131 #define set_sb_umount_state(sbp,v) ((sbp)->s_v1.s_umount_state = cpu_to_le16(v))
132 #define sb_fs_state(sbp) (le16_to_cpu((sbp)->s_v1.s_fs_state))
133 #define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v))
134 #define sb_hash_function_code(sbp) \
135 (le32_to_cpu((sbp)->s_v1.s_hash_function_code))
136 #define set_sb_hash_function_code(sbp,v) \
137 ((sbp)->s_v1.s_hash_function_code = cpu_to_le32(v))
138 #define sb_tree_height(sbp) (le16_to_cpu((sbp)->s_v1.s_tree_height))
139 #define set_sb_tree_height(sbp,v) ((sbp)->s_v1.s_tree_height = cpu_to_le16(v))
140 #define sb_bmap_nr(sbp) (le16_to_cpu((sbp)->s_v1.s_bmap_nr))
141 #define set_sb_bmap_nr(sbp,v) ((sbp)->s_v1.s_bmap_nr = cpu_to_le16(v))
142 #define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version))
143 #define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v))
145 #define sb_mnt_count(sbp) (le16_to_cpu((sbp)->s_mnt_count))
146 #define set_sb_mnt_count(sbp, v) ((sbp)->s_mnt_count = cpu_to_le16(v))
148 #define sb_reserved_for_journal(sbp) \
149 (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal))
150 #define set_sb_reserved_for_journal(sbp,v) \
151 ((sbp)->s_v1.s_reserved_for_journal = cpu_to_le16(v))
178 #define JOURNAL_BLOCK_SIZE 4096
179 #define JOURNAL_MAX_CNODE 1500
180 #define JOURNAL_HASH_SIZE 8192
181 #define JOURNAL_NUM_BITMAPS 5
192 struct buffer_head *
bh;
335 #define JOURNAL_DESC_MAGIC "ReIsErLB"
345 #if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO )
346 typedef unsigned long int stat_cnt_t;
350 int max_hash_collisions;
353 stat_cnt_t bread_miss;
355 stat_cnt_t search_by_key_fs_changed;
356 stat_cnt_t search_by_key_restarted;
358 stat_cnt_t insert_item_restarted;
359 stat_cnt_t paste_into_item_restarted;
360 stat_cnt_t cut_from_item_restarted;
361 stat_cnt_t delete_solid_item_restarted;
362 stat_cnt_t delete_item_restarted;
364 stat_cnt_t leaked_oid;
365 stat_cnt_t leaves_removable;
368 stat_cnt_t balance_at[5];
370 stat_cnt_t sbk_read_at[5];
371 stat_cnt_t sbk_fs_changed[5];
372 stat_cnt_t sbk_restarted[5];
373 stat_cnt_t items_at[5];
374 stat_cnt_t free_at[5];
375 stat_cnt_t can_node_be_removed[5];
380 stat_cnt_t get_neighbors[5];
381 stat_cnt_t get_neighbors_restart[5];
382 stat_cnt_t need_l_neighbor[5];
383 stat_cnt_t need_r_neighbor[5];
385 stat_cnt_t free_block;
386 struct __scan_bitmap_stats {
391 stat_cnt_t in_journal_hint;
392 stat_cnt_t in_journal_nohint;
395 struct __journal_stats {
396 stat_cnt_t in_journal;
397 stat_cnt_t in_journal_bitmap;
398 stat_cnt_t in_journal_reusable;
399 stat_cnt_t lock_journal;
400 stat_cnt_t lock_journal_wait;
401 stat_cnt_t journal_being;
402 stat_cnt_t journal_relock_writers;
403 stat_cnt_t journal_relock_wcount;
404 stat_cnt_t mark_dirty;
405 stat_cnt_t mark_dirty_already;
406 stat_cnt_t mark_dirty_notjournal;
407 stat_cnt_t restore_prepared;
409 stat_cnt_t prepare_retry;
493 #ifdef CONFIG_REISERFS_CHECK
507 #define REISERFS_3_5 0
508 #define REISERFS_3_6 1
509 #define REISERFS_OLD_FORMAT 2
568 #define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH))
569 #define reiserfs_rupasov_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_RUPASOV_HASH))
570 #define reiserfs_tea_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_TEA_HASH))
571 #define reiserfs_hash_detect(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_HASH_DETECT))
572 #define reiserfs_no_border(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_BORDER))
573 #define reiserfs_no_unhashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION))
574 #define reiserfs_hashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_HASHED_RELOCATION))
575 #define reiserfs_test4(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_TEST4))
577 #define have_large_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_LARGETAIL))
578 #define have_small_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_SMALLTAIL))
579 #define replay_only(s) (REISERFS_SB(s)->s_mount_opt & (1 << REPLAYONLY))
580 #define reiserfs_attrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ATTRS))
581 #define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5))
582 #define convert_reiserfs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_CONVERT))
583 #define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG))
584 #define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED))
585 #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK))
586 #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER))
587 #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL))
588 #define reiserfs_expose_privroot(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_EXPOSE_PRIVROOT))
589 #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s))
590 #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE))
591 #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH))
593 #define reiserfs_error_panic(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_PANIC))
594 #define reiserfs_error_ro(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_RO))
601 #define SCHEDULE_OCCURRED 1
603 #define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh)
604 #define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal)
605 #define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block)
606 #define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free)
607 #define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap)
609 #define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->)
614 static inline char *reiserfs_bdevname(
struct super_block *
s)
616 return (s ==
NULL) ?
"Null superblock" : s->
s_id;
619 #define reiserfs_is_journal_aborted(journal) (unlikely (__reiserfs_is_journal_aborted (journal)))
636 #ifdef CONFIG_REISERFS_CHECK
637 void reiserfs_lock_check_recursive(
struct super_block *
s);
639 static inline void reiserfs_lock_check_recursive(
struct super_block *
s) { }
669 static inline void reiserfs_mutex_lock_safe(
struct mutex *
m,
672 reiserfs_lock_check_recursive(s);
679 reiserfs_mutex_lock_nested_safe(
struct mutex *
m,
unsigned int subclass,
682 reiserfs_lock_check_recursive(s);
691 reiserfs_lock_check_recursive(s);
701 static inline void reiserfs_cond_resched(
struct super_block *
s)
703 if (need_resched()) {
735 #define USE_INODE_GENERATION_COUNTER
737 #define REISERFS_PREALLOCATE
738 #define DISPLACE_NEW_PACKING_LOCALITIES
739 #define PREALLOCATION_SIZE 9
742 #define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u))
747 #define ROUND_UP(x) _ROUND_UP(x,8LL)
752 #define REISERFS_DEBUG_CODE 5
755 const char *
func,
const char *
fmt, ...);
756 #define reiserfs_warning(s, id, fmt, args...) \
757 __reiserfs_warning(s, id, __func__, fmt, ##args)
761 #define __RASSERT(cond, scond, format, args...) \
764 reiserfs_panic(NULL, "assertion failure", "(" #cond ") at " \
765 __FILE__ ":%i:%s: " format "\n", \
766 in_interrupt() ? -1 : task_pid_nr(current), \
767 __LINE__, __func__ , ##args); \
770 #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args)
772 #if defined( CONFIG_REISERFS_CHECK )
773 #define RFALSE(cond, format, args...) __RASSERT(!(cond), "!(" #cond ")", format, ##args)
775 #define RFALSE( cond, format, args... ) do {;} while( 0 )
778 #define CONSTF __attribute_const__
791 #define UNSET_HASH 0 // read_super will guess about, what hash names
796 #define DEFAULT_HASH R5_HASH
843 #define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1))
862 #define SB_SIZE (sizeof(struct reiserfs_super_block))
864 #define REISERFS_VERSION_1 0
865 #define REISERFS_VERSION_2 2
868 #define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs)
869 #define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1))
870 #define SB_BLOCKSIZE(s) \
871 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize))
872 #define SB_BLOCK_COUNT(s) \
873 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count))
874 #define SB_FREE_BLOCKS(s) \
875 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks))
876 #define SB_REISERFS_MAGIC(s) \
877 (SB_V1_DISK_SUPER_BLOCK(s)->s_magic)
878 #define SB_ROOT_BLOCK(s) \
879 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block))
880 #define SB_TREE_HEIGHT(s) \
881 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height))
882 #define SB_REISERFS_STATE(s) \
883 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state))
884 #define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version))
885 #define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr))
887 #define PUT_SB_BLOCK_COUNT(s, val) \
888 do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0)
889 #define PUT_SB_FREE_BLOCKS(s, val) \
890 do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0)
891 #define PUT_SB_ROOT_BLOCK(s, val) \
892 do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0)
893 #define PUT_SB_TREE_HEIGHT(s, val) \
894 do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0)
895 #define PUT_SB_REISERFS_STATE(s, val) \
896 do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0)
897 #define PUT_SB_VERSION(s, val) \
898 do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0)
899 #define PUT_SB_BMAP_NR(s, val) \
900 do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0)
902 #define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal)
903 #define SB_ONDISK_JOURNAL_SIZE(s) \
904 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size))
905 #define SB_ONDISK_JOURNAL_1st_BLOCK(s) \
906 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block))
907 #define SB_ONDISK_JOURNAL_DEVICE(s) \
908 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev))
909 #define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \
910 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal))
912 #define is_block_in_log_or_reserved_area(s, block) \
913 block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \
914 && block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \
915 ((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \
916 SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s)))
927 #define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024)
928 #define REISERFS_FIRST_BLOCK unused_define
929 #define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES
932 #define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024)
936 #define REPEAT_SEARCH -1
938 #define NO_DISK_SPACE -3
939 #define NO_BALANCING_NEEDED (-4)
940 #define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5)
941 #define QUOTA_EXCEEDED -6
953 #define KEY_FORMAT_3_5 0
954 #define KEY_FORMAT_3_6 1
957 #define STAT_DATA_V1 0
958 #define STAT_DATA_V2 1
977 static inline int bmap_would_wrap(
unsigned bmap_nr)
979 return bmap_nr > ((1
LL << 16) - 1);
984 #define get_inode_item_key_version( inode ) \
985 ((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5)
987 #define set_inode_item_key_version( inode, version ) \
988 ({ if((version)==KEY_FORMAT_3_6) \
989 REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \
991 REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; })
993 #define get_inode_sd_version(inode) \
994 ((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1)
996 #define set_inode_sd_version(inode, version) \
997 ({ if((version)==STAT_DATA_V2) \
998 REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \
1000 REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; })
1012 #define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \
1014 (!(n_tail_size)) || \
1015 (((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \
1016 ( (n_file_size) >= (n_block_size) * 4 ) || \
1017 ( ( (n_file_size) >= (n_block_size) * 3 ) && \
1018 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \
1019 ( ( (n_file_size) >= (n_block_size) * 2 ) && \
1020 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \
1021 ( ( (n_file_size) >= (n_block_size) ) && \
1022 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \
1030 #define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \
1032 (!(n_tail_size)) || \
1033 (((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \
1039 #define REISERFS_VALID_FS 1
1040 #define REISERFS_ERROR_FS 2
1045 #define TYPE_STAT_DATA 0
1046 #define TYPE_INDIRECT 1
1047 #define TYPE_DIRECT 2
1048 #define TYPE_DIRENTRY 3
1049 #define TYPE_MAXTYPE 3
1050 #define TYPE_ANY 15 // FIXME: comment is required
1074 static inline void set_offset_v2_k_type(
struct offset_v2 *
v2,
int type)
1080 static inline loff_t offset_v2_k_offset(
const struct offset_v2 *v2)
1085 static inline void set_offset_v2_k_offset(
struct offset_v2 *v2, loff_t
offset)
1087 offset &= (~0ULL >> 4);
1122 #define REISERFS_FULL_KEY_LEN 4
1123 #define REISERFS_SHORT_KEY_LEN 2
1126 #define FIRST_GREATER 1
1127 #define SECOND_GREATER -1
1128 #define KEYS_IDENTICAL 0
1130 #define KEY_NOT_FOUND 0
1132 #define KEY_SIZE (sizeof(struct reiserfs_key))
1133 #define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32))
1136 #define ITEM_FOUND 1
1137 #define ITEM_NOT_FOUND 0
1138 #define ENTRY_FOUND 1
1139 #define ENTRY_NOT_FOUND 0
1140 #define DIRECTORY_NOT_FOUND -1
1141 #define REGULAR_FILE_FOUND -2
1142 #define DIRECTORY_FOUND -3
1143 #define BYTE_FOUND 1
1144 #define BYTE_NOT_FOUND 0
1145 #define FILE_NOT_FOUND -1
1147 #define POSITION_FOUND 1
1148 #define POSITION_NOT_FOUND 0
1151 #define NAME_FOUND 1
1152 #define NAME_NOT_FOUND 0
1153 #define GOTO_PREVIOUS_ITEM 2
1154 #define NAME_FOUND_INVISIBLE 3
1186 #define IH_SIZE (sizeof(struct item_head))
1188 #define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved)
1189 #define ih_version(ih) le16_to_cpu((ih)->ih_version)
1190 #define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count)
1191 #define ih_location(ih) le16_to_cpu((ih)->ih_item_location)
1192 #define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len)
1194 #define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0)
1195 #define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0)
1196 #define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0)
1197 #define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0)
1198 #define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0)
1200 #define unreachable_item(ih) (ih_version(ih) & (1 << 15))
1202 #define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih))
1203 #define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val)))
1211 #define get_block_num(p, i) get_unaligned_le32((p) + (i))
1212 #define put_block_num(p, i, v) put_unaligned_le32((v), (p) + (i))
1217 #define V1_SD_UNIQUENESS 0
1218 #define V1_INDIRECT_UNIQUENESS 0xfffffffe
1219 #define V1_DIRECT_UNIQUENESS 0xffffffff
1220 #define V1_DIRENTRY_UNIQUENESS 500
1221 #define V1_ANY_UNIQUENESS 555 // FIXME: comment is required
1226 static inline int uniqueness2type(
__u32 uniqueness)
CONSTF;
1227 static inline int uniqueness2type(
__u32 uniqueness)
1229 switch ((
int)uniqueness) {
1244 static inline __u32 type2uniqueness(
int type)
CONSTF;
1245 static inline __u32 type2uniqueness(
int type)
1267 static inline loff_t le_key_k_offset(
int version,
1275 static inline loff_t le_ih_k_offset(
const struct item_head *ih)
1280 static inline loff_t le_key_k_type(
int version,
const struct reiserfs_key *key)
1287 static inline loff_t le_ih_k_type(
const struct item_head *ih)
1292 static inline void set_le_key_k_offset(
int version,
struct reiserfs_key *key,
1296 (
void)(set_offset_v2_k_offset(&(key->u.
k_offset_v2), offset));
1299 static inline void set_le_ih_k_offset(
struct item_head *ih, loff_t offset)
1304 static inline void set_le_key_k_type(
int version,
struct reiserfs_key *key,
1310 : (
void)(set_offset_v2_k_type(&(key->u.
k_offset_v2), type));
1313 static inline void set_le_ih_k_type(
struct item_head *ih,
int type)
1318 static inline int is_direntry_le_key(
int version,
struct reiserfs_key *key)
1323 static inline int is_direct_le_key(
int version,
struct reiserfs_key *key)
1325 return le_key_k_type(version, key) ==
TYPE_DIRECT;
1328 static inline int is_indirect_le_key(
int version,
struct reiserfs_key *key)
1333 static inline int is_statdata_le_key(
int version,
struct reiserfs_key *key)
1341 static inline int is_direntry_le_ih(
struct item_head *ih)
1346 static inline int is_direct_le_ih(
struct item_head *ih)
1351 static inline int is_indirect_le_ih(
struct item_head *ih)
1356 static inline int is_statdata_le_ih(
struct item_head *ih)
1364 static inline loff_t cpu_key_k_offset(
const struct cpu_key *key)
1369 static inline loff_t cpu_key_k_type(
const struct cpu_key *key)
1374 static inline void set_cpu_key_k_offset(
struct cpu_key *key, loff_t offset)
1379 static inline void set_cpu_key_k_type(
struct cpu_key *key,
int type)
1384 static inline void cpu_key_k_offset_dec(
struct cpu_key *key)
1389 #define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY)
1390 #define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT)
1391 #define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT)
1392 #define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA)
1395 #define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key)))
1396 #define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key)))
1397 #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key)))
1398 #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key)))
1400 #define I_K_KEY_IN_ITEM(ih, key, n_blocksize) \
1401 (!COMP_SHORT_KEYS(ih, key) && \
1402 I_OFF_BYTE_IN_ITEM(ih, k_offset(key), n_blocksize))
1405 #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE)
1406 #define MIN_ITEM_LEN 1
1409 #define REISERFS_ROOT_OBJECTID 2
1410 #define REISERFS_ROOT_PARENT_OBJECTID 1
1434 #define BLKH_SIZE (sizeof(struct block_head))
1435 #define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level))
1436 #define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item))
1437 #define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space))
1438 #define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved))
1439 #define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val))
1440 #define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val))
1441 #define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val))
1442 #define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val))
1443 #define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key)
1444 #define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val)
1450 #define FREE_LEVEL 0
1455 #define DISK_LEAF_NODE_LEVEL 1
1458 #define B_BLK_HEAD(bh) ((struct block_head *)((bh)->b_data))
1460 #define B_NR_ITEMS(bh) (blkh_nr_item(B_BLK_HEAD(bh)))
1461 #define B_LEVEL(bh) (blkh_level(B_BLK_HEAD(bh)))
1462 #define B_FREE_SPACE(bh) (blkh_free_space(B_BLK_HEAD(bh)))
1464 #define PUT_B_NR_ITEMS(bh, val) do { set_blkh_nr_item(B_BLK_HEAD(bh), val); } while (0)
1465 #define PUT_B_LEVEL(bh, val) do { set_blkh_level(B_BLK_HEAD(bh), val); } while (0)
1466 #define PUT_B_FREE_SPACE(bh, val) do { set_blkh_free_space(B_BLK_HEAD(bh), val); } while (0)
1469 #define B_PRIGHT_DELIM_KEY(bh) (&(blk_right_delim_key(B_BLK_HEAD(bh))))
1472 #define B_IS_ITEMS_LEVEL(bh) (B_LEVEL(bh) == DISK_LEAF_NODE_LEVEL)
1475 #define B_IS_KEYS_LEVEL(bh) (B_LEVEL(bh) > DISK_LEAF_NODE_LEVEL \
1476 && B_LEVEL(bh) <= MAX_HEIGHT)
1510 #define SD_V1_SIZE (sizeof(struct stat_data_v1))
1511 #define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5)
1512 #define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode))
1513 #define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v))
1514 #define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink))
1515 #define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v))
1516 #define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid))
1517 #define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v))
1518 #define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid))
1519 #define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v))
1520 #define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size))
1521 #define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v))
1522 #define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime))
1523 #define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v))
1524 #define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime))
1525 #define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v))
1526 #define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime))
1527 #define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v))
1528 #define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev))
1529 #define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v))
1530 #define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks))
1531 #define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v))
1532 #define sd_v1_first_direct_byte(sdp) \
1533 (le32_to_cpu((sdp)->sd_first_direct_byte))
1534 #define set_sd_v1_first_direct_byte(sdp,v) \
1535 ((sdp)->sd_first_direct_byte = cpu_to_le32(v))
1541 #define REISERFS_IMMUTABLE_FL FS_IMMUTABLE_FL
1542 #define REISERFS_APPEND_FL FS_APPEND_FL
1543 #define REISERFS_SYNC_FL FS_SYNC_FL
1544 #define REISERFS_NOATIME_FL FS_NOATIME_FL
1545 #define REISERFS_NODUMP_FL FS_NODUMP_FL
1546 #define REISERFS_SECRM_FL FS_SECRM_FL
1547 #define REISERFS_UNRM_FL FS_UNRM_FL
1548 #define REISERFS_COMPR_FL FS_COMPR_FL
1549 #define REISERFS_NOTAIL_FL FS_NOTAIL_FL
1552 #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \
1553 REISERFS_SYNC_FL | \
1554 REISERFS_NOATIME_FL | \
1555 REISERFS_NODUMP_FL | \
1556 REISERFS_SECRM_FL | \
1557 REISERFS_COMPR_FL | \
1558 REISERFS_NOTAIL_FL )
1590 #define SD_SIZE (sizeof(struct stat_data))
1591 #define SD_V2_SIZE SD_SIZE
1592 #define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6)
1593 #define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode))
1594 #define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v))
1597 #define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink))
1598 #define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v))
1599 #define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size))
1600 #define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v))
1601 #define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid))
1602 #define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v))
1603 #define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid))
1604 #define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v))
1605 #define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime))
1606 #define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v))
1607 #define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime))
1608 #define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v))
1609 #define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime))
1610 #define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v))
1611 #define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks))
1612 #define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v))
1613 #define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev))
1614 #define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v))
1615 #define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation))
1616 #define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v))
1617 #define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs))
1618 #define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v))
1637 #define SD_UNIQUENESS 0
1638 #define DOT_OFFSET 1
1639 #define DOT_DOT_OFFSET 2
1640 #define DIRENTRY_UNIQUENESS 500
1643 #define FIRST_ITEM_OFFSET 1
1663 #define DEH_SIZE sizeof(struct reiserfs_de_head)
1664 #define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset))
1665 #define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id))
1666 #define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid))
1667 #define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location))
1668 #define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state))
1670 #define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v)))
1671 #define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v)))
1672 #define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v)))
1673 #define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v)))
1674 #define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v)))
1677 #define EMPTY_DIR_SIZE \
1678 (DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen ("..")))
1681 #define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3)
1683 #define DEH_Statdata 0
1684 #define DEH_Visible 2
1687 #if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__)
1688 # define ADDR_UNALIGNED_BITS (3)
1694 #ifdef ADDR_UNALIGNED_BITS
1696 # define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1)))
1697 # define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3)
1699 # define set_bit_unaligned(nr, addr) \
1700 __test_and_set_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1701 # define clear_bit_unaligned(nr, addr) \
1702 __test_and_clear_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1703 # define test_bit_unaligned(nr, addr) \
1704 test_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1708 # define set_bit_unaligned(nr, addr) __test_and_set_bit_le(nr, addr)
1709 # define clear_bit_unaligned(nr, addr) __test_and_clear_bit_le(nr, addr)
1710 # define test_bit_unaligned(nr, addr) test_bit_le(nr, addr)
1714 #define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1715 #define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1716 #define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1717 #define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1719 #define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1720 #define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1721 #define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1730 #define B_I_PITEM(bh,ih) ( (bh)->b_data + ih_location(ih) )
1731 #define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih)))
1743 static inline int entry_length(
const struct buffer_head *bh,
1756 #define I_ENTRY_COUNT(ih) (ih_entry_count((ih)))
1759 #define B_I_E_NAME(bh,ih,entry_num) ((char *)(bh->b_data + ih_location(ih) + deh_location(B_I_DEH(bh,ih)+(entry_num))))
1762 #define REISERFS_MAX_NAME(block_size) 255
1769 struct buffer_head *de_bh;
1777 unsigned long *de_gen_number_bit_string;
1788 #define B_I_DEH_ENTRY_FILE_NAME(bh,ih,deh) (B_I_PITEM (bh, ih) + deh_location(deh))
1791 #define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \
1792 (I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0))
1795 #define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL)
1797 #define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL)
1798 #define MAX_GENERATION_NUMBER 127
1800 #define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number))
1822 #define DC_SIZE (sizeof(struct disk_child))
1823 #define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number))
1824 #define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size))
1825 #define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0)
1826 #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0)
1829 #define B_N_CHILD(bh, n_pos) ((struct disk_child *)\
1830 ((bh)->b_data + BLKH_SIZE + B_NR_ITEMS(bh) * KEY_SIZE + DC_SIZE * (n_pos)))
1833 #define B_N_CHILD_NUM(bh, n_pos) (dc_block_number(B_N_CHILD(bh, n_pos)))
1834 #define PUT_B_N_CHILD_NUM(bh, n_pos, val) \
1835 (put_dc_block_number(B_N_CHILD(bh, n_pos), val))
1839 #define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE ))
1842 #define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur)))
1845 #define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) )
1846 #define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2)
1861 struct buffer_head *pe_buffer;
1866 #define MAX_HEIGHT 5
1867 #define EXTENDED_MAX_HEIGHT 7
1868 #define FIRST_PATH_ELEMENT_OFFSET 2
1870 #define ILLEGAL_PATH_ELEMENT_OFFSET 1
1871 #define MAX_FEB_SIZE 6
1890 #define PATH_READA 0x1
1891 #define PATH_READA_BACK 0x2
1900 #define pos_in_item(path) ((path)->pos_in_item)
1902 #define INITIALIZE_PATH(var) \
1903 struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,}
1906 #define PATH_OFFSET_PELEMENT(path, n_offset) ((path)->path_elements + (n_offset))
1909 #define PATH_OFFSET_PBUFFER(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_buffer)
1912 #define PATH_OFFSET_POSITION(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_position)
1914 #define PATH_PLAST_BUFFER(path) (PATH_OFFSET_PBUFFER((path), (path)->path_length))
1921 #define PATH_LAST_POSITION(path) (PATH_OFFSET_POSITION((path), (path)->path_length))
1923 #define PATH_PITEM_HEAD(path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path))
1927 #define PATH_H_PBUFFER(path, h) PATH_OFFSET_PBUFFER (path, path->path_length - (h))
1928 #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1)
1929 #define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h))
1930 #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1)
1932 #define PATH_H_PATH_OFFSET(path, n_h) ((path)->path_length - (n_h))
1934 #define get_last_bh(path) PATH_PLAST_BUFFER(path)
1935 #define get_ih(path) PATH_PITEM_HEAD(path)
1936 #define get_item_pos(path) PATH_LAST_POSITION(path)
1937 #define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path)))
1938 #define item_moved(ih,path) comp_items(ih, path)
1939 #define path_changed(ih,path) comp_items (ih, path)
1946 #define UNFM_P_SIZE (sizeof(unp_t))
1947 #define UNFM_P_SHIFT 2
1950 #define INODE_PKEY(inode) ((struct reiserfs_key *)(REISERFS_I(inode)->i_key))
1952 #define MAX_UL_INT 0xffffffff
1953 #define MAX_INT 0x7ffffff
1954 #define MAX_US_INT 0xffff
1957 #define U32_MAX (~(__u32)0)
1959 static inline loff_t max_reiserfs_offset(
struct inode *
inode)
1964 return (loff_t) ((~(
__u64) 0) >> 4);
1968 #define MAX_KEY_OBJECTID MAX_UL_INT
1970 #define MAX_B_NUM MAX_UL_INT
1971 #define MAX_FC_NUM MAX_US_INT
1974 #define REISERFS_LINK_MAX (MAX_US_INT - 1000)
1977 #define REISERFS_KERNEL_MEM 0
1978 #define REISERFS_USER_MEM 1
1980 #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
1981 #define get_generation(s) atomic_read (&fs_generation(s))
1982 #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen)
1983 #define __fs_changed(gen,s) (gen != get_generation (s))
1984 #define fs_changed(gen,s) \
1986 reiserfs_cond_resched(s); \
1987 __fs_changed(gen, s); \
1994 #define VI_TYPE_LEFT_MERGEABLE 1
1995 #define VI_TYPE_RIGHT_MERGEABLE 2
2012 unsigned short vi_type;
2013 unsigned short vi_item_len;
2015 const char *vi_item;
2016 const void *vi_new_data;
2022 unsigned short vn_nr_item;
2025 short vn_affected_item_num;
2026 short vn_pos_in_item;
2028 const void *vn_data;
2054 #define MAX_FREE_BLOCK 7
2057 #define MAX_AMOUNT_NEEDED 2
2062 int need_balance_dirty;
2121 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2130 #define M_INSERT 'i'
2135 #define M_DELETE 'd'
2140 #define M_INTERNAL 'n'
2144 #define M_SKIP_BALANCING 's'
2145 #define M_CONVERT 'v'
2148 #define LEAF_FROM_S_TO_L 0
2149 #define LEAF_FROM_S_TO_R 1
2150 #define LEAF_FROM_R_TO_L 2
2151 #define LEAF_FROM_L_TO_R 3
2152 #define LEAF_FROM_S_TO_SNEW 4
2154 #define FIRST_TO_LAST 0
2155 #define LAST_TO_FIRST 1
2161 struct buffer_head *bi_bh;
2162 struct buffer_head *bi_parent;
2173 return bi ? sb_from_tb(bi->
tb) :
NULL;
2196 unsigned long bsize);
2201 int is_affected,
int insert_size);
2203 int start_skip,
int end_skip);
2212 #define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize)
2213 #define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize)
2214 #define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item)
2215 #define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item)
2216 #define op_create_vi(vn,vi,is_affected,insert_size) item_ops[le_ih_k_type ((vi)->vi_ih)]->create_vi (vn,vi,is_affected,insert_size)
2217 #define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip)
2218 #define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free)
2219 #define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to)
2220 #define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi)
2221 #define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi)
2223 #define COMP_SHORT_KEYS comp_short_keys
2226 #define I_UNFM_NUM(ih) (ih_item_len(ih) / UNFM_P_SIZE)
2229 #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size))
2234 #define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) )
2237 #define B_N_PDELIM_KEY(bh,item_num) ( (struct reiserfs_key * )((bh)->b_data + BLKH_SIZE) + (item_num) )
2240 #define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) )
2243 #define B_N_PITEM(bh,item_num) ( (bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(item_num))))
2246 #define B_N_STAT_DATA(bh,nr) \
2247 ( (struct stat_data *)((bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(nr))) ) )
2252 #define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) )
2255 #define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE)
2260 #define B_I_POS_UNFM_POINTER(bh,ih,pos) le32_to_cpu(*(((unp_t *)B_I_PITEM(bh,ih)) + (pos)))
2261 #define PUT_B_I_POS_UNFM_POINTER(bh,ih,pos, val) do {*(((unp_t *)B_I_PITEM(bh,ih)) + (pos)) = cpu_to_le32(val); } while (0)
2272 #define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12)
2274 #define journal_trans_half(blocksize) \
2275 ((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32))
2287 #define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id)
2288 #define get_desc_trans_len(d) le32_to_cpu((d)->j_len)
2289 #define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id)
2291 #define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0)
2292 #define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0)
2293 #define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0)
2302 #define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id)
2303 #define get_commit_trans_len(c) le32_to_cpu((c)->j_len)
2304 #define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id)
2306 #define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0)
2307 #define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0)
2315 __le32 j_first_unflushed_offset;
2321 #define JOURNAL_BLOCK_COUNT 8192
2322 #define JOURNAL_TRANS_MAX_DEFAULT 1024
2323 #define JOURNAL_TRANS_MIN_DEFAULT 256
2324 #define JOURNAL_MAX_BATCH_DEFAULT 900
2325 #define JOURNAL_MIN_RATIO 2
2326 #define JOURNAL_MAX_COMMIT_AGE 30
2327 #define JOURNAL_MAX_TRANS_AGE 30
2328 #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9)
2329 #define JOURNAL_BLOCKS_PER_OBJECT(sb) (JOURNAL_PER_BALANCE_CNT * 3 + \
2330 2 * (REISERFS_QUOTA_INIT_BLOCKS(sb) + \
2331 REISERFS_QUOTA_TRANS_BLOCKS(sb)))
2334 #define REISERFS_QUOTA_OPTS ((1 << REISERFS_USRQUOTA) | (1 << REISERFS_GRPQUOTA))
2336 #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? 2 : 0)
2338 #define REISERFS_QUOTA_INIT_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \
2339 (DQUOT_INIT_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_INIT_REWRITE+1) : 0)
2341 #define REISERFS_QUOTA_DEL_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \
2342 (DQUOT_DEL_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_DEL_REWRITE+1) : 0)
2344 #define REISERFS_QUOTA_TRANS_BLOCKS(s) 0
2345 #define REISERFS_QUOTA_INIT_BLOCKS(s) 0
2346 #define REISERFS_QUOTA_DEL_BLOCKS(s) 0
2355 #define REISERFS_MIN_BITMAP_NODES 10
2356 #define REISERFS_MAX_BITMAP_NODES 100
2358 #define JBH_HASH_SHIFT 13
2359 #define JBH_HASH_MASK 8191
2361 #define _jhashfn(sb,block) \
2362 (((unsigned long)sb>>L1_CACHE_SHIFT) ^ \
2363 (((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12))))
2364 #define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK])
2367 #define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2368 #define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2369 #define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2390 BUFFER_FNS(JRestore_dirty, journal_restore_dirty);
2406 int t_blocks_logged;
2407 int t_blocks_allocated;
2408 unsigned int t_trans_id;
2409 void *t_handle_save;
2410 unsigned displace_new_blocks:1;
2420 struct buffer_head *bh;
2430 static inline int reiserfs_file_data_log(
struct inode *
inode)
2438 static inline int reiserfs_transaction_running(
struct super_block *s)
2459 unsigned from,
unsigned to);
2471 struct buffer_head *bh);
2485 int bit_nr,
int searchall, b_blocknr_t *
next);
2497 struct inode *inode,
int truncate);
2503 __u32 objectid_to_release);
2525 static inline int le_key_version(
const struct reiserfs_key *key)
2549 #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL)
2563 struct inode *inode,
const char *
body);
2568 struct inode *inode,
2569 const char *
body,
int paste_size);
2574 struct inode *inode,
2575 struct page *
page, loff_t new_file_size);
2580 struct inode *inode,
struct buffer_head *un_bh);
2585 struct inode *inode);
2587 struct inode *inode,
struct page *,
2588 int update_timestamps);
2590 #define i_block_size(inode) ((inode)->i_sb->s_blocksize)
2591 #define file_size(inode) ((inode)->i_size)
2592 #define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1))
2594 #define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\
2595 !STORE_TAIL_IN_UNFM_S1(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):have_small_tails ((inode)->i_sb)?!STORE_TAIL_IN_UNFM_S2(file_size (inode), tail_size(inode), inode->i_sb->s_blocksize):0 )
2601 #define GET_BLOCK_NO_CREATE 0
2602 #define GET_BLOCK_CREATE 1
2603 #define GET_BLOCK_NO_HOLE 2
2604 #define GET_BLOCK_READ_DIRECT 4
2605 #define GET_BLOCK_NO_IMUX 8
2606 #define GET_BLOCK_NO_DANGLE 16
2615 struct buffer_head *bh_result,
int create);
2617 int fh_len,
int fh_type);
2619 int fh_len,
int fh_type);
2621 struct inode *parent);
2634 const char *symname, loff_t i_size,
2639 struct inode *inode, loff_t
size);
2642 struct inode *inode)
2659 #ifdef CONFIG_REISERFS_PROC_INFO
2665 #define PROC_EXP( e ) e
2667 #define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data
2668 #define PROC_INFO_MAX( sb, field, value ) \
2669 __PINFO( sb ).field = \
2670 max( REISERFS_SB( sb ) -> s_proc_info_data.field, value )
2671 #define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) )
2672 #define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) )
2673 #define PROC_INFO_BH_STAT( sb, bh, level ) \
2674 PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \
2675 PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \
2676 PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) )
2698 #define PROC_EXP( e )
2699 #define VOID_V ( ( void ) 0 )
2700 #define PROC_INFO_MAX( sb, field, value ) VOID_V
2701 #define PROC_INFO_INC( sb, field ) VOID_V
2702 #define PROC_INFO_ADD( sb, field, val ) VOID_V
2703 #define PROC_INFO_BH_STAT(sb, bh, n_node_level) VOID_V
2715 struct treepath *,
struct buffer_head *, loff_t);
2729 struct item_head *ins_ih,
const void *);
2734 const char *
function,
const char *
fmt, ...)
2736 #define reiserfs_panic(s, id, fmt, args...) \
2737 __reiserfs_panic(s, id, __func__, fmt, ##args)
2739 const char *
function,
const char *fmt, ...);
2740 #define reiserfs_error(s, id, fmt, args...) \
2741 __reiserfs_error(s, id, __func__, fmt, ##args)
2749 #define PRINT_LEAF_ITEMS 1
2750 #define PRINT_DIRECTORY_ITEMS 2
2751 #define PRINT_DIRECT_ITEMS 4
2765 int mov_bytes,
struct buffer_head *Snew);
2769 int del_num,
int del_bytes);
2772 const char *inserted_item_body,
int zeros_number);
2780 const char *records,
int paste_size);
2783 struct buffer_head **);
2787 struct buffer_head *bh,
int flag);
2788 #define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty
2789 #define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty
2794 struct buffer_head *bh);
2799 struct buffer_head *,
int);
2815 b_blocknr_t beg,
end;
2816 b_blocknr_t search_start;
2822 unsigned formatted_node:1;
2824 unsigned preallocate:1;
2845 b_blocknr_t,
int for_unformatted);
2848 static inline int reiserfs_new_form_blocknrs(
struct tree_balance *
tb,
2849 b_blocknr_t * new_blocknrs,
2865 *th,
struct inode *inode,
2866 b_blocknr_t * new_blocknrs,
2875 .formatted_node = 0,
2881 #ifdef REISERFS_PREALLOCATE
2883 *th,
struct inode *inode,
2884 b_blocknr_t * new_blocknrs,
2893 .formatted_node = 0,
2900 struct inode *inode);
2909 #define reiserfs_set_le_bit __set_bit_le
2910 #define reiserfs_test_and_set_le_bit __test_and_set_bit_le
2911 #define reiserfs_clear_le_bit __clear_bit_le
2912 #define reiserfs_test_and_clear_le_bit __test_and_clear_bit_le
2913 #define reiserfs_test_le_bit test_bit_le
2914 #define reiserfs_find_next_zero_le_bit find_next_zero_bit_le
2923 #define SPARE_SPACE 500
2928 unsigned int cmd,
unsigned long arg);