Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

move private bits of reiserfs_fs.h to fs/reiserfs/reiserfs.h

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro f466c6fd a8a4b79b

+2354 -2362
+1 -1
fs/reiserfs/bitmap.c
··· 4 4 /* Reiserfs block (de)allocator, bitmap-based. */ 5 5 6 6 #include <linux/time.h> 7 - #include <linux/reiserfs_fs.h> 7 + #include "reiserfs.h" 8 8 #include <linux/errno.h> 9 9 #include <linux/buffer_head.h> 10 10 #include <linux/kernel.h>
+1 -1
fs/reiserfs/dir.c
··· 5 5 #include <linux/string.h> 6 6 #include <linux/errno.h> 7 7 #include <linux/fs.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 #include <linux/stat.h> 10 10 #include <linux/buffer_head.h> 11 11 #include <linux/slab.h>
+1 -1
fs/reiserfs/do_balan.c
··· 17 17 18 18 #include <asm/uaccess.h> 19 19 #include <linux/time.h> 20 - #include <linux/reiserfs_fs.h> 20 + #include "reiserfs.h" 21 21 #include <linux/buffer_head.h> 22 22 #include <linux/kernel.h> 23 23
+1 -1
fs/reiserfs/file.c
··· 3 3 */ 4 4 5 5 #include <linux/time.h> 6 - #include <linux/reiserfs_fs.h> 6 + #include "reiserfs.h" 7 7 #include "acl.h" 8 8 #include "xattr.h" 9 9 #include <asm/uaccess.h>
+1 -1
fs/reiserfs/fix_node.c
··· 37 37 #include <linux/time.h> 38 38 #include <linux/slab.h> 39 39 #include <linux/string.h> 40 - #include <linux/reiserfs_fs.h> 40 + #include "reiserfs.h" 41 41 #include <linux/buffer_head.h> 42 42 43 43 /* To make any changes in the tree we find a node, that contains item
+1 -1
fs/reiserfs/hashes.c
··· 19 19 // 20 20 21 21 #include <linux/kernel.h> 22 - #include <linux/reiserfs_fs.h> 22 + #include "reiserfs.h" 23 23 #include <asm/types.h> 24 24 25 25 #define DELTA 0x9E3779B9
+1 -1
fs/reiserfs/ibalance.c
··· 5 5 #include <asm/uaccess.h> 6 6 #include <linux/string.h> 7 7 #include <linux/time.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 #include <linux/buffer_head.h> 10 10 11 11 /* this is one and only function that is used outside (do_balance.c) */
+1 -1
fs/reiserfs/inode.c
··· 4 4 5 5 #include <linux/time.h> 6 6 #include <linux/fs.h> 7 - #include <linux/reiserfs_fs.h> 7 + #include "reiserfs.h" 8 8 #include "acl.h" 9 9 #include "xattr.h" 10 10 #include <linux/exportfs.h>
+1 -1
fs/reiserfs/ioctl.c
··· 5 5 #include <linux/capability.h> 6 6 #include <linux/fs.h> 7 7 #include <linux/mount.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 #include <linux/time.h> 10 10 #include <asm/uaccess.h> 11 11 #include <linux/pagemap.h>
+1 -1
fs/reiserfs/item_ops.c
··· 3 3 */ 4 4 5 5 #include <linux/time.h> 6 - #include <linux/reiserfs_fs.h> 6 + #include "reiserfs.h" 7 7 8 8 // this contains item handlers for old item types: sd, direct, 9 9 // indirect, directory
+1 -1
fs/reiserfs/journal.c
··· 37 37 #include <linux/time.h> 38 38 #include <linux/semaphore.h> 39 39 #include <linux/vmalloc.h> 40 - #include <linux/reiserfs_fs.h> 40 + #include "reiserfs.h" 41 41 #include <linux/kernel.h> 42 42 #include <linux/errno.h> 43 43 #include <linux/fcntl.h>
+1 -1
fs/reiserfs/lbalance.c
··· 5 5 #include <asm/uaccess.h> 6 6 #include <linux/string.h> 7 7 #include <linux/time.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 #include <linux/buffer_head.h> 10 10 11 11 /* these are used in do_balance.c */
+1 -1
fs/reiserfs/lock.c
··· 1 - #include <linux/reiserfs_fs.h> 1 + #include "reiserfs.h" 2 2 #include <linux/mutex.h> 3 3 4 4 /*
+1 -1
fs/reiserfs/namei.c
··· 14 14 #include <linux/time.h> 15 15 #include <linux/bitops.h> 16 16 #include <linux/slab.h> 17 - #include <linux/reiserfs_fs.h> 17 + #include "reiserfs.h" 18 18 #include "acl.h" 19 19 #include "xattr.h" 20 20 #include <linux/quotaops.h>
+1 -1
fs/reiserfs/objectid.c
··· 5 5 #include <linux/string.h> 6 6 #include <linux/random.h> 7 7 #include <linux/time.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 10 10 // find where objectid map starts 11 11 #define objectid_map(s,rs) (old_format_only (s) ? \
+2 -2
fs/reiserfs/prints.c
··· 4 4 5 5 #include <linux/time.h> 6 6 #include <linux/fs.h> 7 - #include <linux/reiserfs_fs.h> 7 + #include "reiserfs.h" 8 8 #include <linux/string.h> 9 9 #include <linux/buffer_head.h> 10 10 ··· 329 329 Numbering scheme for panic used by Vladimir and Anatoly( Hans completely ignores this scheme, and considers it 330 330 pointless complexity): 331 331 332 - panics in reiserfs_fs.h have numbers from 1000 to 1999 332 + panics in reiserfs.h have numbers from 1000 to 1999 333 333 super.c 2000 to 2999 334 334 preserve.c (unused) 3000 to 3999 335 335 bitmap.c 4000 to 4999
+1 -1
fs/reiserfs/procfs.c
··· 12 12 #include <linux/time.h> 13 13 #include <linux/seq_file.h> 14 14 #include <asm/uaccess.h> 15 - #include <linux/reiserfs_fs.h> 15 + #include "reiserfs.h" 16 16 #include <linux/init.h> 17 17 #include <linux/proc_fs.h> 18 18
+2327
fs/reiserfs/reiserfs.h
··· 1 + /* 2 + * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details 3 + */ 4 + 5 + #include <linux/reiserfs_fs.h> 6 + 7 + #include <linux/slab.h> 8 + #include <linux/interrupt.h> 9 + #include <linux/sched.h> 10 + #include <linux/workqueue.h> 11 + #include <asm/unaligned.h> 12 + #include <linux/bitops.h> 13 + #include <linux/proc_fs.h> 14 + #include <linux/buffer_head.h> 15 + #include <linux/reiserfs_fs_i.h> 16 + #include <linux/reiserfs_fs_sb.h> 17 + 18 + /* the 32 bit compat definitions with int argument */ 19 + #define REISERFS_IOC32_UNPACK _IOW(0xCD, 1, int) 20 + #define REISERFS_IOC32_GETFLAGS FS_IOC32_GETFLAGS 21 + #define REISERFS_IOC32_SETFLAGS FS_IOC32_SETFLAGS 22 + #define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION 23 + #define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION 24 + 25 + /* 26 + * Locking primitives. The write lock is a per superblock 27 + * special mutex that has properties close to the Big Kernel Lock 28 + * which was used in the previous locking scheme. 29 + */ 30 + void reiserfs_write_lock(struct super_block *s); 31 + void reiserfs_write_unlock(struct super_block *s); 32 + int reiserfs_write_lock_once(struct super_block *s); 33 + void reiserfs_write_unlock_once(struct super_block *s, int lock_depth); 34 + 35 + #ifdef CONFIG_REISERFS_CHECK 36 + void reiserfs_lock_check_recursive(struct super_block *s); 37 + #else 38 + static inline void reiserfs_lock_check_recursive(struct super_block *s) { } 39 + #endif 40 + 41 + /* 42 + * Several mutexes depend on the write lock. 43 + * However sometimes we want to relax the write lock while we hold 44 + * these mutexes, according to the release/reacquire on schedule() 45 + * properties of the Bkl that were used. 46 + * Reiserfs performances and locking were based on this scheme. 47 + * Now that the write lock is a mutex and not the bkl anymore, doing so 48 + * may result in a deadlock: 49 + * 50 + * A acquire write_lock 51 + * A acquire j_commit_mutex 52 + * A release write_lock and wait for something 53 + * B acquire write_lock 54 + * B can't acquire j_commit_mutex and sleep 55 + * A can't acquire write lock anymore 56 + * deadlock 57 + * 58 + * What we do here is avoiding such deadlock by playing the same game 59 + * than the Bkl: if we can't acquire a mutex that depends on the write lock, 60 + * we release the write lock, wait a bit and then retry. 61 + * 62 + * The mutexes concerned by this hack are: 63 + * - The commit mutex of a journal list 64 + * - The flush mutex 65 + * - The journal lock 66 + * - The inode mutex 67 + */ 68 + static inline void reiserfs_mutex_lock_safe(struct mutex *m, 69 + struct super_block *s) 70 + { 71 + reiserfs_lock_check_recursive(s); 72 + reiserfs_write_unlock(s); 73 + mutex_lock(m); 74 + reiserfs_write_lock(s); 75 + } 76 + 77 + static inline void 78 + reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass, 79 + struct super_block *s) 80 + { 81 + reiserfs_lock_check_recursive(s); 82 + reiserfs_write_unlock(s); 83 + mutex_lock_nested(m, subclass); 84 + reiserfs_write_lock(s); 85 + } 86 + 87 + static inline void 88 + reiserfs_down_read_safe(struct rw_semaphore *sem, struct super_block *s) 89 + { 90 + reiserfs_lock_check_recursive(s); 91 + reiserfs_write_unlock(s); 92 + down_read(sem); 93 + reiserfs_write_lock(s); 94 + } 95 + 96 + /* 97 + * When we schedule, we usually want to also release the write lock, 98 + * according to the previous bkl based locking scheme of reiserfs. 99 + */ 100 + static inline void reiserfs_cond_resched(struct super_block *s) 101 + { 102 + if (need_resched()) { 103 + reiserfs_write_unlock(s); 104 + schedule(); 105 + reiserfs_write_lock(s); 106 + } 107 + } 108 + 109 + struct fid; 110 + 111 + /* in reading the #defines, it may help to understand that they employ 112 + the following abbreviations: 113 + 114 + B = Buffer 115 + I = Item header 116 + H = Height within the tree (should be changed to LEV) 117 + N = Number of the item in the node 118 + STAT = stat data 119 + DEH = Directory Entry Header 120 + EC = Entry Count 121 + E = Entry number 122 + UL = Unsigned Long 123 + BLKH = BLocK Header 124 + UNFM = UNForMatted node 125 + DC = Disk Child 126 + P = Path 127 + 128 + These #defines are named by concatenating these abbreviations, 129 + where first comes the arguments, and last comes the return value, 130 + of the macro. 131 + 132 + */ 133 + 134 + #define USE_INODE_GENERATION_COUNTER 135 + 136 + #define REISERFS_PREALLOCATE 137 + #define DISPLACE_NEW_PACKING_LOCALITIES 138 + #define PREALLOCATION_SIZE 9 139 + 140 + /* n must be power of 2 */ 141 + #define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u)) 142 + 143 + // to be ok for alpha and others we have to align structures to 8 byte 144 + // boundary. 145 + // FIXME: do not change 4 by anything else: there is code which relies on that 146 + #define ROUND_UP(x) _ROUND_UP(x,8LL) 147 + 148 + /* debug levels. Right now, CONFIG_REISERFS_CHECK means print all debug 149 + ** messages. 150 + */ 151 + #define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ 152 + 153 + void __reiserfs_warning(struct super_block *s, const char *id, 154 + const char *func, const char *fmt, ...); 155 + #define reiserfs_warning(s, id, fmt, args...) \ 156 + __reiserfs_warning(s, id, __func__, fmt, ##args) 157 + /* assertions handling */ 158 + 159 + /** always check a condition and panic if it's false. */ 160 + #define __RASSERT(cond, scond, format, args...) \ 161 + do { \ 162 + if (!(cond)) \ 163 + reiserfs_panic(NULL, "assertion failure", "(" #cond ") at " \ 164 + __FILE__ ":%i:%s: " format "\n", \ 165 + in_interrupt() ? -1 : task_pid_nr(current), \ 166 + __LINE__, __func__ , ##args); \ 167 + } while (0) 168 + 169 + #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args) 170 + 171 + #if defined( CONFIG_REISERFS_CHECK ) 172 + #define RFALSE(cond, format, args...) __RASSERT(!(cond), "!(" #cond ")", format, ##args) 173 + #else 174 + #define RFALSE( cond, format, args... ) do {;} while( 0 ) 175 + #endif 176 + 177 + #define CONSTF __attribute_const__ 178 + /* 179 + * Disk Data Structures 180 + */ 181 + 182 + /***************************************************************************/ 183 + /* SUPER BLOCK */ 184 + /***************************************************************************/ 185 + 186 + /* 187 + * Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs 188 + * the version in RAM is part of a larger structure containing fields never written to disk. 189 + */ 190 + #define UNSET_HASH 0 // read_super will guess about, what hash names 191 + // in directories were sorted with 192 + #define TEA_HASH 1 193 + #define YURA_HASH 2 194 + #define R5_HASH 3 195 + #define DEFAULT_HASH R5_HASH 196 + 197 + struct journal_params { 198 + __le32 jp_journal_1st_block; /* where does journal start from on its 199 + * device */ 200 + __le32 jp_journal_dev; /* journal device st_rdev */ 201 + __le32 jp_journal_size; /* size of the journal */ 202 + __le32 jp_journal_trans_max; /* max number of blocks in a transaction. */ 203 + __le32 jp_journal_magic; /* random value made on fs creation (this 204 + * was sb_journal_block_count) */ 205 + __le32 jp_journal_max_batch; /* max number of blocks to batch into a 206 + * trans */ 207 + __le32 jp_journal_max_commit_age; /* in seconds, how old can an async 208 + * commit be */ 209 + __le32 jp_journal_max_trans_age; /* in seconds, how old can a transaction 210 + * be */ 211 + }; 212 + 213 + /* this is the super from 3.5.X, where X >= 10 */ 214 + struct reiserfs_super_block_v1 { 215 + __le32 s_block_count; /* blocks count */ 216 + __le32 s_free_blocks; /* free blocks count */ 217 + __le32 s_root_block; /* root block number */ 218 + struct journal_params s_journal; 219 + __le16 s_blocksize; /* block size */ 220 + __le16 s_oid_maxsize; /* max size of object id array, see 221 + * get_objectid() commentary */ 222 + __le16 s_oid_cursize; /* current size of object id array */ 223 + __le16 s_umount_state; /* this is set to 1 when filesystem was 224 + * umounted, to 2 - when not */ 225 + char s_magic[10]; /* reiserfs magic string indicates that 226 + * file system is reiserfs: 227 + * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */ 228 + __le16 s_fs_state; /* it is set to used by fsck to mark which 229 + * phase of rebuilding is done */ 230 + __le32 s_hash_function_code; /* indicate, what hash function is being use 231 + * to sort names in a directory*/ 232 + __le16 s_tree_height; /* height of disk tree */ 233 + __le16 s_bmap_nr; /* amount of bitmap blocks needed to address 234 + * each block of file system */ 235 + __le16 s_version; /* this field is only reliable on filesystem 236 + * with non-standard journal */ 237 + __le16 s_reserved_for_journal; /* size in blocks of journal area on main 238 + * device, we need to keep after 239 + * making fs with non-standard journal */ 240 + } __attribute__ ((__packed__)); 241 + 242 + #define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) 243 + 244 + /* this is the on disk super block */ 245 + struct reiserfs_super_block { 246 + struct reiserfs_super_block_v1 s_v1; 247 + __le32 s_inode_generation; 248 + __le32 s_flags; /* Right now used only by inode-attributes, if enabled */ 249 + unsigned char s_uuid[16]; /* filesystem unique identifier */ 250 + unsigned char s_label[16]; /* filesystem volume label */ 251 + __le16 s_mnt_count; /* Count of mounts since last fsck */ 252 + __le16 s_max_mnt_count; /* Maximum mounts before check */ 253 + __le32 s_lastcheck; /* Timestamp of last fsck */ 254 + __le32 s_check_interval; /* Interval between checks */ 255 + char s_unused[76]; /* zero filled by mkreiserfs and 256 + * reiserfs_convert_objectid_map_v1() 257 + * so any additions must be updated 258 + * there as well. */ 259 + } __attribute__ ((__packed__)); 260 + 261 + #define SB_SIZE (sizeof(struct reiserfs_super_block)) 262 + 263 + #define REISERFS_VERSION_1 0 264 + #define REISERFS_VERSION_2 2 265 + 266 + // on-disk super block fields converted to cpu form 267 + #define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs) 268 + #define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1)) 269 + #define SB_BLOCKSIZE(s) \ 270 + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize)) 271 + #define SB_BLOCK_COUNT(s) \ 272 + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count)) 273 + #define SB_FREE_BLOCKS(s) \ 274 + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks)) 275 + #define SB_REISERFS_MAGIC(s) \ 276 + (SB_V1_DISK_SUPER_BLOCK(s)->s_magic) 277 + #define SB_ROOT_BLOCK(s) \ 278 + le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block)) 279 + #define SB_TREE_HEIGHT(s) \ 280 + le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height)) 281 + #define SB_REISERFS_STATE(s) \ 282 + le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state)) 283 + #define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version)) 284 + #define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr)) 285 + 286 + #define PUT_SB_BLOCK_COUNT(s, val) \ 287 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0) 288 + #define PUT_SB_FREE_BLOCKS(s, val) \ 289 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0) 290 + #define PUT_SB_ROOT_BLOCK(s, val) \ 291 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0) 292 + #define PUT_SB_TREE_HEIGHT(s, val) \ 293 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0) 294 + #define PUT_SB_REISERFS_STATE(s, val) \ 295 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0) 296 + #define PUT_SB_VERSION(s, val) \ 297 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0) 298 + #define PUT_SB_BMAP_NR(s, val) \ 299 + do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0) 300 + 301 + #define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal) 302 + #define SB_ONDISK_JOURNAL_SIZE(s) \ 303 + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size)) 304 + #define SB_ONDISK_JOURNAL_1st_BLOCK(s) \ 305 + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block)) 306 + #define SB_ONDISK_JOURNAL_DEVICE(s) \ 307 + le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev)) 308 + #define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \ 309 + le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal)) 310 + 311 + #define is_block_in_log_or_reserved_area(s, block) \ 312 + block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \ 313 + && block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \ 314 + ((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \ 315 + SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s))) 316 + 317 + int is_reiserfs_3_5(struct reiserfs_super_block *rs); 318 + int is_reiserfs_3_6(struct reiserfs_super_block *rs); 319 + int is_reiserfs_jr(struct reiserfs_super_block *rs); 320 + 321 + /* ReiserFS leaves the first 64k unused, so that partition labels have 322 + enough space. If someone wants to write a fancy bootloader that 323 + needs more than 64k, let us know, and this will be increased in size. 324 + This number must be larger than than the largest block size on any 325 + platform, or code will break. -Hans */ 326 + #define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) 327 + #define REISERFS_FIRST_BLOCK unused_define 328 + #define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES 329 + 330 + /* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ 331 + #define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) 332 + 333 + /* reiserfs internal error code (used by search_by_key and fix_nodes)) */ 334 + #define CARRY_ON 0 335 + #define REPEAT_SEARCH -1 336 + #define IO_ERROR -2 337 + #define NO_DISK_SPACE -3 338 + #define NO_BALANCING_NEEDED (-4) 339 + #define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5) 340 + #define QUOTA_EXCEEDED -6 341 + 342 + typedef __u32 b_blocknr_t; 343 + typedef __le32 unp_t; 344 + 345 + struct unfm_nodeinfo { 346 + unp_t unfm_nodenum; 347 + unsigned short unfm_freespace; 348 + }; 349 + 350 + /* there are two formats of keys: 3.5 and 3.6 351 + */ 352 + #define KEY_FORMAT_3_5 0 353 + #define KEY_FORMAT_3_6 1 354 + 355 + /* there are two stat datas */ 356 + #define STAT_DATA_V1 0 357 + #define STAT_DATA_V2 1 358 + 359 + static inline struct reiserfs_inode_info *REISERFS_I(const struct inode *inode) 360 + { 361 + return container_of(inode, struct reiserfs_inode_info, vfs_inode); 362 + } 363 + 364 + static inline struct reiserfs_sb_info *REISERFS_SB(const struct super_block *sb) 365 + { 366 + return sb->s_fs_info; 367 + } 368 + 369 + /* Don't trust REISERFS_SB(sb)->s_bmap_nr, it's a u16 370 + * which overflows on large file systems. */ 371 + static inline __u32 reiserfs_bmap_count(struct super_block *sb) 372 + { 373 + return (SB_BLOCK_COUNT(sb) - 1) / (sb->s_blocksize * 8) + 1; 374 + } 375 + 376 + static inline int bmap_would_wrap(unsigned bmap_nr) 377 + { 378 + return bmap_nr > ((1LL << 16) - 1); 379 + } 380 + 381 + /** this says about version of key of all items (but stat data) the 382 + object consists of */ 383 + #define get_inode_item_key_version( inode ) \ 384 + ((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5) 385 + 386 + #define set_inode_item_key_version( inode, version ) \ 387 + ({ if((version)==KEY_FORMAT_3_6) \ 388 + REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \ 389 + else \ 390 + REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; }) 391 + 392 + #define get_inode_sd_version(inode) \ 393 + ((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1) 394 + 395 + #define set_inode_sd_version(inode, version) \ 396 + ({ if((version)==STAT_DATA_V2) \ 397 + REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \ 398 + else \ 399 + REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; }) 400 + 401 + /* This is an aggressive tail suppression policy, I am hoping it 402 + improves our benchmarks. The principle behind it is that percentage 403 + space saving is what matters, not absolute space saving. This is 404 + non-intuitive, but it helps to understand it if you consider that the 405 + cost to access 4 blocks is not much more than the cost to access 1 406 + block, if you have to do a seek and rotate. A tail risks a 407 + non-linear disk access that is significant as a percentage of total 408 + time cost for a 4 block file and saves an amount of space that is 409 + less significant as a percentage of space, or so goes the hypothesis. 410 + -Hans */ 411 + #define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \ 412 + (\ 413 + (!(n_tail_size)) || \ 414 + (((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \ 415 + ( (n_file_size) >= (n_block_size) * 4 ) || \ 416 + ( ( (n_file_size) >= (n_block_size) * 3 ) && \ 417 + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \ 418 + ( ( (n_file_size) >= (n_block_size) * 2 ) && \ 419 + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \ 420 + ( ( (n_file_size) >= (n_block_size) ) && \ 421 + ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \ 422 + ) 423 + 424 + /* Another strategy for tails, this one means only create a tail if all the 425 + file would fit into one DIRECT item. 426 + Primary intention for this one is to increase performance by decreasing 427 + seeking. 428 + */ 429 + #define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \ 430 + (\ 431 + (!(n_tail_size)) || \ 432 + (((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \ 433 + ) 434 + 435 + /* 436 + * values for s_umount_state field 437 + */ 438 + #define REISERFS_VALID_FS 1 439 + #define REISERFS_ERROR_FS 2 440 + 441 + // 442 + // there are 5 item types currently 443 + // 444 + #define TYPE_STAT_DATA 0 445 + #define TYPE_INDIRECT 1 446 + #define TYPE_DIRECT 2 447 + #define TYPE_DIRENTRY 3 448 + #define TYPE_MAXTYPE 3 449 + #define TYPE_ANY 15 // FIXME: comment is required 450 + 451 + /***************************************************************************/ 452 + /* KEY & ITEM HEAD */ 453 + /***************************************************************************/ 454 + 455 + // 456 + // directories use this key as well as old files 457 + // 458 + struct offset_v1 { 459 + __le32 k_offset; 460 + __le32 k_uniqueness; 461 + } __attribute__ ((__packed__)); 462 + 463 + struct offset_v2 { 464 + __le64 v; 465 + } __attribute__ ((__packed__)); 466 + 467 + static inline __u16 offset_v2_k_type(const struct offset_v2 *v2) 468 + { 469 + __u8 type = le64_to_cpu(v2->v) >> 60; 470 + return (type <= TYPE_MAXTYPE) ? type : TYPE_ANY; 471 + } 472 + 473 + static inline void set_offset_v2_k_type(struct offset_v2 *v2, int type) 474 + { 475 + v2->v = 476 + (v2->v & cpu_to_le64(~0ULL >> 4)) | cpu_to_le64((__u64) type << 60); 477 + } 478 + 479 + static inline loff_t offset_v2_k_offset(const struct offset_v2 *v2) 480 + { 481 + return le64_to_cpu(v2->v) & (~0ULL >> 4); 482 + } 483 + 484 + static inline void set_offset_v2_k_offset(struct offset_v2 *v2, loff_t offset) 485 + { 486 + offset &= (~0ULL >> 4); 487 + v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset); 488 + } 489 + 490 + /* Key of an item determines its location in the S+tree, and 491 + is composed of 4 components */ 492 + struct reiserfs_key { 493 + __le32 k_dir_id; /* packing locality: by default parent 494 + directory object id */ 495 + __le32 k_objectid; /* object identifier */ 496 + union { 497 + struct offset_v1 k_offset_v1; 498 + struct offset_v2 k_offset_v2; 499 + } __attribute__ ((__packed__)) u; 500 + } __attribute__ ((__packed__)); 501 + 502 + struct in_core_key { 503 + __u32 k_dir_id; /* packing locality: by default parent 504 + directory object id */ 505 + __u32 k_objectid; /* object identifier */ 506 + __u64 k_offset; 507 + __u8 k_type; 508 + }; 509 + 510 + struct cpu_key { 511 + struct in_core_key on_disk_key; 512 + int version; 513 + int key_length; /* 3 in all cases but direct2indirect and 514 + indirect2direct conversion */ 515 + }; 516 + 517 + /* Our function for comparing keys can compare keys of different 518 + lengths. It takes as a parameter the length of the keys it is to 519 + compare. These defines are used in determining what is to be passed 520 + to it as that parameter. */ 521 + #define REISERFS_FULL_KEY_LEN 4 522 + #define REISERFS_SHORT_KEY_LEN 2 523 + 524 + /* The result of the key compare */ 525 + #define FIRST_GREATER 1 526 + #define SECOND_GREATER -1 527 + #define KEYS_IDENTICAL 0 528 + #define KEY_FOUND 1 529 + #define KEY_NOT_FOUND 0 530 + 531 + #define KEY_SIZE (sizeof(struct reiserfs_key)) 532 + #define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32)) 533 + 534 + /* return values for search_by_key and clones */ 535 + #define ITEM_FOUND 1 536 + #define ITEM_NOT_FOUND 0 537 + #define ENTRY_FOUND 1 538 + #define ENTRY_NOT_FOUND 0 539 + #define DIRECTORY_NOT_FOUND -1 540 + #define REGULAR_FILE_FOUND -2 541 + #define DIRECTORY_FOUND -3 542 + #define BYTE_FOUND 1 543 + #define BYTE_NOT_FOUND 0 544 + #define FILE_NOT_FOUND -1 545 + 546 + #define POSITION_FOUND 1 547 + #define POSITION_NOT_FOUND 0 548 + 549 + // return values for reiserfs_find_entry and search_by_entry_key 550 + #define NAME_FOUND 1 551 + #define NAME_NOT_FOUND 0 552 + #define GOTO_PREVIOUS_ITEM 2 553 + #define NAME_FOUND_INVISIBLE 3 554 + 555 + /* Everything in the filesystem is stored as a set of items. The 556 + item head contains the key of the item, its free space (for 557 + indirect items) and specifies the location of the item itself 558 + within the block. */ 559 + 560 + struct item_head { 561 + /* Everything in the tree is found by searching for it based on 562 + * its key.*/ 563 + struct reiserfs_key ih_key; 564 + union { 565 + /* The free space in the last unformatted node of an 566 + indirect item if this is an indirect item. This 567 + equals 0xFFFF iff this is a direct item or stat data 568 + item. Note that the key, not this field, is used to 569 + determine the item type, and thus which field this 570 + union contains. */ 571 + __le16 ih_free_space_reserved; 572 + /* Iff this is a directory item, this field equals the 573 + number of directory entries in the directory item. */ 574 + __le16 ih_entry_count; 575 + } __attribute__ ((__packed__)) u; 576 + __le16 ih_item_len; /* total size of the item body */ 577 + __le16 ih_item_location; /* an offset to the item body 578 + * within the block */ 579 + __le16 ih_version; /* 0 for all old items, 2 for new 580 + ones. Highest bit is set by fsck 581 + temporary, cleaned after all 582 + done */ 583 + } __attribute__ ((__packed__)); 584 + /* size of item header */ 585 + #define IH_SIZE (sizeof(struct item_head)) 586 + 587 + #define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved) 588 + #define ih_version(ih) le16_to_cpu((ih)->ih_version) 589 + #define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count) 590 + #define ih_location(ih) le16_to_cpu((ih)->ih_item_location) 591 + #define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len) 592 + 593 + #define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0) 594 + #define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0) 595 + #define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0) 596 + #define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0) 597 + #define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0) 598 + 599 + #define unreachable_item(ih) (ih_version(ih) & (1 << 15)) 600 + 601 + #define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih)) 602 + #define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val))) 603 + 604 + /* these operate on indirect items, where you've got an array of ints 605 + ** at a possibly unaligned location. These are a noop on ia32 606 + ** 607 + ** p is the array of __u32, i is the index into the array, v is the value 608 + ** to store there. 609 + */ 610 + #define get_block_num(p, i) get_unaligned_le32((p) + (i)) 611 + #define put_block_num(p, i, v) put_unaligned_le32((v), (p) + (i)) 612 + 613 + // 614 + // in old version uniqueness field shows key type 615 + // 616 + #define V1_SD_UNIQUENESS 0 617 + #define V1_INDIRECT_UNIQUENESS 0xfffffffe 618 + #define V1_DIRECT_UNIQUENESS 0xffffffff 619 + #define V1_DIRENTRY_UNIQUENESS 500 620 + #define V1_ANY_UNIQUENESS 555 // FIXME: comment is required 621 + 622 + // 623 + // here are conversion routines 624 + // 625 + static inline int uniqueness2type(__u32 uniqueness) CONSTF; 626 + static inline int uniqueness2type(__u32 uniqueness) 627 + { 628 + switch ((int)uniqueness) { 629 + case V1_SD_UNIQUENESS: 630 + return TYPE_STAT_DATA; 631 + case V1_INDIRECT_UNIQUENESS: 632 + return TYPE_INDIRECT; 633 + case V1_DIRECT_UNIQUENESS: 634 + return TYPE_DIRECT; 635 + case V1_DIRENTRY_UNIQUENESS: 636 + return TYPE_DIRENTRY; 637 + case V1_ANY_UNIQUENESS: 638 + default: 639 + return TYPE_ANY; 640 + } 641 + } 642 + 643 + static inline __u32 type2uniqueness(int type) CONSTF; 644 + static inline __u32 type2uniqueness(int type) 645 + { 646 + switch (type) { 647 + case TYPE_STAT_DATA: 648 + return V1_SD_UNIQUENESS; 649 + case TYPE_INDIRECT: 650 + return V1_INDIRECT_UNIQUENESS; 651 + case TYPE_DIRECT: 652 + return V1_DIRECT_UNIQUENESS; 653 + case TYPE_DIRENTRY: 654 + return V1_DIRENTRY_UNIQUENESS; 655 + case TYPE_ANY: 656 + default: 657 + return V1_ANY_UNIQUENESS; 658 + } 659 + } 660 + 661 + // 662 + // key is pointer to on disk key which is stored in le, result is cpu, 663 + // there is no way to get version of object from key, so, provide 664 + // version to these defines 665 + // 666 + static inline loff_t le_key_k_offset(int version, 667 + const struct reiserfs_key *key) 668 + { 669 + return (version == KEY_FORMAT_3_5) ? 670 + le32_to_cpu(key->u.k_offset_v1.k_offset) : 671 + offset_v2_k_offset(&(key->u.k_offset_v2)); 672 + } 673 + 674 + static inline loff_t le_ih_k_offset(const struct item_head *ih) 675 + { 676 + return le_key_k_offset(ih_version(ih), &(ih->ih_key)); 677 + } 678 + 679 + static inline loff_t le_key_k_type(int version, const struct reiserfs_key *key) 680 + { 681 + return (version == KEY_FORMAT_3_5) ? 682 + uniqueness2type(le32_to_cpu(key->u.k_offset_v1.k_uniqueness)) : 683 + offset_v2_k_type(&(key->u.k_offset_v2)); 684 + } 685 + 686 + static inline loff_t le_ih_k_type(const struct item_head *ih) 687 + { 688 + return le_key_k_type(ih_version(ih), &(ih->ih_key)); 689 + } 690 + 691 + static inline void set_le_key_k_offset(int version, struct reiserfs_key *key, 692 + loff_t offset) 693 + { 694 + (version == KEY_FORMAT_3_5) ? (void)(key->u.k_offset_v1.k_offset = cpu_to_le32(offset)) : /* jdm check */ 695 + (void)(set_offset_v2_k_offset(&(key->u.k_offset_v2), offset)); 696 + } 697 + 698 + static inline void set_le_ih_k_offset(struct item_head *ih, loff_t offset) 699 + { 700 + set_le_key_k_offset(ih_version(ih), &(ih->ih_key), offset); 701 + } 702 + 703 + static inline void set_le_key_k_type(int version, struct reiserfs_key *key, 704 + int type) 705 + { 706 + (version == KEY_FORMAT_3_5) ? 707 + (void)(key->u.k_offset_v1.k_uniqueness = 708 + cpu_to_le32(type2uniqueness(type))) 709 + : (void)(set_offset_v2_k_type(&(key->u.k_offset_v2), type)); 710 + } 711 + 712 + static inline void set_le_ih_k_type(struct item_head *ih, int type) 713 + { 714 + set_le_key_k_type(ih_version(ih), &(ih->ih_key), type); 715 + } 716 + 717 + static inline int is_direntry_le_key(int version, struct reiserfs_key *key) 718 + { 719 + return le_key_k_type(version, key) == TYPE_DIRENTRY; 720 + } 721 + 722 + static inline int is_direct_le_key(int version, struct reiserfs_key *key) 723 + { 724 + return le_key_k_type(version, key) == TYPE_DIRECT; 725 + } 726 + 727 + static inline int is_indirect_le_key(int version, struct reiserfs_key *key) 728 + { 729 + return le_key_k_type(version, key) == TYPE_INDIRECT; 730 + } 731 + 732 + static inline int is_statdata_le_key(int version, struct reiserfs_key *key) 733 + { 734 + return le_key_k_type(version, key) == TYPE_STAT_DATA; 735 + } 736 + 737 + // 738 + // item header has version. 739 + // 740 + static inline int is_direntry_le_ih(struct item_head *ih) 741 + { 742 + return is_direntry_le_key(ih_version(ih), &ih->ih_key); 743 + } 744 + 745 + static inline int is_direct_le_ih(struct item_head *ih) 746 + { 747 + return is_direct_le_key(ih_version(ih), &ih->ih_key); 748 + } 749 + 750 + static inline int is_indirect_le_ih(struct item_head *ih) 751 + { 752 + return is_indirect_le_key(ih_version(ih), &ih->ih_key); 753 + } 754 + 755 + static inline int is_statdata_le_ih(struct item_head *ih) 756 + { 757 + return is_statdata_le_key(ih_version(ih), &ih->ih_key); 758 + } 759 + 760 + // 761 + // key is pointer to cpu key, result is cpu 762 + // 763 + static inline loff_t cpu_key_k_offset(const struct cpu_key *key) 764 + { 765 + return key->on_disk_key.k_offset; 766 + } 767 + 768 + static inline loff_t cpu_key_k_type(const struct cpu_key *key) 769 + { 770 + return key->on_disk_key.k_type; 771 + } 772 + 773 + static inline void set_cpu_key_k_offset(struct cpu_key *key, loff_t offset) 774 + { 775 + key->on_disk_key.k_offset = offset; 776 + } 777 + 778 + static inline void set_cpu_key_k_type(struct cpu_key *key, int type) 779 + { 780 + key->on_disk_key.k_type = type; 781 + } 782 + 783 + static inline void cpu_key_k_offset_dec(struct cpu_key *key) 784 + { 785 + key->on_disk_key.k_offset--; 786 + } 787 + 788 + #define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY) 789 + #define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT) 790 + #define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT) 791 + #define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA) 792 + 793 + /* are these used ? */ 794 + #define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key))) 795 + #define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key))) 796 + #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) 797 + #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) 798 + 799 + #define I_K_KEY_IN_ITEM(ih, key, n_blocksize) \ 800 + (!COMP_SHORT_KEYS(ih, key) && \ 801 + I_OFF_BYTE_IN_ITEM(ih, k_offset(key), n_blocksize)) 802 + 803 + /* maximal length of item */ 804 + #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) 805 + #define MIN_ITEM_LEN 1 806 + 807 + /* object identifier for root dir */ 808 + #define REISERFS_ROOT_OBJECTID 2 809 + #define REISERFS_ROOT_PARENT_OBJECTID 1 810 + 811 + extern struct reiserfs_key root_key; 812 + 813 + /* 814 + * Picture represents a leaf of the S+tree 815 + * ______________________________________________________ 816 + * | | Array of | | | 817 + * |Block | Object-Item | F r e e | Objects- | 818 + * | head | Headers | S p a c e | Items | 819 + * |______|_______________|___________________|___________| 820 + */ 821 + 822 + /* Header of a disk block. More precisely, header of a formatted leaf 823 + or internal node, and not the header of an unformatted node. */ 824 + struct block_head { 825 + __le16 blk_level; /* Level of a block in the tree. */ 826 + __le16 blk_nr_item; /* Number of keys/items in a block. */ 827 + __le16 blk_free_space; /* Block free space in bytes. */ 828 + __le16 blk_reserved; 829 + /* dump this in v4/planA */ 830 + struct reiserfs_key blk_right_delim_key; /* kept only for compatibility */ 831 + }; 832 + 833 + #define BLKH_SIZE (sizeof(struct block_head)) 834 + #define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level)) 835 + #define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item)) 836 + #define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space)) 837 + #define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved)) 838 + #define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val)) 839 + #define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val)) 840 + #define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val)) 841 + #define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val)) 842 + #define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key) 843 + #define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val) 844 + 845 + /* 846 + * values for blk_level field of the struct block_head 847 + */ 848 + 849 + #define FREE_LEVEL 0 /* when node gets removed from the tree its 850 + blk_level is set to FREE_LEVEL. It is then 851 + used to see whether the node is still in the 852 + tree */ 853 + 854 + #define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level. */ 855 + 856 + /* Given the buffer head of a formatted node, resolve to the block head of that node. */ 857 + #define B_BLK_HEAD(bh) ((struct block_head *)((bh)->b_data)) 858 + /* Number of items that are in buffer. */ 859 + #define B_NR_ITEMS(bh) (blkh_nr_item(B_BLK_HEAD(bh))) 860 + #define B_LEVEL(bh) (blkh_level(B_BLK_HEAD(bh))) 861 + #define B_FREE_SPACE(bh) (blkh_free_space(B_BLK_HEAD(bh))) 862 + 863 + #define PUT_B_NR_ITEMS(bh, val) do { set_blkh_nr_item(B_BLK_HEAD(bh), val); } while (0) 864 + #define PUT_B_LEVEL(bh, val) do { set_blkh_level(B_BLK_HEAD(bh), val); } while (0) 865 + #define PUT_B_FREE_SPACE(bh, val) do { set_blkh_free_space(B_BLK_HEAD(bh), val); } while (0) 866 + 867 + /* Get right delimiting key. -- little endian */ 868 + #define B_PRIGHT_DELIM_KEY(bh) (&(blk_right_delim_key(B_BLK_HEAD(bh)))) 869 + 870 + /* Does the buffer contain a disk leaf. */ 871 + #define B_IS_ITEMS_LEVEL(bh) (B_LEVEL(bh) == DISK_LEAF_NODE_LEVEL) 872 + 873 + /* Does the buffer contain a disk internal node */ 874 + #define B_IS_KEYS_LEVEL(bh) (B_LEVEL(bh) > DISK_LEAF_NODE_LEVEL \ 875 + && B_LEVEL(bh) <= MAX_HEIGHT) 876 + 877 + /***************************************************************************/ 878 + /* STAT DATA */ 879 + /***************************************************************************/ 880 + 881 + // 882 + // old stat data is 32 bytes long. We are going to distinguish new one by 883 + // different size 884 + // 885 + struct stat_data_v1 { 886 + __le16 sd_mode; /* file type, permissions */ 887 + __le16 sd_nlink; /* number of hard links */ 888 + __le16 sd_uid; /* owner */ 889 + __le16 sd_gid; /* group */ 890 + __le32 sd_size; /* file size */ 891 + __le32 sd_atime; /* time of last access */ 892 + __le32 sd_mtime; /* time file was last modified */ 893 + __le32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ 894 + union { 895 + __le32 sd_rdev; 896 + __le32 sd_blocks; /* number of blocks file uses */ 897 + } __attribute__ ((__packed__)) u; 898 + __le32 sd_first_direct_byte; /* first byte of file which is stored 899 + in a direct item: except that if it 900 + equals 1 it is a symlink and if it 901 + equals ~(__u32)0 there is no 902 + direct item. The existence of this 903 + field really grates on me. Let's 904 + replace it with a macro based on 905 + sd_size and our tail suppression 906 + policy. Someday. -Hans */ 907 + } __attribute__ ((__packed__)); 908 + 909 + #define SD_V1_SIZE (sizeof(struct stat_data_v1)) 910 + #define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5) 911 + #define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) 912 + #define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) 913 + #define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink)) 914 + #define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v)) 915 + #define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid)) 916 + #define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v)) 917 + #define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid)) 918 + #define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v)) 919 + #define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size)) 920 + #define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v)) 921 + #define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) 922 + #define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) 923 + #define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) 924 + #define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) 925 + #define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) 926 + #define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) 927 + #define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) 928 + #define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) 929 + #define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks)) 930 + #define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v)) 931 + #define sd_v1_first_direct_byte(sdp) \ 932 + (le32_to_cpu((sdp)->sd_first_direct_byte)) 933 + #define set_sd_v1_first_direct_byte(sdp,v) \ 934 + ((sdp)->sd_first_direct_byte = cpu_to_le32(v)) 935 + 936 + /* inode flags stored in sd_attrs (nee sd_reserved) */ 937 + 938 + /* we want common flags to have the same values as in ext2, 939 + so chattr(1) will work without problems */ 940 + #define REISERFS_IMMUTABLE_FL FS_IMMUTABLE_FL 941 + #define REISERFS_APPEND_FL FS_APPEND_FL 942 + #define REISERFS_SYNC_FL FS_SYNC_FL 943 + #define REISERFS_NOATIME_FL FS_NOATIME_FL 944 + #define REISERFS_NODUMP_FL FS_NODUMP_FL 945 + #define REISERFS_SECRM_FL FS_SECRM_FL 946 + #define REISERFS_UNRM_FL FS_UNRM_FL 947 + #define REISERFS_COMPR_FL FS_COMPR_FL 948 + #define REISERFS_NOTAIL_FL FS_NOTAIL_FL 949 + 950 + /* persistent flags that file inherits from the parent directory */ 951 + #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ 952 + REISERFS_SYNC_FL | \ 953 + REISERFS_NOATIME_FL | \ 954 + REISERFS_NODUMP_FL | \ 955 + REISERFS_SECRM_FL | \ 956 + REISERFS_COMPR_FL | \ 957 + REISERFS_NOTAIL_FL ) 958 + 959 + /* Stat Data on disk (reiserfs version of UFS disk inode minus the 960 + address blocks) */ 961 + struct stat_data { 962 + __le16 sd_mode; /* file type, permissions */ 963 + __le16 sd_attrs; /* persistent inode flags */ 964 + __le32 sd_nlink; /* number of hard links */ 965 + __le64 sd_size; /* file size */ 966 + __le32 sd_uid; /* owner */ 967 + __le32 sd_gid; /* group */ 968 + __le32 sd_atime; /* time of last access */ 969 + __le32 sd_mtime; /* time file was last modified */ 970 + __le32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ 971 + __le32 sd_blocks; 972 + union { 973 + __le32 sd_rdev; 974 + __le32 sd_generation; 975 + //__le32 sd_first_direct_byte; 976 + /* first byte of file which is stored in a 977 + direct item: except that if it equals 1 978 + it is a symlink and if it equals 979 + ~(__u32)0 there is no direct item. The 980 + existence of this field really grates 981 + on me. Let's replace it with a macro 982 + based on sd_size and our tail 983 + suppression policy? */ 984 + } __attribute__ ((__packed__)) u; 985 + } __attribute__ ((__packed__)); 986 + // 987 + // this is 44 bytes long 988 + // 989 + #define SD_SIZE (sizeof(struct stat_data)) 990 + #define SD_V2_SIZE SD_SIZE 991 + #define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6) 992 + #define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) 993 + #define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) 994 + /* sd_reserved */ 995 + /* set_sd_reserved */ 996 + #define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink)) 997 + #define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v)) 998 + #define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size)) 999 + #define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v)) 1000 + #define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid)) 1001 + #define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v)) 1002 + #define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid)) 1003 + #define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v)) 1004 + #define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) 1005 + #define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) 1006 + #define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) 1007 + #define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) 1008 + #define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) 1009 + #define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) 1010 + #define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks)) 1011 + #define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v)) 1012 + #define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) 1013 + #define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) 1014 + #define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation)) 1015 + #define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v)) 1016 + #define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs)) 1017 + #define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v)) 1018 + 1019 + /***************************************************************************/ 1020 + /* DIRECTORY STRUCTURE */ 1021 + /***************************************************************************/ 1022 + /* 1023 + Picture represents the structure of directory items 1024 + ________________________________________________ 1025 + | Array of | | | | | | 1026 + | directory |N-1| N-2 | .... | 1st |0th| 1027 + | entry headers | | | | | | 1028 + |_______________|___|_____|________|_______|___| 1029 + <---- directory entries ------> 1030 + 1031 + First directory item has k_offset component 1. We store "." and ".." 1032 + in one item, always, we never split "." and ".." into differing 1033 + items. This makes, among other things, the code for removing 1034 + directories simpler. */ 1035 + #define SD_OFFSET 0 1036 + #define SD_UNIQUENESS 0 1037 + #define DOT_OFFSET 1 1038 + #define DOT_DOT_OFFSET 2 1039 + #define DIRENTRY_UNIQUENESS 500 1040 + 1041 + /* */ 1042 + #define FIRST_ITEM_OFFSET 1 1043 + 1044 + /* 1045 + Q: How to get key of object pointed to by entry from entry? 1046 + 1047 + A: Each directory entry has its header. This header has deh_dir_id and deh_objectid fields, those are key 1048 + of object, entry points to */ 1049 + 1050 + /* NOT IMPLEMENTED: 1051 + Directory will someday contain stat data of object */ 1052 + 1053 + struct reiserfs_de_head { 1054 + __le32 deh_offset; /* third component of the directory entry key */ 1055 + __le32 deh_dir_id; /* objectid of the parent directory of the object, that is referenced 1056 + by directory entry */ 1057 + __le32 deh_objectid; /* objectid of the object, that is referenced by directory entry */ 1058 + __le16 deh_location; /* offset of name in the whole item */ 1059 + __le16 deh_state; /* whether 1) entry contains stat data (for future), and 2) whether 1060 + entry is hidden (unlinked) */ 1061 + } __attribute__ ((__packed__)); 1062 + #define DEH_SIZE sizeof(struct reiserfs_de_head) 1063 + #define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset)) 1064 + #define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id)) 1065 + #define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid)) 1066 + #define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location)) 1067 + #define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state)) 1068 + 1069 + #define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v))) 1070 + #define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v))) 1071 + #define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v))) 1072 + #define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v))) 1073 + #define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v))) 1074 + 1075 + /* empty directory contains two entries "." and ".." and their headers */ 1076 + #define EMPTY_DIR_SIZE \ 1077 + (DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen (".."))) 1078 + 1079 + /* old format directories have this size when empty */ 1080 + #define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3) 1081 + 1082 + #define DEH_Statdata 0 /* not used now */ 1083 + #define DEH_Visible 2 1084 + 1085 + /* 64 bit systems (and the S/390) need to be aligned explicitly -jdm */ 1086 + #if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__) 1087 + # define ADDR_UNALIGNED_BITS (3) 1088 + #endif 1089 + 1090 + /* These are only used to manipulate deh_state. 1091 + * Because of this, we'll use the ext2_ bit routines, 1092 + * since they are little endian */ 1093 + #ifdef ADDR_UNALIGNED_BITS 1094 + 1095 + # define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1))) 1096 + # define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3) 1097 + 1098 + # define set_bit_unaligned(nr, addr) \ 1099 + __test_and_set_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1100 + # define clear_bit_unaligned(nr, addr) \ 1101 + __test_and_clear_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1102 + # define test_bit_unaligned(nr, addr) \ 1103 + test_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1104 + 1105 + #else 1106 + 1107 + # define set_bit_unaligned(nr, addr) __test_and_set_bit_le(nr, addr) 1108 + # define clear_bit_unaligned(nr, addr) __test_and_clear_bit_le(nr, addr) 1109 + # define test_bit_unaligned(nr, addr) test_bit_le(nr, addr) 1110 + 1111 + #endif 1112 + 1113 + #define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1114 + #define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1115 + #define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1116 + #define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1117 + 1118 + #define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1119 + #define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1120 + #define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1121 + 1122 + extern void make_empty_dir_item_v1(char *body, __le32 dirid, __le32 objid, 1123 + __le32 par_dirid, __le32 par_objid); 1124 + extern void make_empty_dir_item(char *body, __le32 dirid, __le32 objid, 1125 + __le32 par_dirid, __le32 par_objid); 1126 + 1127 + /* array of the entry headers */ 1128 + /* get item body */ 1129 + #define B_I_PITEM(bh,ih) ( (bh)->b_data + ih_location(ih) ) 1130 + #define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih))) 1131 + 1132 + /* length of the directory entry in directory item. This define 1133 + calculates length of i-th directory entry using directory entry 1134 + locations from dir entry head. When it calculates length of 0-th 1135 + directory entry, it uses length of whole item in place of entry 1136 + location of the non-existent following entry in the calculation. 1137 + See picture above.*/ 1138 + /* 1139 + #define I_DEH_N_ENTRY_LENGTH(ih,deh,i) \ 1140 + ((i) ? (deh_location((deh)-1) - deh_location((deh))) : (ih_item_len((ih)) - deh_location((deh)))) 1141 + */ 1142 + static inline int entry_length(const struct buffer_head *bh, 1143 + const struct item_head *ih, int pos_in_item) 1144 + { 1145 + struct reiserfs_de_head *deh; 1146 + 1147 + deh = B_I_DEH(bh, ih) + pos_in_item; 1148 + if (pos_in_item) 1149 + return deh_location(deh - 1) - deh_location(deh); 1150 + 1151 + return ih_item_len(ih) - deh_location(deh); 1152 + } 1153 + 1154 + /* number of entries in the directory item, depends on ENTRY_COUNT being at the start of directory dynamic data. */ 1155 + #define I_ENTRY_COUNT(ih) (ih_entry_count((ih))) 1156 + 1157 + /* name by bh, ih and entry_num */ 1158 + #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)))) 1159 + 1160 + // two entries per block (at least) 1161 + #define REISERFS_MAX_NAME(block_size) 255 1162 + 1163 + /* this structure is used for operations on directory entries. It is 1164 + not a disk structure. */ 1165 + /* When reiserfs_find_entry or search_by_entry_key find directory 1166 + entry, they return filled reiserfs_dir_entry structure */ 1167 + struct reiserfs_dir_entry { 1168 + struct buffer_head *de_bh; 1169 + int de_item_num; 1170 + struct item_head *de_ih; 1171 + int de_entry_num; 1172 + struct reiserfs_de_head *de_deh; 1173 + int de_entrylen; 1174 + int de_namelen; 1175 + char *de_name; 1176 + unsigned long *de_gen_number_bit_string; 1177 + 1178 + __u32 de_dir_id; 1179 + __u32 de_objectid; 1180 + 1181 + struct cpu_key de_entry_key; 1182 + }; 1183 + 1184 + /* these defines are useful when a particular member of a reiserfs_dir_entry is needed */ 1185 + 1186 + /* pointer to file name, stored in entry */ 1187 + #define B_I_DEH_ENTRY_FILE_NAME(bh,ih,deh) (B_I_PITEM (bh, ih) + deh_location(deh)) 1188 + 1189 + /* length of name */ 1190 + #define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \ 1191 + (I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0)) 1192 + 1193 + /* hash value occupies bits from 7 up to 30 */ 1194 + #define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL) 1195 + /* generation number occupies 7 bits starting from 0 up to 6 */ 1196 + #define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL) 1197 + #define MAX_GENERATION_NUMBER 127 1198 + 1199 + #define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number)) 1200 + 1201 + /* 1202 + * Picture represents an internal node of the reiserfs tree 1203 + * ______________________________________________________ 1204 + * | | Array of | Array of | Free | 1205 + * |block | keys | pointers | space | 1206 + * | head | N | N+1 | | 1207 + * |______|_______________|___________________|___________| 1208 + */ 1209 + 1210 + /***************************************************************************/ 1211 + /* DISK CHILD */ 1212 + /***************************************************************************/ 1213 + /* Disk child pointer: The pointer from an internal node of the tree 1214 + to a node that is on disk. */ 1215 + struct disk_child { 1216 + __le32 dc_block_number; /* Disk child's block number. */ 1217 + __le16 dc_size; /* Disk child's used space. */ 1218 + __le16 dc_reserved; 1219 + }; 1220 + 1221 + #define DC_SIZE (sizeof(struct disk_child)) 1222 + #define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number)) 1223 + #define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size)) 1224 + #define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0) 1225 + #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) 1226 + 1227 + /* Get disk child by buffer header and position in the tree node. */ 1228 + #define B_N_CHILD(bh, n_pos) ((struct disk_child *)\ 1229 + ((bh)->b_data + BLKH_SIZE + B_NR_ITEMS(bh) * KEY_SIZE + DC_SIZE * (n_pos))) 1230 + 1231 + /* Get disk child number by buffer header and position in the tree node. */ 1232 + #define B_N_CHILD_NUM(bh, n_pos) (dc_block_number(B_N_CHILD(bh, n_pos))) 1233 + #define PUT_B_N_CHILD_NUM(bh, n_pos, val) \ 1234 + (put_dc_block_number(B_N_CHILD(bh, n_pos), val)) 1235 + 1236 + /* maximal value of field child_size in structure disk_child */ 1237 + /* child size is the combined size of all items and their headers */ 1238 + #define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE )) 1239 + 1240 + /* amount of used space in buffer (not including block head) */ 1241 + #define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur))) 1242 + 1243 + /* max and min number of keys in internal node */ 1244 + #define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) ) 1245 + #define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2) 1246 + 1247 + /***************************************************************************/ 1248 + /* PATH STRUCTURES AND DEFINES */ 1249 + /***************************************************************************/ 1250 + 1251 + /* Search_by_key fills up the path from the root to the leaf as it descends the tree looking for the 1252 + key. It uses reiserfs_bread to try to find buffers in the cache given their block number. If it 1253 + does not find them in the cache it reads them from disk. For each node search_by_key finds using 1254 + reiserfs_bread it then uses bin_search to look through that node. bin_search will find the 1255 + position of the block_number of the next node if it is looking through an internal node. If it 1256 + is looking through a leaf node bin_search will find the position of the item which has key either 1257 + equal to given key, or which is the maximal key less than the given key. */ 1258 + 1259 + struct path_element { 1260 + struct buffer_head *pe_buffer; /* Pointer to the buffer at the path in the tree. */ 1261 + int pe_position; /* Position in the tree node which is placed in the */ 1262 + /* buffer above. */ 1263 + }; 1264 + 1265 + #define MAX_HEIGHT 5 /* maximal height of a tree. don't change this without changing JOURNAL_PER_BALANCE_CNT */ 1266 + #define EXTENDED_MAX_HEIGHT 7 /* Must be equals MAX_HEIGHT + FIRST_PATH_ELEMENT_OFFSET */ 1267 + #define FIRST_PATH_ELEMENT_OFFSET 2 /* Must be equal to at least 2. */ 1268 + 1269 + #define ILLEGAL_PATH_ELEMENT_OFFSET 1 /* Must be equal to FIRST_PATH_ELEMENT_OFFSET - 1 */ 1270 + #define MAX_FEB_SIZE 6 /* this MUST be MAX_HEIGHT + 1. See about FEB below */ 1271 + 1272 + /* We need to keep track of who the ancestors of nodes are. When we 1273 + perform a search we record which nodes were visited while 1274 + descending the tree looking for the node we searched for. This list 1275 + of nodes is called the path. This information is used while 1276 + performing balancing. Note that this path information may become 1277 + invalid, and this means we must check it when using it to see if it 1278 + is still valid. You'll need to read search_by_key and the comments 1279 + in it, especially about decrement_counters_in_path(), to understand 1280 + this structure. 1281 + 1282 + Paths make the code so much harder to work with and debug.... An 1283 + enormous number of bugs are due to them, and trying to write or modify 1284 + code that uses them just makes my head hurt. They are based on an 1285 + excessive effort to avoid disturbing the precious VFS code.:-( The 1286 + gods only know how we are going to SMP the code that uses them. 1287 + znodes are the way! */ 1288 + 1289 + #define PATH_READA 0x1 /* do read ahead */ 1290 + #define PATH_READA_BACK 0x2 /* read backwards */ 1291 + 1292 + struct treepath { 1293 + int path_length; /* Length of the array above. */ 1294 + int reada; 1295 + struct path_element path_elements[EXTENDED_MAX_HEIGHT]; /* Array of the path elements. */ 1296 + int pos_in_item; 1297 + }; 1298 + 1299 + #define pos_in_item(path) ((path)->pos_in_item) 1300 + 1301 + #define INITIALIZE_PATH(var) \ 1302 + struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,} 1303 + 1304 + /* Get path element by path and path position. */ 1305 + #define PATH_OFFSET_PELEMENT(path, n_offset) ((path)->path_elements + (n_offset)) 1306 + 1307 + /* Get buffer header at the path by path and path position. */ 1308 + #define PATH_OFFSET_PBUFFER(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_buffer) 1309 + 1310 + /* Get position in the element at the path by path and path position. */ 1311 + #define PATH_OFFSET_POSITION(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_position) 1312 + 1313 + #define PATH_PLAST_BUFFER(path) (PATH_OFFSET_PBUFFER((path), (path)->path_length)) 1314 + /* you know, to the person who didn't 1315 + write this the macro name does not 1316 + at first suggest what it does. 1317 + Maybe POSITION_FROM_PATH_END? Or 1318 + maybe we should just focus on 1319 + dumping paths... -Hans */ 1320 + #define PATH_LAST_POSITION(path) (PATH_OFFSET_POSITION((path), (path)->path_length)) 1321 + 1322 + #define PATH_PITEM_HEAD(path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path)) 1323 + 1324 + /* in do_balance leaf has h == 0 in contrast with path structure, 1325 + where root has level == 0. That is why we need these defines */ 1326 + #define PATH_H_PBUFFER(path, h) PATH_OFFSET_PBUFFER (path, path->path_length - (h)) /* tb->S[h] */ 1327 + #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ 1328 + #define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) 1329 + #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ 1330 + 1331 + #define PATH_H_PATH_OFFSET(path, n_h) ((path)->path_length - (n_h)) 1332 + 1333 + #define get_last_bh(path) PATH_PLAST_BUFFER(path) 1334 + #define get_ih(path) PATH_PITEM_HEAD(path) 1335 + #define get_item_pos(path) PATH_LAST_POSITION(path) 1336 + #define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path))) 1337 + #define item_moved(ih,path) comp_items(ih, path) 1338 + #define path_changed(ih,path) comp_items (ih, path) 1339 + 1340 + /***************************************************************************/ 1341 + /* MISC */ 1342 + /***************************************************************************/ 1343 + 1344 + /* Size of pointer to the unformatted node. */ 1345 + #define UNFM_P_SIZE (sizeof(unp_t)) 1346 + #define UNFM_P_SHIFT 2 1347 + 1348 + // in in-core inode key is stored on le form 1349 + #define INODE_PKEY(inode) ((struct reiserfs_key *)(REISERFS_I(inode)->i_key)) 1350 + 1351 + #define MAX_UL_INT 0xffffffff 1352 + #define MAX_INT 0x7ffffff 1353 + #define MAX_US_INT 0xffff 1354 + 1355 + // reiserfs version 2 has max offset 60 bits. Version 1 - 32 bit offset 1356 + #define U32_MAX (~(__u32)0) 1357 + 1358 + static inline loff_t max_reiserfs_offset(struct inode *inode) 1359 + { 1360 + if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5) 1361 + return (loff_t) U32_MAX; 1362 + 1363 + return (loff_t) ((~(__u64) 0) >> 4); 1364 + } 1365 + 1366 + /*#define MAX_KEY_UNIQUENESS MAX_UL_INT*/ 1367 + #define MAX_KEY_OBJECTID MAX_UL_INT 1368 + 1369 + #define MAX_B_NUM MAX_UL_INT 1370 + #define MAX_FC_NUM MAX_US_INT 1371 + 1372 + /* the purpose is to detect overflow of an unsigned short */ 1373 + #define REISERFS_LINK_MAX (MAX_US_INT - 1000) 1374 + 1375 + /* The following defines are used in reiserfs_insert_item and reiserfs_append_item */ 1376 + #define REISERFS_KERNEL_MEM 0 /* reiserfs kernel memory mode */ 1377 + #define REISERFS_USER_MEM 1 /* reiserfs user memory mode */ 1378 + 1379 + #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) 1380 + #define get_generation(s) atomic_read (&fs_generation(s)) 1381 + #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) 1382 + #define __fs_changed(gen,s) (gen != get_generation (s)) 1383 + #define fs_changed(gen,s) \ 1384 + ({ \ 1385 + reiserfs_cond_resched(s); \ 1386 + __fs_changed(gen, s); \ 1387 + }) 1388 + 1389 + /***************************************************************************/ 1390 + /* FIXATE NODES */ 1391 + /***************************************************************************/ 1392 + 1393 + #define VI_TYPE_LEFT_MERGEABLE 1 1394 + #define VI_TYPE_RIGHT_MERGEABLE 2 1395 + 1396 + /* To make any changes in the tree we always first find node, that 1397 + contains item to be changed/deleted or place to insert a new 1398 + item. We call this node S. To do balancing we need to decide what 1399 + we will shift to left/right neighbor, or to a new node, where new 1400 + item will be etc. To make this analysis simpler we build virtual 1401 + node. Virtual node is an array of items, that will replace items of 1402 + node S. (For instance if we are going to delete an item, virtual 1403 + node does not contain it). Virtual node keeps information about 1404 + item sizes and types, mergeability of first and last items, sizes 1405 + of all entries in directory item. We use this array of items when 1406 + calculating what we can shift to neighbors and how many nodes we 1407 + have to have if we do not any shiftings, if we shift to left/right 1408 + neighbor or to both. */ 1409 + struct virtual_item { 1410 + int vi_index; // index in the array of item operations 1411 + unsigned short vi_type; // left/right mergeability 1412 + unsigned short vi_item_len; /* length of item that it will have after balancing */ 1413 + struct item_head *vi_ih; 1414 + const char *vi_item; // body of item (old or new) 1415 + const void *vi_new_data; // 0 always but paste mode 1416 + void *vi_uarea; // item specific area 1417 + }; 1418 + 1419 + struct virtual_node { 1420 + char *vn_free_ptr; /* this is a pointer to the free space in the buffer */ 1421 + unsigned short vn_nr_item; /* number of items in virtual node */ 1422 + short vn_size; /* size of node , that node would have if it has unlimited size and no balancing is performed */ 1423 + short vn_mode; /* mode of balancing (paste, insert, delete, cut) */ 1424 + short vn_affected_item_num; 1425 + short vn_pos_in_item; 1426 + struct item_head *vn_ins_ih; /* item header of inserted item, 0 for other modes */ 1427 + const void *vn_data; 1428 + struct virtual_item *vn_vi; /* array of items (including a new one, excluding item to be deleted) */ 1429 + }; 1430 + 1431 + /* used by directory items when creating virtual nodes */ 1432 + struct direntry_uarea { 1433 + int flags; 1434 + __u16 entry_count; 1435 + __u16 entry_sizes[1]; 1436 + } __attribute__ ((__packed__)); 1437 + 1438 + /***************************************************************************/ 1439 + /* TREE BALANCE */ 1440 + /***************************************************************************/ 1441 + 1442 + /* This temporary structure is used in tree balance algorithms, and 1443 + constructed as we go to the extent that its various parts are 1444 + needed. It contains arrays of nodes that can potentially be 1445 + involved in the balancing of node S, and parameters that define how 1446 + each of the nodes must be balanced. Note that in these algorithms 1447 + for balancing the worst case is to need to balance the current node 1448 + S and the left and right neighbors and all of their parents plus 1449 + create a new node. We implement S1 balancing for the leaf nodes 1450 + and S0 balancing for the internal nodes (S1 and S0 are defined in 1451 + our papers.)*/ 1452 + 1453 + #define MAX_FREE_BLOCK 7 /* size of the array of buffers to free at end of do_balance */ 1454 + 1455 + /* maximum number of FEB blocknrs on a single level */ 1456 + #define MAX_AMOUNT_NEEDED 2 1457 + 1458 + /* someday somebody will prefix every field in this struct with tb_ */ 1459 + struct tree_balance { 1460 + int tb_mode; 1461 + int need_balance_dirty; 1462 + struct super_block *tb_sb; 1463 + struct reiserfs_transaction_handle *transaction_handle; 1464 + struct treepath *tb_path; 1465 + struct buffer_head *L[MAX_HEIGHT]; /* array of left neighbors of nodes in the path */ 1466 + struct buffer_head *R[MAX_HEIGHT]; /* array of right neighbors of nodes in the path */ 1467 + struct buffer_head *FL[MAX_HEIGHT]; /* array of fathers of the left neighbors */ 1468 + struct buffer_head *FR[MAX_HEIGHT]; /* array of fathers of the right neighbors */ 1469 + struct buffer_head *CFL[MAX_HEIGHT]; /* array of common parents of center node and its left neighbor */ 1470 + struct buffer_head *CFR[MAX_HEIGHT]; /* array of common parents of center node and its right neighbor */ 1471 + 1472 + struct buffer_head *FEB[MAX_FEB_SIZE]; /* array of empty buffers. Number of buffers in array equals 1473 + cur_blknum. */ 1474 + struct buffer_head *used[MAX_FEB_SIZE]; 1475 + struct buffer_head *thrown[MAX_FEB_SIZE]; 1476 + int lnum[MAX_HEIGHT]; /* array of number of items which must be 1477 + shifted to the left in order to balance the 1478 + current node; for leaves includes item that 1479 + will be partially shifted; for internal 1480 + nodes, it is the number of child pointers 1481 + rather than items. It includes the new item 1482 + being created. The code sometimes subtracts 1483 + one to get the number of wholly shifted 1484 + items for other purposes. */ 1485 + int rnum[MAX_HEIGHT]; /* substitute right for left in comment above */ 1486 + int lkey[MAX_HEIGHT]; /* array indexed by height h mapping the key delimiting L[h] and 1487 + S[h] to its item number within the node CFL[h] */ 1488 + int rkey[MAX_HEIGHT]; /* substitute r for l in comment above */ 1489 + int insert_size[MAX_HEIGHT]; /* the number of bytes by we are trying to add or remove from 1490 + S[h]. A negative value means removing. */ 1491 + int blknum[MAX_HEIGHT]; /* number of nodes that will replace node S[h] after 1492 + balancing on the level h of the tree. If 0 then S is 1493 + being deleted, if 1 then S is remaining and no new nodes 1494 + are being created, if 2 or 3 then 1 or 2 new nodes is 1495 + being created */ 1496 + 1497 + /* fields that are used only for balancing leaves of the tree */ 1498 + int cur_blknum; /* number of empty blocks having been already allocated */ 1499 + int s0num; /* number of items that fall into left most node when S[0] splits */ 1500 + int s1num; /* number of items that fall into first new node when S[0] splits */ 1501 + int s2num; /* number of items that fall into second new node when S[0] splits */ 1502 + int lbytes; /* number of bytes which can flow to the left neighbor from the left */ 1503 + /* most liquid item that cannot be shifted from S[0] entirely */ 1504 + /* if -1 then nothing will be partially shifted */ 1505 + int rbytes; /* number of bytes which will flow to the right neighbor from the right */ 1506 + /* most liquid item that cannot be shifted from S[0] entirely */ 1507 + /* if -1 then nothing will be partially shifted */ 1508 + int s1bytes; /* number of bytes which flow to the first new node when S[0] splits */ 1509 + /* note: if S[0] splits into 3 nodes, then items do not need to be cut */ 1510 + int s2bytes; 1511 + struct buffer_head *buf_to_free[MAX_FREE_BLOCK]; /* buffers which are to be freed after do_balance finishes by unfix_nodes */ 1512 + char *vn_buf; /* kmalloced memory. Used to create 1513 + virtual node and keep map of 1514 + dirtied bitmap blocks */ 1515 + int vn_buf_size; /* size of the vn_buf */ 1516 + struct virtual_node *tb_vn; /* VN starts after bitmap of bitmap blocks */ 1517 + 1518 + int fs_gen; /* saved value of `reiserfs_generation' counter 1519 + see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ 1520 + #ifdef DISPLACE_NEW_PACKING_LOCALITIES 1521 + struct in_core_key key; /* key pointer, to pass to block allocator or 1522 + another low-level subsystem */ 1523 + #endif 1524 + }; 1525 + 1526 + /* These are modes of balancing */ 1527 + 1528 + /* When inserting an item. */ 1529 + #define M_INSERT 'i' 1530 + /* When inserting into (directories only) or appending onto an already 1531 + existent item. */ 1532 + #define M_PASTE 'p' 1533 + /* When deleting an item. */ 1534 + #define M_DELETE 'd' 1535 + /* When truncating an item or removing an entry from a (directory) item. */ 1536 + #define M_CUT 'c' 1537 + 1538 + /* used when balancing on leaf level skipped (in reiserfsck) */ 1539 + #define M_INTERNAL 'n' 1540 + 1541 + /* When further balancing is not needed, then do_balance does not need 1542 + to be called. */ 1543 + #define M_SKIP_BALANCING 's' 1544 + #define M_CONVERT 'v' 1545 + 1546 + /* modes of leaf_move_items */ 1547 + #define LEAF_FROM_S_TO_L 0 1548 + #define LEAF_FROM_S_TO_R 1 1549 + #define LEAF_FROM_R_TO_L 2 1550 + #define LEAF_FROM_L_TO_R 3 1551 + #define LEAF_FROM_S_TO_SNEW 4 1552 + 1553 + #define FIRST_TO_LAST 0 1554 + #define LAST_TO_FIRST 1 1555 + 1556 + /* used in do_balance for passing parent of node information that has 1557 + been gotten from tb struct */ 1558 + struct buffer_info { 1559 + struct tree_balance *tb; 1560 + struct buffer_head *bi_bh; 1561 + struct buffer_head *bi_parent; 1562 + int bi_position; 1563 + }; 1564 + 1565 + static inline struct super_block *sb_from_tb(struct tree_balance *tb) 1566 + { 1567 + return tb ? tb->tb_sb : NULL; 1568 + } 1569 + 1570 + static inline struct super_block *sb_from_bi(struct buffer_info *bi) 1571 + { 1572 + return bi ? sb_from_tb(bi->tb) : NULL; 1573 + } 1574 + 1575 + /* there are 4 types of items: stat data, directory item, indirect, direct. 1576 + +-------------------+------------+--------------+------------+ 1577 + | | k_offset | k_uniqueness | mergeable? | 1578 + +-------------------+------------+--------------+------------+ 1579 + | stat data | 0 | 0 | no | 1580 + +-------------------+------------+--------------+------------+ 1581 + | 1st directory item| DOT_OFFSET |DIRENTRY_UNIQUENESS| no | 1582 + | non 1st directory | hash value | | yes | 1583 + | item | | | | 1584 + +-------------------+------------+--------------+------------+ 1585 + | indirect item | offset + 1 |TYPE_INDIRECT | if this is not the first indirect item of the object 1586 + +-------------------+------------+--------------+------------+ 1587 + | direct item | offset + 1 |TYPE_DIRECT | if not this is not the first direct item of the object 1588 + +-------------------+------------+--------------+------------+ 1589 + */ 1590 + 1591 + struct item_operations { 1592 + int (*bytes_number) (struct item_head * ih, int block_size); 1593 + void (*decrement_key) (struct cpu_key *); 1594 + int (*is_left_mergeable) (struct reiserfs_key * ih, 1595 + unsigned long bsize); 1596 + void (*print_item) (struct item_head *, char *item); 1597 + void (*check_item) (struct item_head *, char *item); 1598 + 1599 + int (*create_vi) (struct virtual_node * vn, struct virtual_item * vi, 1600 + int is_affected, int insert_size); 1601 + int (*check_left) (struct virtual_item * vi, int free, 1602 + int start_skip, int end_skip); 1603 + int (*check_right) (struct virtual_item * vi, int free); 1604 + int (*part_size) (struct virtual_item * vi, int from, int to); 1605 + int (*unit_num) (struct virtual_item * vi); 1606 + void (*print_vi) (struct virtual_item * vi); 1607 + }; 1608 + 1609 + extern struct item_operations *item_ops[TYPE_ANY + 1]; 1610 + 1611 + #define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize) 1612 + #define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize) 1613 + #define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item) 1614 + #define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item) 1615 + #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) 1616 + #define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip) 1617 + #define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free) 1618 + #define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to) 1619 + #define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi) 1620 + #define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi) 1621 + 1622 + #define COMP_SHORT_KEYS comp_short_keys 1623 + 1624 + /* number of blocks pointed to by the indirect item */ 1625 + #define I_UNFM_NUM(ih) (ih_item_len(ih) / UNFM_P_SIZE) 1626 + 1627 + /* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ 1628 + #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) 1629 + 1630 + /* number of bytes contained by the direct item or the unformatted nodes the indirect item points to */ 1631 + 1632 + /* get the item header */ 1633 + #define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) ) 1634 + 1635 + /* get key */ 1636 + #define B_N_PDELIM_KEY(bh,item_num) ( (struct reiserfs_key * )((bh)->b_data + BLKH_SIZE) + (item_num) ) 1637 + 1638 + /* get the key */ 1639 + #define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) ) 1640 + 1641 + /* get item body */ 1642 + #define B_N_PITEM(bh,item_num) ( (bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(item_num)))) 1643 + 1644 + /* get the stat data by the buffer header and the item order */ 1645 + #define B_N_STAT_DATA(bh,nr) \ 1646 + ( (struct stat_data *)((bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(nr))) ) ) 1647 + 1648 + /* following defines use reiserfs buffer header and item header */ 1649 + 1650 + /* get stat-data */ 1651 + #define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) ) 1652 + 1653 + // this is 3976 for size==4096 1654 + #define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE) 1655 + 1656 + /* indirect items consist of entries which contain blocknrs, pos 1657 + indicates which entry, and B_I_POS_UNFM_POINTER resolves to the 1658 + blocknr contained by the entry pos points to */ 1659 + #define B_I_POS_UNFM_POINTER(bh,ih,pos) le32_to_cpu(*(((unp_t *)B_I_PITEM(bh,ih)) + (pos))) 1660 + #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) 1661 + 1662 + struct reiserfs_iget_args { 1663 + __u32 objectid; 1664 + __u32 dirid; 1665 + }; 1666 + 1667 + /***************************************************************************/ 1668 + /* FUNCTION DECLARATIONS */ 1669 + /***************************************************************************/ 1670 + 1671 + #define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12) 1672 + 1673 + #define journal_trans_half(blocksize) \ 1674 + ((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32)) 1675 + 1676 + /* journal.c see journal.c for all the comments here */ 1677 + 1678 + /* first block written in a commit. */ 1679 + struct reiserfs_journal_desc { 1680 + __le32 j_trans_id; /* id of commit */ 1681 + __le32 j_len; /* length of commit. len +1 is the commit block */ 1682 + __le32 j_mount_id; /* mount id of this trans */ 1683 + __le32 j_realblock[1]; /* real locations for each block */ 1684 + }; 1685 + 1686 + #define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id) 1687 + #define get_desc_trans_len(d) le32_to_cpu((d)->j_len) 1688 + #define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id) 1689 + 1690 + #define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0) 1691 + #define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0) 1692 + #define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0) 1693 + 1694 + /* last block written in a commit */ 1695 + struct reiserfs_journal_commit { 1696 + __le32 j_trans_id; /* must match j_trans_id from the desc block */ 1697 + __le32 j_len; /* ditto */ 1698 + __le32 j_realblock[1]; /* real locations for each block */ 1699 + }; 1700 + 1701 + #define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id) 1702 + #define get_commit_trans_len(c) le32_to_cpu((c)->j_len) 1703 + #define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id) 1704 + 1705 + #define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0) 1706 + #define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0) 1707 + 1708 + /* this header block gets written whenever a transaction is considered fully flushed, and is more recent than the 1709 + ** last fully flushed transaction. fully flushed means all the log blocks and all the real blocks are on disk, 1710 + ** and this transaction does not need to be replayed. 1711 + */ 1712 + struct reiserfs_journal_header { 1713 + __le32 j_last_flush_trans_id; /* id of last fully flushed transaction */ 1714 + __le32 j_first_unflushed_offset; /* offset in the log of where to start replay after a crash */ 1715 + __le32 j_mount_id; 1716 + /* 12 */ struct journal_params jh_journal; 1717 + }; 1718 + 1719 + /* biggest tunable defines are right here */ 1720 + #define JOURNAL_BLOCK_COUNT 8192 /* number of blocks in the journal */ 1721 + #define JOURNAL_TRANS_MAX_DEFAULT 1024 /* biggest possible single transaction, don't change for now (8/3/99) */ 1722 + #define JOURNAL_TRANS_MIN_DEFAULT 256 1723 + #define JOURNAL_MAX_BATCH_DEFAULT 900 /* max blocks to batch into one transaction, don't make this any bigger than 900 */ 1724 + #define JOURNAL_MIN_RATIO 2 1725 + #define JOURNAL_MAX_COMMIT_AGE 30 1726 + #define JOURNAL_MAX_TRANS_AGE 30 1727 + #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) 1728 + #define JOURNAL_BLOCKS_PER_OBJECT(sb) (JOURNAL_PER_BALANCE_CNT * 3 + \ 1729 + 2 * (REISERFS_QUOTA_INIT_BLOCKS(sb) + \ 1730 + REISERFS_QUOTA_TRANS_BLOCKS(sb))) 1731 + 1732 + #ifdef CONFIG_QUOTA 1733 + #define REISERFS_QUOTA_OPTS ((1 << REISERFS_USRQUOTA) | (1 << REISERFS_GRPQUOTA)) 1734 + /* We need to update data and inode (atime) */ 1735 + #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? 2 : 0) 1736 + /* 1 balancing, 1 bitmap, 1 data per write + stat data update */ 1737 + #define REISERFS_QUOTA_INIT_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \ 1738 + (DQUOT_INIT_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_INIT_REWRITE+1) : 0) 1739 + /* same as with INIT */ 1740 + #define REISERFS_QUOTA_DEL_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \ 1741 + (DQUOT_DEL_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_DEL_REWRITE+1) : 0) 1742 + #else 1743 + #define REISERFS_QUOTA_TRANS_BLOCKS(s) 0 1744 + #define REISERFS_QUOTA_INIT_BLOCKS(s) 0 1745 + #define REISERFS_QUOTA_DEL_BLOCKS(s) 0 1746 + #endif 1747 + 1748 + /* both of these can be as low as 1, or as high as you want. The min is the 1749 + ** number of 4k bitmap nodes preallocated on mount. New nodes are allocated 1750 + ** as needed, and released when transactions are committed. On release, if 1751 + ** the current number of nodes is > max, the node is freed, otherwise, 1752 + ** it is put on a free list for faster use later. 1753 + */ 1754 + #define REISERFS_MIN_BITMAP_NODES 10 1755 + #define REISERFS_MAX_BITMAP_NODES 100 1756 + 1757 + #define JBH_HASH_SHIFT 13 /* these are based on journal hash size of 8192 */ 1758 + #define JBH_HASH_MASK 8191 1759 + 1760 + #define _jhashfn(sb,block) \ 1761 + (((unsigned long)sb>>L1_CACHE_SHIFT) ^ \ 1762 + (((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12)))) 1763 + #define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK]) 1764 + 1765 + // We need these to make journal.c code more readable 1766 + #define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1767 + #define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1768 + #define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1769 + 1770 + enum reiserfs_bh_state_bits { 1771 + BH_JDirty = BH_PrivateStart, /* buffer is in current transaction */ 1772 + BH_JDirty_wait, 1773 + BH_JNew, /* disk block was taken off free list before 1774 + * being in a finished transaction, or 1775 + * written to disk. Can be reused immed. */ 1776 + BH_JPrepared, 1777 + BH_JRestore_dirty, 1778 + BH_JTest, // debugging only will go away 1779 + }; 1780 + 1781 + BUFFER_FNS(JDirty, journaled); 1782 + TAS_BUFFER_FNS(JDirty, journaled); 1783 + BUFFER_FNS(JDirty_wait, journal_dirty); 1784 + TAS_BUFFER_FNS(JDirty_wait, journal_dirty); 1785 + BUFFER_FNS(JNew, journal_new); 1786 + TAS_BUFFER_FNS(JNew, journal_new); 1787 + BUFFER_FNS(JPrepared, journal_prepared); 1788 + TAS_BUFFER_FNS(JPrepared, journal_prepared); 1789 + BUFFER_FNS(JRestore_dirty, journal_restore_dirty); 1790 + TAS_BUFFER_FNS(JRestore_dirty, journal_restore_dirty); 1791 + BUFFER_FNS(JTest, journal_test); 1792 + TAS_BUFFER_FNS(JTest, journal_test); 1793 + 1794 + /* 1795 + ** transaction handle which is passed around for all journal calls 1796 + */ 1797 + struct reiserfs_transaction_handle { 1798 + struct super_block *t_super; /* super for this FS when journal_begin was 1799 + called. saves calls to reiserfs_get_super 1800 + also used by nested transactions to make 1801 + sure they are nesting on the right FS 1802 + _must_ be first in the handle 1803 + */ 1804 + int t_refcount; 1805 + int t_blocks_logged; /* number of blocks this writer has logged */ 1806 + int t_blocks_allocated; /* number of blocks this writer allocated */ 1807 + unsigned int t_trans_id; /* sanity check, equals the current trans id */ 1808 + void *t_handle_save; /* save existing current->journal_info */ 1809 + unsigned displace_new_blocks:1; /* if new block allocation occurres, that block 1810 + should be displaced from others */ 1811 + struct list_head t_list; 1812 + }; 1813 + 1814 + /* used to keep track of ordered and tail writes, attached to the buffer 1815 + * head through b_journal_head. 1816 + */ 1817 + struct reiserfs_jh { 1818 + struct reiserfs_journal_list *jl; 1819 + struct buffer_head *bh; 1820 + struct list_head list; 1821 + }; 1822 + 1823 + void reiserfs_free_jh(struct buffer_head *bh); 1824 + int reiserfs_add_tail_list(struct inode *inode, struct buffer_head *bh); 1825 + int reiserfs_add_ordered_list(struct inode *inode, struct buffer_head *bh); 1826 + int journal_mark_dirty(struct reiserfs_transaction_handle *, 1827 + struct super_block *, struct buffer_head *bh); 1828 + 1829 + static inline int reiserfs_file_data_log(struct inode *inode) 1830 + { 1831 + if (reiserfs_data_log(inode->i_sb) || 1832 + (REISERFS_I(inode)->i_flags & i_data_log)) 1833 + return 1; 1834 + return 0; 1835 + } 1836 + 1837 + static inline int reiserfs_transaction_running(struct super_block *s) 1838 + { 1839 + struct reiserfs_transaction_handle *th = current->journal_info; 1840 + if (th && th->t_super == s) 1841 + return 1; 1842 + if (th && th->t_super == NULL) 1843 + BUG(); 1844 + return 0; 1845 + } 1846 + 1847 + static inline int reiserfs_transaction_free_space(struct reiserfs_transaction_handle *th) 1848 + { 1849 + return th->t_blocks_allocated - th->t_blocks_logged; 1850 + } 1851 + 1852 + struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct 1853 + super_block 1854 + *, 1855 + int count); 1856 + int reiserfs_end_persistent_transaction(struct reiserfs_transaction_handle *); 1857 + int reiserfs_commit_page(struct inode *inode, struct page *page, 1858 + unsigned from, unsigned to); 1859 + int reiserfs_flush_old_commits(struct super_block *); 1860 + int reiserfs_commit_for_inode(struct inode *); 1861 + int reiserfs_inode_needs_commit(struct inode *); 1862 + void reiserfs_update_inode_transaction(struct inode *); 1863 + void reiserfs_wait_on_write_block(struct super_block *s); 1864 + void reiserfs_block_writes(struct reiserfs_transaction_handle *th); 1865 + void reiserfs_allow_writes(struct super_block *s); 1866 + void reiserfs_check_lock_depth(struct super_block *s, char *caller); 1867 + int reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, 1868 + int wait); 1869 + void reiserfs_restore_prepared_buffer(struct super_block *, 1870 + struct buffer_head *bh); 1871 + int journal_init(struct super_block *, const char *j_dev_name, int old_format, 1872 + unsigned int); 1873 + int journal_release(struct reiserfs_transaction_handle *, struct super_block *); 1874 + int journal_release_error(struct reiserfs_transaction_handle *, 1875 + struct super_block *); 1876 + int journal_end(struct reiserfs_transaction_handle *, struct super_block *, 1877 + unsigned long); 1878 + int journal_end_sync(struct reiserfs_transaction_handle *, struct super_block *, 1879 + unsigned long); 1880 + int journal_mark_freed(struct reiserfs_transaction_handle *, 1881 + struct super_block *, b_blocknr_t blocknr); 1882 + int journal_transaction_should_end(struct reiserfs_transaction_handle *, int); 1883 + int reiserfs_in_journal(struct super_block *sb, unsigned int bmap_nr, 1884 + int bit_nr, int searchall, b_blocknr_t *next); 1885 + int journal_begin(struct reiserfs_transaction_handle *, 1886 + struct super_block *sb, unsigned long); 1887 + int journal_join_abort(struct reiserfs_transaction_handle *, 1888 + struct super_block *sb, unsigned long); 1889 + void reiserfs_abort_journal(struct super_block *sb, int errno); 1890 + void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...); 1891 + int reiserfs_allocate_list_bitmaps(struct super_block *s, 1892 + struct reiserfs_list_bitmap *, unsigned int); 1893 + 1894 + void add_save_link(struct reiserfs_transaction_handle *th, 1895 + struct inode *inode, int truncate); 1896 + int remove_save_link(struct inode *inode, int truncate); 1897 + 1898 + /* objectid.c */ 1899 + __u32 reiserfs_get_unused_objectid(struct reiserfs_transaction_handle *th); 1900 + void reiserfs_release_objectid(struct reiserfs_transaction_handle *th, 1901 + __u32 objectid_to_release); 1902 + int reiserfs_convert_objectid_map_v1(struct super_block *); 1903 + 1904 + /* stree.c */ 1905 + int B_IS_IN_TREE(const struct buffer_head *); 1906 + extern void copy_item_head(struct item_head *to, 1907 + const struct item_head *from); 1908 + 1909 + // first key is in cpu form, second - le 1910 + extern int comp_short_keys(const struct reiserfs_key *le_key, 1911 + const struct cpu_key *cpu_key); 1912 + extern void le_key2cpu_key(struct cpu_key *to, const struct reiserfs_key *from); 1913 + 1914 + // both are in le form 1915 + extern int comp_le_keys(const struct reiserfs_key *, 1916 + const struct reiserfs_key *); 1917 + extern int comp_short_le_keys(const struct reiserfs_key *, 1918 + const struct reiserfs_key *); 1919 + 1920 + // 1921 + // get key version from on disk key - kludge 1922 + // 1923 + static inline int le_key_version(const struct reiserfs_key *key) 1924 + { 1925 + int type; 1926 + 1927 + type = offset_v2_k_type(&(key->u.k_offset_v2)); 1928 + if (type != TYPE_DIRECT && type != TYPE_INDIRECT 1929 + && type != TYPE_DIRENTRY) 1930 + return KEY_FORMAT_3_5; 1931 + 1932 + return KEY_FORMAT_3_6; 1933 + 1934 + } 1935 + 1936 + static inline void copy_key(struct reiserfs_key *to, 1937 + const struct reiserfs_key *from) 1938 + { 1939 + memcpy(to, from, KEY_SIZE); 1940 + } 1941 + 1942 + int comp_items(const struct item_head *stored_ih, const struct treepath *path); 1943 + const struct reiserfs_key *get_rkey(const struct treepath *chk_path, 1944 + const struct super_block *sb); 1945 + int search_by_key(struct super_block *, const struct cpu_key *, 1946 + struct treepath *, int); 1947 + #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) 1948 + int search_for_position_by_key(struct super_block *sb, 1949 + const struct cpu_key *cpu_key, 1950 + struct treepath *search_path); 1951 + extern void decrement_bcount(struct buffer_head *bh); 1952 + void decrement_counters_in_path(struct treepath *search_path); 1953 + void pathrelse(struct treepath *search_path); 1954 + int reiserfs_check_path(struct treepath *p); 1955 + void pathrelse_and_restore(struct super_block *s, struct treepath *search_path); 1956 + 1957 + int reiserfs_insert_item(struct reiserfs_transaction_handle *th, 1958 + struct treepath *path, 1959 + const struct cpu_key *key, 1960 + struct item_head *ih, 1961 + struct inode *inode, const char *body); 1962 + 1963 + int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, 1964 + struct treepath *path, 1965 + const struct cpu_key *key, 1966 + struct inode *inode, 1967 + const char *body, int paste_size); 1968 + 1969 + int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th, 1970 + struct treepath *path, 1971 + struct cpu_key *key, 1972 + struct inode *inode, 1973 + struct page *page, loff_t new_file_size); 1974 + 1975 + int reiserfs_delete_item(struct reiserfs_transaction_handle *th, 1976 + struct treepath *path, 1977 + const struct cpu_key *key, 1978 + struct inode *inode, struct buffer_head *un_bh); 1979 + 1980 + void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th, 1981 + struct inode *inode, struct reiserfs_key *key); 1982 + int reiserfs_delete_object(struct reiserfs_transaction_handle *th, 1983 + struct inode *inode); 1984 + int reiserfs_do_truncate(struct reiserfs_transaction_handle *th, 1985 + struct inode *inode, struct page *, 1986 + int update_timestamps); 1987 + 1988 + #define i_block_size(inode) ((inode)->i_sb->s_blocksize) 1989 + #define file_size(inode) ((inode)->i_size) 1990 + #define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1)) 1991 + 1992 + #define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\ 1993 + !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 ) 1994 + 1995 + void padd_item(char *item, int total_length, int length); 1996 + 1997 + /* inode.c */ 1998 + /* args for the create parameter of reiserfs_get_block */ 1999 + #define GET_BLOCK_NO_CREATE 0 /* don't create new blocks or convert tails */ 2000 + #define GET_BLOCK_CREATE 1 /* add anything you need to find block */ 2001 + #define GET_BLOCK_NO_HOLE 2 /* return -ENOENT for file holes */ 2002 + #define GET_BLOCK_READ_DIRECT 4 /* read the tail if indirect item not found */ 2003 + #define GET_BLOCK_NO_IMUX 8 /* i_mutex is not held, don't preallocate */ 2004 + #define GET_BLOCK_NO_DANGLE 16 /* don't leave any transactions running */ 2005 + 2006 + void reiserfs_read_locked_inode(struct inode *inode, 2007 + struct reiserfs_iget_args *args); 2008 + int reiserfs_find_actor(struct inode *inode, void *p); 2009 + int reiserfs_init_locked_inode(struct inode *inode, void *p); 2010 + void reiserfs_evict_inode(struct inode *inode); 2011 + int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc); 2012 + int reiserfs_get_block(struct inode *inode, sector_t block, 2013 + struct buffer_head *bh_result, int create); 2014 + struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid, 2015 + int fh_len, int fh_type); 2016 + struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid, 2017 + int fh_len, int fh_type); 2018 + int reiserfs_encode_fh(struct dentry *dentry, __u32 * data, int *lenp, 2019 + int connectable); 2020 + 2021 + int reiserfs_truncate_file(struct inode *, int update_timestamps); 2022 + void make_cpu_key(struct cpu_key *cpu_key, struct inode *inode, loff_t offset, 2023 + int type, int key_length); 2024 + void make_le_item_head(struct item_head *ih, const struct cpu_key *key, 2025 + int version, 2026 + loff_t offset, int type, int length, int entry_count); 2027 + struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key); 2028 + 2029 + struct reiserfs_security_handle; 2030 + int reiserfs_new_inode(struct reiserfs_transaction_handle *th, 2031 + struct inode *dir, umode_t mode, 2032 + const char *symname, loff_t i_size, 2033 + struct dentry *dentry, struct inode *inode, 2034 + struct reiserfs_security_handle *security); 2035 + 2036 + void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th, 2037 + struct inode *inode, loff_t size); 2038 + 2039 + static inline void reiserfs_update_sd(struct reiserfs_transaction_handle *th, 2040 + struct inode *inode) 2041 + { 2042 + reiserfs_update_sd_size(th, inode, inode->i_size); 2043 + } 2044 + 2045 + void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode); 2046 + void i_attrs_to_sd_attrs(struct inode *inode, __u16 * sd_attrs); 2047 + int reiserfs_setattr(struct dentry *dentry, struct iattr *attr); 2048 + 2049 + int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len); 2050 + 2051 + /* namei.c */ 2052 + void set_de_name_and_namelen(struct reiserfs_dir_entry *de); 2053 + int search_by_entry_key(struct super_block *sb, const struct cpu_key *key, 2054 + struct treepath *path, struct reiserfs_dir_entry *de); 2055 + struct dentry *reiserfs_get_parent(struct dentry *); 2056 + 2057 + #ifdef CONFIG_REISERFS_PROC_INFO 2058 + int reiserfs_proc_info_init(struct super_block *sb); 2059 + int reiserfs_proc_info_done(struct super_block *sb); 2060 + int reiserfs_proc_info_global_init(void); 2061 + int reiserfs_proc_info_global_done(void); 2062 + 2063 + #define PROC_EXP( e ) e 2064 + 2065 + #define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data 2066 + #define PROC_INFO_MAX( sb, field, value ) \ 2067 + __PINFO( sb ).field = \ 2068 + max( REISERFS_SB( sb ) -> s_proc_info_data.field, value ) 2069 + #define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) ) 2070 + #define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) ) 2071 + #define PROC_INFO_BH_STAT( sb, bh, level ) \ 2072 + PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \ 2073 + PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \ 2074 + PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) ) 2075 + #else 2076 + static inline int reiserfs_proc_info_init(struct super_block *sb) 2077 + { 2078 + return 0; 2079 + } 2080 + 2081 + static inline int reiserfs_proc_info_done(struct super_block *sb) 2082 + { 2083 + return 0; 2084 + } 2085 + 2086 + static inline int reiserfs_proc_info_global_init(void) 2087 + { 2088 + return 0; 2089 + } 2090 + 2091 + static inline int reiserfs_proc_info_global_done(void) 2092 + { 2093 + return 0; 2094 + } 2095 + 2096 + #define PROC_EXP( e ) 2097 + #define VOID_V ( ( void ) 0 ) 2098 + #define PROC_INFO_MAX( sb, field, value ) VOID_V 2099 + #define PROC_INFO_INC( sb, field ) VOID_V 2100 + #define PROC_INFO_ADD( sb, field, val ) VOID_V 2101 + #define PROC_INFO_BH_STAT(sb, bh, n_node_level) VOID_V 2102 + #endif 2103 + 2104 + /* dir.c */ 2105 + extern const struct inode_operations reiserfs_dir_inode_operations; 2106 + extern const struct inode_operations reiserfs_symlink_inode_operations; 2107 + extern const struct inode_operations reiserfs_special_inode_operations; 2108 + extern const struct file_operations reiserfs_dir_operations; 2109 + int reiserfs_readdir_dentry(struct dentry *, void *, filldir_t, loff_t *); 2110 + 2111 + /* tail_conversion.c */ 2112 + int direct2indirect(struct reiserfs_transaction_handle *, struct inode *, 2113 + struct treepath *, struct buffer_head *, loff_t); 2114 + int indirect2direct(struct reiserfs_transaction_handle *, struct inode *, 2115 + struct page *, struct treepath *, const struct cpu_key *, 2116 + loff_t, char *); 2117 + void reiserfs_unmap_buffer(struct buffer_head *); 2118 + 2119 + /* file.c */ 2120 + extern const struct inode_operations reiserfs_file_inode_operations; 2121 + extern const struct file_operations reiserfs_file_operations; 2122 + extern const struct address_space_operations reiserfs_address_space_operations; 2123 + 2124 + /* fix_nodes.c */ 2125 + 2126 + int fix_nodes(int n_op_mode, struct tree_balance *tb, 2127 + struct item_head *ins_ih, const void *); 2128 + void unfix_nodes(struct tree_balance *); 2129 + 2130 + /* prints.c */ 2131 + void __reiserfs_panic(struct super_block *s, const char *id, 2132 + const char *function, const char *fmt, ...) 2133 + __attribute__ ((noreturn)); 2134 + #define reiserfs_panic(s, id, fmt, args...) \ 2135 + __reiserfs_panic(s, id, __func__, fmt, ##args) 2136 + void __reiserfs_error(struct super_block *s, const char *id, 2137 + const char *function, const char *fmt, ...); 2138 + #define reiserfs_error(s, id, fmt, args...) \ 2139 + __reiserfs_error(s, id, __func__, fmt, ##args) 2140 + void reiserfs_info(struct super_block *s, const char *fmt, ...); 2141 + void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...); 2142 + void print_indirect_item(struct buffer_head *bh, int item_num); 2143 + void store_print_tb(struct tree_balance *tb); 2144 + void print_cur_tb(char *mes); 2145 + void print_de(struct reiserfs_dir_entry *de); 2146 + void print_bi(struct buffer_info *bi, char *mes); 2147 + #define PRINT_LEAF_ITEMS 1 /* print all items */ 2148 + #define PRINT_DIRECTORY_ITEMS 2 /* print directory items */ 2149 + #define PRINT_DIRECT_ITEMS 4 /* print contents of direct items */ 2150 + void print_block(struct buffer_head *bh, ...); 2151 + void print_bmap(struct super_block *s, int silent); 2152 + void print_bmap_block(int i, char *data, int size, int silent); 2153 + /*void print_super_block (struct super_block * s, char * mes);*/ 2154 + void print_objectid_map(struct super_block *s); 2155 + void print_block_head(struct buffer_head *bh, char *mes); 2156 + void check_leaf(struct buffer_head *bh); 2157 + void check_internal(struct buffer_head *bh); 2158 + void print_statistics(struct super_block *s); 2159 + char *reiserfs_hashname(int code); 2160 + 2161 + /* lbalance.c */ 2162 + int leaf_move_items(int shift_mode, struct tree_balance *tb, int mov_num, 2163 + int mov_bytes, struct buffer_head *Snew); 2164 + int leaf_shift_left(struct tree_balance *tb, int shift_num, int shift_bytes); 2165 + int leaf_shift_right(struct tree_balance *tb, int shift_num, int shift_bytes); 2166 + void leaf_delete_items(struct buffer_info *cur_bi, int last_first, int first, 2167 + int del_num, int del_bytes); 2168 + void leaf_insert_into_buf(struct buffer_info *bi, int before, 2169 + struct item_head *inserted_item_ih, 2170 + const char *inserted_item_body, int zeros_number); 2171 + void leaf_paste_in_buffer(struct buffer_info *bi, int pasted_item_num, 2172 + int pos_in_item, int paste_size, const char *body, 2173 + int zeros_number); 2174 + void leaf_cut_from_buffer(struct buffer_info *bi, int cut_item_num, 2175 + int pos_in_item, int cut_size); 2176 + void leaf_paste_entries(struct buffer_info *bi, int item_num, int before, 2177 + int new_entry_count, struct reiserfs_de_head *new_dehs, 2178 + const char *records, int paste_size); 2179 + /* ibalance.c */ 2180 + int balance_internal(struct tree_balance *, int, int, struct item_head *, 2181 + struct buffer_head **); 2182 + 2183 + /* do_balance.c */ 2184 + void do_balance_mark_leaf_dirty(struct tree_balance *tb, 2185 + struct buffer_head *bh, int flag); 2186 + #define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty 2187 + #define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty 2188 + 2189 + void do_balance(struct tree_balance *tb, struct item_head *ih, 2190 + const char *body, int flag); 2191 + void reiserfs_invalidate_buffer(struct tree_balance *tb, 2192 + struct buffer_head *bh); 2193 + 2194 + int get_left_neighbor_position(struct tree_balance *tb, int h); 2195 + int get_right_neighbor_position(struct tree_balance *tb, int h); 2196 + void replace_key(struct tree_balance *tb, struct buffer_head *, int, 2197 + struct buffer_head *, int); 2198 + void make_empty_node(struct buffer_info *); 2199 + struct buffer_head *get_FEB(struct tree_balance *); 2200 + 2201 + /* bitmap.c */ 2202 + 2203 + /* structure contains hints for block allocator, and it is a container for 2204 + * arguments, such as node, search path, transaction_handle, etc. */ 2205 + struct __reiserfs_blocknr_hint { 2206 + struct inode *inode; /* inode passed to allocator, if we allocate unf. nodes */ 2207 + sector_t block; /* file offset, in blocks */ 2208 + struct in_core_key key; 2209 + struct treepath *path; /* search path, used by allocator to deternine search_start by 2210 + * various ways */ 2211 + struct reiserfs_transaction_handle *th; /* transaction handle is needed to log super blocks and 2212 + * bitmap blocks changes */ 2213 + b_blocknr_t beg, end; 2214 + b_blocknr_t search_start; /* a field used to transfer search start value (block number) 2215 + * between different block allocator procedures 2216 + * (determine_search_start() and others) */ 2217 + int prealloc_size; /* is set in determine_prealloc_size() function, used by underlayed 2218 + * function that do actual allocation */ 2219 + 2220 + unsigned formatted_node:1; /* the allocator uses different polices for getting disk space for 2221 + * formatted/unformatted blocks with/without preallocation */ 2222 + unsigned preallocate:1; 2223 + }; 2224 + 2225 + typedef struct __reiserfs_blocknr_hint reiserfs_blocknr_hint_t; 2226 + 2227 + int reiserfs_parse_alloc_options(struct super_block *, char *); 2228 + void reiserfs_init_alloc_options(struct super_block *s); 2229 + 2230 + /* 2231 + * given a directory, this will tell you what packing locality 2232 + * to use for a new object underneat it. The locality is returned 2233 + * in disk byte order (le). 2234 + */ 2235 + __le32 reiserfs_choose_packing(struct inode *dir); 2236 + 2237 + int reiserfs_init_bitmap_cache(struct super_block *sb); 2238 + void reiserfs_free_bitmap_cache(struct super_block *sb); 2239 + void reiserfs_cache_bitmap_metadata(struct super_block *sb, struct buffer_head *bh, struct reiserfs_bitmap_info *info); 2240 + struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb, unsigned int bitmap); 2241 + int is_reusable(struct super_block *s, b_blocknr_t block, int bit_value); 2242 + void reiserfs_free_block(struct reiserfs_transaction_handle *th, struct inode *, 2243 + b_blocknr_t, int for_unformatted); 2244 + int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t *, int, 2245 + int); 2246 + static inline int reiserfs_new_form_blocknrs(struct tree_balance *tb, 2247 + b_blocknr_t * new_blocknrs, 2248 + int amount_needed) 2249 + { 2250 + reiserfs_blocknr_hint_t hint = { 2251 + .th = tb->transaction_handle, 2252 + .path = tb->tb_path, 2253 + .inode = NULL, 2254 + .key = tb->key, 2255 + .block = 0, 2256 + .formatted_node = 1 2257 + }; 2258 + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, amount_needed, 2259 + 0); 2260 + } 2261 + 2262 + static inline int reiserfs_new_unf_blocknrs(struct reiserfs_transaction_handle 2263 + *th, struct inode *inode, 2264 + b_blocknr_t * new_blocknrs, 2265 + struct treepath *path, 2266 + sector_t block) 2267 + { 2268 + reiserfs_blocknr_hint_t hint = { 2269 + .th = th, 2270 + .path = path, 2271 + .inode = inode, 2272 + .block = block, 2273 + .formatted_node = 0, 2274 + .preallocate = 0 2275 + }; 2276 + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); 2277 + } 2278 + 2279 + #ifdef REISERFS_PREALLOCATE 2280 + static inline int reiserfs_new_unf_blocknrs2(struct reiserfs_transaction_handle 2281 + *th, struct inode *inode, 2282 + b_blocknr_t * new_blocknrs, 2283 + struct treepath *path, 2284 + sector_t block) 2285 + { 2286 + reiserfs_blocknr_hint_t hint = { 2287 + .th = th, 2288 + .path = path, 2289 + .inode = inode, 2290 + .block = block, 2291 + .formatted_node = 0, 2292 + .preallocate = 1 2293 + }; 2294 + return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); 2295 + } 2296 + 2297 + void reiserfs_discard_prealloc(struct reiserfs_transaction_handle *th, 2298 + struct inode *inode); 2299 + void reiserfs_discard_all_prealloc(struct reiserfs_transaction_handle *th); 2300 + #endif 2301 + 2302 + /* hashes.c */ 2303 + __u32 keyed_hash(const signed char *msg, int len); 2304 + __u32 yura_hash(const signed char *msg, int len); 2305 + __u32 r5_hash(const signed char *msg, int len); 2306 + 2307 + #define reiserfs_set_le_bit __set_bit_le 2308 + #define reiserfs_test_and_set_le_bit __test_and_set_bit_le 2309 + #define reiserfs_clear_le_bit __clear_bit_le 2310 + #define reiserfs_test_and_clear_le_bit __test_and_clear_bit_le 2311 + #define reiserfs_test_le_bit test_bit_le 2312 + #define reiserfs_find_next_zero_le_bit find_next_zero_bit_le 2313 + 2314 + /* sometimes reiserfs_truncate may require to allocate few new blocks 2315 + to perform indirect2direct conversion. People probably used to 2316 + think, that truncate should work without problems on a filesystem 2317 + without free disk space. They may complain that they can not 2318 + truncate due to lack of free disk space. This spare space allows us 2319 + to not worry about it. 500 is probably too much, but it should be 2320 + absolutely safe */ 2321 + #define SPARE_SPACE 500 2322 + 2323 + /* prototypes from ioctl.c */ 2324 + long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); 2325 + long reiserfs_compat_ioctl(struct file *filp, 2326 + unsigned int cmd, unsigned long arg); 2327 + int reiserfs_unpack(struct inode *inode, struct file *filp);
+1 -1
fs/reiserfs/resize.c
··· 13 13 #include <linux/vmalloc.h> 14 14 #include <linux/string.h> 15 15 #include <linux/errno.h> 16 - #include <linux/reiserfs_fs.h> 16 + #include "reiserfs.h" 17 17 #include <linux/buffer_head.h> 18 18 19 19 int reiserfs_resize(struct super_block *s, unsigned long block_count_new)
+1 -1
fs/reiserfs/stree.c
··· 51 51 #include <linux/time.h> 52 52 #include <linux/string.h> 53 53 #include <linux/pagemap.h> 54 - #include <linux/reiserfs_fs.h> 54 + #include "reiserfs.h" 55 55 #include <linux/buffer_head.h> 56 56 #include <linux/quotaops.h> 57 57
+1 -1
fs/reiserfs/super.c
··· 16 16 #include <linux/vmalloc.h> 17 17 #include <linux/time.h> 18 18 #include <asm/uaccess.h> 19 - #include <linux/reiserfs_fs.h> 19 + #include "reiserfs.h" 20 20 #include "acl.h" 21 21 #include "xattr.h" 22 22 #include <linux/init.h>
+1 -1
fs/reiserfs/tail_conversion.c
··· 5 5 #include <linux/time.h> 6 6 #include <linux/pagemap.h> 7 7 #include <linux/buffer_head.h> 8 - #include <linux/reiserfs_fs.h> 8 + #include "reiserfs.h" 9 9 10 10 /* access to tail : when one is going to read tail it must make sure, that is not running. 11 11 direct2indirect and indirect2direct can not run concurrently */
+1 -1
fs/reiserfs/xattr.c
··· 33 33 * The xattrs themselves are protected by the xattr_sem. 34 34 */ 35 35 36 - #include <linux/reiserfs_fs.h> 36 + #include "reiserfs.h" 37 37 #include <linux/capability.h> 38 38 #include <linux/dcache.h> 39 39 #include <linux/namei.h>
-1
fs/reiserfs/xattr.h
··· 2 2 #include <linux/init.h> 3 3 #include <linux/list.h> 4 4 #include <linux/rwsem.h> 5 - #include <linux/reiserfs_fs.h> 6 5 7 6 struct inode; 8 7 struct dentry;
+1 -1
fs/reiserfs/xattr_acl.c
··· 1 1 #include <linux/capability.h> 2 2 #include <linux/fs.h> 3 3 #include <linux/posix_acl.h> 4 - #include <linux/reiserfs_fs.h> 4 + #include "reiserfs.h" 5 5 #include <linux/errno.h> 6 6 #include <linux/pagemap.h> 7 7 #include <linux/xattr.h>
+1 -1
fs/reiserfs/xattr_security.c
··· 1 - #include <linux/reiserfs_fs.h> 1 + #include "reiserfs.h" 2 2 #include <linux/errno.h> 3 3 #include <linux/fs.h> 4 4 #include <linux/pagemap.h>
+1 -1
fs/reiserfs/xattr_trusted.c
··· 1 - #include <linux/reiserfs_fs.h> 1 + #include "reiserfs.h" 2 2 #include <linux/capability.h> 3 3 #include <linux/errno.h> 4 4 #include <linux/fs.h>
+1 -1
fs/reiserfs/xattr_user.c
··· 1 - #include <linux/reiserfs_fs.h> 1 + #include "reiserfs.h" 2 2 #include <linux/errno.h> 3 3 #include <linux/fs.h> 4 4 #include <linux/pagemap.h>
-2334
include/linux/reiserfs_fs.h
··· 1 1 /* 2 2 * Copyright 1996, 1997, 1998 Hans Reiser, see reiserfs/README for licensing and copyright details 3 3 */ 4 - 5 - /* this file has an amazingly stupid 6 - name, yura please fix it to be 7 - reiserfs.h, and merge all the rest 8 - of our .h files that are in this 9 - directory into it. */ 10 - 11 4 #ifndef _LINUX_REISER_FS_H 12 5 #define _LINUX_REISER_FS_H 13 6 14 7 #include <linux/types.h> 15 8 #include <linux/magic.h> 16 - 17 - #ifdef __KERNEL__ 18 - #include <linux/slab.h> 19 - #include <linux/interrupt.h> 20 - #include <linux/sched.h> 21 - #include <linux/workqueue.h> 22 - #include <asm/unaligned.h> 23 - #include <linux/bitops.h> 24 - #include <linux/proc_fs.h> 25 - #include <linux/buffer_head.h> 26 - #include <linux/reiserfs_fs_i.h> 27 - #include <linux/reiserfs_fs_sb.h> 28 - #endif 29 9 30 10 /* 31 11 * include/linux/reiser_fs.h ··· 22 42 #define REISERFS_IOC_SETFLAGS FS_IOC_SETFLAGS 23 43 #define REISERFS_IOC_GETVERSION FS_IOC_GETVERSION 24 44 #define REISERFS_IOC_SETVERSION FS_IOC_SETVERSION 25 - 26 - #ifdef __KERNEL__ 27 - /* the 32 bit compat definitions with int argument */ 28 - #define REISERFS_IOC32_UNPACK _IOW(0xCD, 1, int) 29 - #define REISERFS_IOC32_GETFLAGS FS_IOC32_GETFLAGS 30 - #define REISERFS_IOC32_SETFLAGS FS_IOC32_SETFLAGS 31 - #define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION 32 - #define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION 33 - 34 - /* 35 - * Locking primitives. The write lock is a per superblock 36 - * special mutex that has properties close to the Big Kernel Lock 37 - * which was used in the previous locking scheme. 38 - */ 39 - void reiserfs_write_lock(struct super_block *s); 40 - void reiserfs_write_unlock(struct super_block *s); 41 - int reiserfs_write_lock_once(struct super_block *s); 42 - void reiserfs_write_unlock_once(struct super_block *s, int lock_depth); 43 - 44 - #ifdef CONFIG_REISERFS_CHECK 45 - void reiserfs_lock_check_recursive(struct super_block *s); 46 - #else 47 - static inline void reiserfs_lock_check_recursive(struct super_block *s) { } 48 - #endif 49 - 50 - /* 51 - * Several mutexes depend on the write lock. 52 - * However sometimes we want to relax the write lock while we hold 53 - * these mutexes, according to the release/reacquire on schedule() 54 - * properties of the Bkl that were used. 55 - * Reiserfs performances and locking were based on this scheme. 56 - * Now that the write lock is a mutex and not the bkl anymore, doing so 57 - * may result in a deadlock: 58 - * 59 - * A acquire write_lock 60 - * A acquire j_commit_mutex 61 - * A release write_lock and wait for something 62 - * B acquire write_lock 63 - * B can't acquire j_commit_mutex and sleep 64 - * A can't acquire write lock anymore 65 - * deadlock 66 - * 67 - * What we do here is avoiding such deadlock by playing the same game 68 - * than the Bkl: if we can't acquire a mutex that depends on the write lock, 69 - * we release the write lock, wait a bit and then retry. 70 - * 71 - * The mutexes concerned by this hack are: 72 - * - The commit mutex of a journal list 73 - * - The flush mutex 74 - * - The journal lock 75 - * - The inode mutex 76 - */ 77 - static inline void reiserfs_mutex_lock_safe(struct mutex *m, 78 - struct super_block *s) 79 - { 80 - reiserfs_lock_check_recursive(s); 81 - reiserfs_write_unlock(s); 82 - mutex_lock(m); 83 - reiserfs_write_lock(s); 84 - } 85 - 86 - static inline void 87 - reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass, 88 - struct super_block *s) 89 - { 90 - reiserfs_lock_check_recursive(s); 91 - reiserfs_write_unlock(s); 92 - mutex_lock_nested(m, subclass); 93 - reiserfs_write_lock(s); 94 - } 95 - 96 - static inline void 97 - reiserfs_down_read_safe(struct rw_semaphore *sem, struct super_block *s) 98 - { 99 - reiserfs_lock_check_recursive(s); 100 - reiserfs_write_unlock(s); 101 - down_read(sem); 102 - reiserfs_write_lock(s); 103 - } 104 - 105 - /* 106 - * When we schedule, we usually want to also release the write lock, 107 - * according to the previous bkl based locking scheme of reiserfs. 108 - */ 109 - static inline void reiserfs_cond_resched(struct super_block *s) 110 - { 111 - if (need_resched()) { 112 - reiserfs_write_unlock(s); 113 - schedule(); 114 - reiserfs_write_lock(s); 115 - } 116 - } 117 - 118 - struct fid; 119 - 120 - /* in reading the #defines, it may help to understand that they employ 121 - the following abbreviations: 122 - 123 - B = Buffer 124 - I = Item header 125 - H = Height within the tree (should be changed to LEV) 126 - N = Number of the item in the node 127 - STAT = stat data 128 - DEH = Directory Entry Header 129 - EC = Entry Count 130 - E = Entry number 131 - UL = Unsigned Long 132 - BLKH = BLocK Header 133 - UNFM = UNForMatted node 134 - DC = Disk Child 135 - P = Path 136 - 137 - These #defines are named by concatenating these abbreviations, 138 - where first comes the arguments, and last comes the return value, 139 - of the macro. 140 - 141 - */ 142 - 143 - #define USE_INODE_GENERATION_COUNTER 144 - 145 - #define REISERFS_PREALLOCATE 146 - #define DISPLACE_NEW_PACKING_LOCALITIES 147 - #define PREALLOCATION_SIZE 9 148 - 149 - /* n must be power of 2 */ 150 - #define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u)) 151 - 152 - // to be ok for alpha and others we have to align structures to 8 byte 153 - // boundary. 154 - // FIXME: do not change 4 by anything else: there is code which relies on that 155 - #define ROUND_UP(x) _ROUND_UP(x,8LL) 156 - 157 - /* debug levels. Right now, CONFIG_REISERFS_CHECK means print all debug 158 - ** messages. 159 - */ 160 - #define REISERFS_DEBUG_CODE 5 /* extra messages to help find/debug errors */ 161 - 162 - void __reiserfs_warning(struct super_block *s, const char *id, 163 - const char *func, const char *fmt, ...); 164 - #define reiserfs_warning(s, id, fmt, args...) \ 165 - __reiserfs_warning(s, id, __func__, fmt, ##args) 166 - /* assertions handling */ 167 - 168 - /** always check a condition and panic if it's false. */ 169 - #define __RASSERT(cond, scond, format, args...) \ 170 - do { \ 171 - if (!(cond)) \ 172 - reiserfs_panic(NULL, "assertion failure", "(" #cond ") at " \ 173 - __FILE__ ":%i:%s: " format "\n", \ 174 - in_interrupt() ? -1 : task_pid_nr(current), \ 175 - __LINE__, __func__ , ##args); \ 176 - } while (0) 177 - 178 - #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args) 179 - 180 - #if defined( CONFIG_REISERFS_CHECK ) 181 - #define RFALSE(cond, format, args...) __RASSERT(!(cond), "!(" #cond ")", format, ##args) 182 - #else 183 - #define RFALSE( cond, format, args... ) do {;} while( 0 ) 184 - #endif 185 - 186 - #define CONSTF __attribute_const__ 187 - /* 188 - * Disk Data Structures 189 - */ 190 - 191 - /***************************************************************************/ 192 - /* SUPER BLOCK */ 193 - /***************************************************************************/ 194 - 195 - /* 196 - * Structure of super block on disk, a version of which in RAM is often accessed as REISERFS_SB(s)->s_rs 197 - * the version in RAM is part of a larger structure containing fields never written to disk. 198 - */ 199 - #define UNSET_HASH 0 // read_super will guess about, what hash names 200 - // in directories were sorted with 201 - #define TEA_HASH 1 202 - #define YURA_HASH 2 203 - #define R5_HASH 3 204 - #define DEFAULT_HASH R5_HASH 205 - 206 - struct journal_params { 207 - __le32 jp_journal_1st_block; /* where does journal start from on its 208 - * device */ 209 - __le32 jp_journal_dev; /* journal device st_rdev */ 210 - __le32 jp_journal_size; /* size of the journal */ 211 - __le32 jp_journal_trans_max; /* max number of blocks in a transaction. */ 212 - __le32 jp_journal_magic; /* random value made on fs creation (this 213 - * was sb_journal_block_count) */ 214 - __le32 jp_journal_max_batch; /* max number of blocks to batch into a 215 - * trans */ 216 - __le32 jp_journal_max_commit_age; /* in seconds, how old can an async 217 - * commit be */ 218 - __le32 jp_journal_max_trans_age; /* in seconds, how old can a transaction 219 - * be */ 220 - }; 221 - 222 - /* this is the super from 3.5.X, where X >= 10 */ 223 - struct reiserfs_super_block_v1 { 224 - __le32 s_block_count; /* blocks count */ 225 - __le32 s_free_blocks; /* free blocks count */ 226 - __le32 s_root_block; /* root block number */ 227 - struct journal_params s_journal; 228 - __le16 s_blocksize; /* block size */ 229 - __le16 s_oid_maxsize; /* max size of object id array, see 230 - * get_objectid() commentary */ 231 - __le16 s_oid_cursize; /* current size of object id array */ 232 - __le16 s_umount_state; /* this is set to 1 when filesystem was 233 - * umounted, to 2 - when not */ 234 - char s_magic[10]; /* reiserfs magic string indicates that 235 - * file system is reiserfs: 236 - * "ReIsErFs" or "ReIsEr2Fs" or "ReIsEr3Fs" */ 237 - __le16 s_fs_state; /* it is set to used by fsck to mark which 238 - * phase of rebuilding is done */ 239 - __le32 s_hash_function_code; /* indicate, what hash function is being use 240 - * to sort names in a directory*/ 241 - __le16 s_tree_height; /* height of disk tree */ 242 - __le16 s_bmap_nr; /* amount of bitmap blocks needed to address 243 - * each block of file system */ 244 - __le16 s_version; /* this field is only reliable on filesystem 245 - * with non-standard journal */ 246 - __le16 s_reserved_for_journal; /* size in blocks of journal area on main 247 - * device, we need to keep after 248 - * making fs with non-standard journal */ 249 - } __attribute__ ((__packed__)); 250 - 251 - #define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1)) 252 - 253 - /* this is the on disk super block */ 254 - struct reiserfs_super_block { 255 - struct reiserfs_super_block_v1 s_v1; 256 - __le32 s_inode_generation; 257 - __le32 s_flags; /* Right now used only by inode-attributes, if enabled */ 258 - unsigned char s_uuid[16]; /* filesystem unique identifier */ 259 - unsigned char s_label[16]; /* filesystem volume label */ 260 - __le16 s_mnt_count; /* Count of mounts since last fsck */ 261 - __le16 s_max_mnt_count; /* Maximum mounts before check */ 262 - __le32 s_lastcheck; /* Timestamp of last fsck */ 263 - __le32 s_check_interval; /* Interval between checks */ 264 - char s_unused[76]; /* zero filled by mkreiserfs and 265 - * reiserfs_convert_objectid_map_v1() 266 - * so any additions must be updated 267 - * there as well. */ 268 - } __attribute__ ((__packed__)); 269 - 270 - #define SB_SIZE (sizeof(struct reiserfs_super_block)) 271 - 272 - #define REISERFS_VERSION_1 0 273 - #define REISERFS_VERSION_2 2 274 - 275 - // on-disk super block fields converted to cpu form 276 - #define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs) 277 - #define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1)) 278 - #define SB_BLOCKSIZE(s) \ 279 - le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize)) 280 - #define SB_BLOCK_COUNT(s) \ 281 - le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count)) 282 - #define SB_FREE_BLOCKS(s) \ 283 - le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks)) 284 - #define SB_REISERFS_MAGIC(s) \ 285 - (SB_V1_DISK_SUPER_BLOCK(s)->s_magic) 286 - #define SB_ROOT_BLOCK(s) \ 287 - le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block)) 288 - #define SB_TREE_HEIGHT(s) \ 289 - le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height)) 290 - #define SB_REISERFS_STATE(s) \ 291 - le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state)) 292 - #define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version)) 293 - #define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr)) 294 - 295 - #define PUT_SB_BLOCK_COUNT(s, val) \ 296 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0) 297 - #define PUT_SB_FREE_BLOCKS(s, val) \ 298 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0) 299 - #define PUT_SB_ROOT_BLOCK(s, val) \ 300 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0) 301 - #define PUT_SB_TREE_HEIGHT(s, val) \ 302 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0) 303 - #define PUT_SB_REISERFS_STATE(s, val) \ 304 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0) 305 - #define PUT_SB_VERSION(s, val) \ 306 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0) 307 - #define PUT_SB_BMAP_NR(s, val) \ 308 - do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0) 309 - 310 - #define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal) 311 - #define SB_ONDISK_JOURNAL_SIZE(s) \ 312 - le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size)) 313 - #define SB_ONDISK_JOURNAL_1st_BLOCK(s) \ 314 - le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block)) 315 - #define SB_ONDISK_JOURNAL_DEVICE(s) \ 316 - le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev)) 317 - #define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \ 318 - le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal)) 319 - 320 - #define is_block_in_log_or_reserved_area(s, block) \ 321 - block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \ 322 - && block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \ 323 - ((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \ 324 - SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s))) 325 - 326 - int is_reiserfs_3_5(struct reiserfs_super_block *rs); 327 - int is_reiserfs_3_6(struct reiserfs_super_block *rs); 328 - int is_reiserfs_jr(struct reiserfs_super_block *rs); 329 - 330 - /* ReiserFS leaves the first 64k unused, so that partition labels have 331 - enough space. If someone wants to write a fancy bootloader that 332 - needs more than 64k, let us know, and this will be increased in size. 333 - This number must be larger than than the largest block size on any 334 - platform, or code will break. -Hans */ 335 - #define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024) 336 - #define REISERFS_FIRST_BLOCK unused_define 337 - #define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES 338 - 339 - /* the spot for the super in versions 3.5 - 3.5.10 (inclusive) */ 340 - #define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024) 341 - 342 - /* reiserfs internal error code (used by search_by_key and fix_nodes)) */ 343 - #define CARRY_ON 0 344 - #define REPEAT_SEARCH -1 345 - #define IO_ERROR -2 346 - #define NO_DISK_SPACE -3 347 - #define NO_BALANCING_NEEDED (-4) 348 - #define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5) 349 - #define QUOTA_EXCEEDED -6 350 - 351 - typedef __u32 b_blocknr_t; 352 - typedef __le32 unp_t; 353 - 354 - struct unfm_nodeinfo { 355 - unp_t unfm_nodenum; 356 - unsigned short unfm_freespace; 357 - }; 358 - 359 - /* there are two formats of keys: 3.5 and 3.6 360 - */ 361 - #define KEY_FORMAT_3_5 0 362 - #define KEY_FORMAT_3_6 1 363 - 364 - /* there are two stat datas */ 365 - #define STAT_DATA_V1 0 366 - #define STAT_DATA_V2 1 367 - 368 - static inline struct reiserfs_inode_info *REISERFS_I(const struct inode *inode) 369 - { 370 - return container_of(inode, struct reiserfs_inode_info, vfs_inode); 371 - } 372 - 373 - static inline struct reiserfs_sb_info *REISERFS_SB(const struct super_block *sb) 374 - { 375 - return sb->s_fs_info; 376 - } 377 - 378 - /* Don't trust REISERFS_SB(sb)->s_bmap_nr, it's a u16 379 - * which overflows on large file systems. */ 380 - static inline __u32 reiserfs_bmap_count(struct super_block *sb) 381 - { 382 - return (SB_BLOCK_COUNT(sb) - 1) / (sb->s_blocksize * 8) + 1; 383 - } 384 - 385 - static inline int bmap_would_wrap(unsigned bmap_nr) 386 - { 387 - return bmap_nr > ((1LL << 16) - 1); 388 - } 389 - 390 - /** this says about version of key of all items (but stat data) the 391 - object consists of */ 392 - #define get_inode_item_key_version( inode ) \ 393 - ((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5) 394 - 395 - #define set_inode_item_key_version( inode, version ) \ 396 - ({ if((version)==KEY_FORMAT_3_6) \ 397 - REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \ 398 - else \ 399 - REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; }) 400 - 401 - #define get_inode_sd_version(inode) \ 402 - ((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1) 403 - 404 - #define set_inode_sd_version(inode, version) \ 405 - ({ if((version)==STAT_DATA_V2) \ 406 - REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \ 407 - else \ 408 - REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; }) 409 - 410 - /* This is an aggressive tail suppression policy, I am hoping it 411 - improves our benchmarks. The principle behind it is that percentage 412 - space saving is what matters, not absolute space saving. This is 413 - non-intuitive, but it helps to understand it if you consider that the 414 - cost to access 4 blocks is not much more than the cost to access 1 415 - block, if you have to do a seek and rotate. A tail risks a 416 - non-linear disk access that is significant as a percentage of total 417 - time cost for a 4 block file and saves an amount of space that is 418 - less significant as a percentage of space, or so goes the hypothesis. 419 - -Hans */ 420 - #define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \ 421 - (\ 422 - (!(n_tail_size)) || \ 423 - (((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \ 424 - ( (n_file_size) >= (n_block_size) * 4 ) || \ 425 - ( ( (n_file_size) >= (n_block_size) * 3 ) && \ 426 - ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \ 427 - ( ( (n_file_size) >= (n_block_size) * 2 ) && \ 428 - ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \ 429 - ( ( (n_file_size) >= (n_block_size) ) && \ 430 - ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \ 431 - ) 432 - 433 - /* Another strategy for tails, this one means only create a tail if all the 434 - file would fit into one DIRECT item. 435 - Primary intention for this one is to increase performance by decreasing 436 - seeking. 437 - */ 438 - #define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \ 439 - (\ 440 - (!(n_tail_size)) || \ 441 - (((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \ 442 - ) 443 - 444 - /* 445 - * values for s_umount_state field 446 - */ 447 - #define REISERFS_VALID_FS 1 448 - #define REISERFS_ERROR_FS 2 449 - 450 - // 451 - // there are 5 item types currently 452 - // 453 - #define TYPE_STAT_DATA 0 454 - #define TYPE_INDIRECT 1 455 - #define TYPE_DIRECT 2 456 - #define TYPE_DIRENTRY 3 457 - #define TYPE_MAXTYPE 3 458 - #define TYPE_ANY 15 // FIXME: comment is required 459 - 460 - /***************************************************************************/ 461 - /* KEY & ITEM HEAD */ 462 - /***************************************************************************/ 463 - 464 - // 465 - // directories use this key as well as old files 466 - // 467 - struct offset_v1 { 468 - __le32 k_offset; 469 - __le32 k_uniqueness; 470 - } __attribute__ ((__packed__)); 471 - 472 - struct offset_v2 { 473 - __le64 v; 474 - } __attribute__ ((__packed__)); 475 - 476 - static inline __u16 offset_v2_k_type(const struct offset_v2 *v2) 477 - { 478 - __u8 type = le64_to_cpu(v2->v) >> 60; 479 - return (type <= TYPE_MAXTYPE) ? type : TYPE_ANY; 480 - } 481 - 482 - static inline void set_offset_v2_k_type(struct offset_v2 *v2, int type) 483 - { 484 - v2->v = 485 - (v2->v & cpu_to_le64(~0ULL >> 4)) | cpu_to_le64((__u64) type << 60); 486 - } 487 - 488 - static inline loff_t offset_v2_k_offset(const struct offset_v2 *v2) 489 - { 490 - return le64_to_cpu(v2->v) & (~0ULL >> 4); 491 - } 492 - 493 - static inline void set_offset_v2_k_offset(struct offset_v2 *v2, loff_t offset) 494 - { 495 - offset &= (~0ULL >> 4); 496 - v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset); 497 - } 498 - 499 - /* Key of an item determines its location in the S+tree, and 500 - is composed of 4 components */ 501 - struct reiserfs_key { 502 - __le32 k_dir_id; /* packing locality: by default parent 503 - directory object id */ 504 - __le32 k_objectid; /* object identifier */ 505 - union { 506 - struct offset_v1 k_offset_v1; 507 - struct offset_v2 k_offset_v2; 508 - } __attribute__ ((__packed__)) u; 509 - } __attribute__ ((__packed__)); 510 - 511 - struct in_core_key { 512 - __u32 k_dir_id; /* packing locality: by default parent 513 - directory object id */ 514 - __u32 k_objectid; /* object identifier */ 515 - __u64 k_offset; 516 - __u8 k_type; 517 - }; 518 - 519 - struct cpu_key { 520 - struct in_core_key on_disk_key; 521 - int version; 522 - int key_length; /* 3 in all cases but direct2indirect and 523 - indirect2direct conversion */ 524 - }; 525 - 526 - /* Our function for comparing keys can compare keys of different 527 - lengths. It takes as a parameter the length of the keys it is to 528 - compare. These defines are used in determining what is to be passed 529 - to it as that parameter. */ 530 - #define REISERFS_FULL_KEY_LEN 4 531 - #define REISERFS_SHORT_KEY_LEN 2 532 - 533 - /* The result of the key compare */ 534 - #define FIRST_GREATER 1 535 - #define SECOND_GREATER -1 536 - #define KEYS_IDENTICAL 0 537 - #define KEY_FOUND 1 538 - #define KEY_NOT_FOUND 0 539 - 540 - #define KEY_SIZE (sizeof(struct reiserfs_key)) 541 - #define SHORT_KEY_SIZE (sizeof (__u32) + sizeof (__u32)) 542 - 543 - /* return values for search_by_key and clones */ 544 - #define ITEM_FOUND 1 545 - #define ITEM_NOT_FOUND 0 546 - #define ENTRY_FOUND 1 547 - #define ENTRY_NOT_FOUND 0 548 - #define DIRECTORY_NOT_FOUND -1 549 - #define REGULAR_FILE_FOUND -2 550 - #define DIRECTORY_FOUND -3 551 - #define BYTE_FOUND 1 552 - #define BYTE_NOT_FOUND 0 553 - #define FILE_NOT_FOUND -1 554 - 555 - #define POSITION_FOUND 1 556 - #define POSITION_NOT_FOUND 0 557 - 558 - // return values for reiserfs_find_entry and search_by_entry_key 559 - #define NAME_FOUND 1 560 - #define NAME_NOT_FOUND 0 561 - #define GOTO_PREVIOUS_ITEM 2 562 - #define NAME_FOUND_INVISIBLE 3 563 - 564 - /* Everything in the filesystem is stored as a set of items. The 565 - item head contains the key of the item, its free space (for 566 - indirect items) and specifies the location of the item itself 567 - within the block. */ 568 - 569 - struct item_head { 570 - /* Everything in the tree is found by searching for it based on 571 - * its key.*/ 572 - struct reiserfs_key ih_key; 573 - union { 574 - /* The free space in the last unformatted node of an 575 - indirect item if this is an indirect item. This 576 - equals 0xFFFF iff this is a direct item or stat data 577 - item. Note that the key, not this field, is used to 578 - determine the item type, and thus which field this 579 - union contains. */ 580 - __le16 ih_free_space_reserved; 581 - /* Iff this is a directory item, this field equals the 582 - number of directory entries in the directory item. */ 583 - __le16 ih_entry_count; 584 - } __attribute__ ((__packed__)) u; 585 - __le16 ih_item_len; /* total size of the item body */ 586 - __le16 ih_item_location; /* an offset to the item body 587 - * within the block */ 588 - __le16 ih_version; /* 0 for all old items, 2 for new 589 - ones. Highest bit is set by fsck 590 - temporary, cleaned after all 591 - done */ 592 - } __attribute__ ((__packed__)); 593 - /* size of item header */ 594 - #define IH_SIZE (sizeof(struct item_head)) 595 - 596 - #define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved) 597 - #define ih_version(ih) le16_to_cpu((ih)->ih_version) 598 - #define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count) 599 - #define ih_location(ih) le16_to_cpu((ih)->ih_item_location) 600 - #define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len) 601 - 602 - #define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0) 603 - #define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0) 604 - #define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0) 605 - #define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0) 606 - #define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0) 607 - 608 - #define unreachable_item(ih) (ih_version(ih) & (1 << 15)) 609 - 610 - #define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih)) 611 - #define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val))) 612 - 613 - /* these operate on indirect items, where you've got an array of ints 614 - ** at a possibly unaligned location. These are a noop on ia32 615 - ** 616 - ** p is the array of __u32, i is the index into the array, v is the value 617 - ** to store there. 618 - */ 619 - #define get_block_num(p, i) get_unaligned_le32((p) + (i)) 620 - #define put_block_num(p, i, v) put_unaligned_le32((v), (p) + (i)) 621 - 622 - // 623 - // in old version uniqueness field shows key type 624 - // 625 - #define V1_SD_UNIQUENESS 0 626 - #define V1_INDIRECT_UNIQUENESS 0xfffffffe 627 - #define V1_DIRECT_UNIQUENESS 0xffffffff 628 - #define V1_DIRENTRY_UNIQUENESS 500 629 - #define V1_ANY_UNIQUENESS 555 // FIXME: comment is required 630 - 631 - // 632 - // here are conversion routines 633 - // 634 - static inline int uniqueness2type(__u32 uniqueness) CONSTF; 635 - static inline int uniqueness2type(__u32 uniqueness) 636 - { 637 - switch ((int)uniqueness) { 638 - case V1_SD_UNIQUENESS: 639 - return TYPE_STAT_DATA; 640 - case V1_INDIRECT_UNIQUENESS: 641 - return TYPE_INDIRECT; 642 - case V1_DIRECT_UNIQUENESS: 643 - return TYPE_DIRECT; 644 - case V1_DIRENTRY_UNIQUENESS: 645 - return TYPE_DIRENTRY; 646 - case V1_ANY_UNIQUENESS: 647 - default: 648 - return TYPE_ANY; 649 - } 650 - } 651 - 652 - static inline __u32 type2uniqueness(int type) CONSTF; 653 - static inline __u32 type2uniqueness(int type) 654 - { 655 - switch (type) { 656 - case TYPE_STAT_DATA: 657 - return V1_SD_UNIQUENESS; 658 - case TYPE_INDIRECT: 659 - return V1_INDIRECT_UNIQUENESS; 660 - case TYPE_DIRECT: 661 - return V1_DIRECT_UNIQUENESS; 662 - case TYPE_DIRENTRY: 663 - return V1_DIRENTRY_UNIQUENESS; 664 - case TYPE_ANY: 665 - default: 666 - return V1_ANY_UNIQUENESS; 667 - } 668 - } 669 - 670 - // 671 - // key is pointer to on disk key which is stored in le, result is cpu, 672 - // there is no way to get version of object from key, so, provide 673 - // version to these defines 674 - // 675 - static inline loff_t le_key_k_offset(int version, 676 - const struct reiserfs_key *key) 677 - { 678 - return (version == KEY_FORMAT_3_5) ? 679 - le32_to_cpu(key->u.k_offset_v1.k_offset) : 680 - offset_v2_k_offset(&(key->u.k_offset_v2)); 681 - } 682 - 683 - static inline loff_t le_ih_k_offset(const struct item_head *ih) 684 - { 685 - return le_key_k_offset(ih_version(ih), &(ih->ih_key)); 686 - } 687 - 688 - static inline loff_t le_key_k_type(int version, const struct reiserfs_key *key) 689 - { 690 - return (version == KEY_FORMAT_3_5) ? 691 - uniqueness2type(le32_to_cpu(key->u.k_offset_v1.k_uniqueness)) : 692 - offset_v2_k_type(&(key->u.k_offset_v2)); 693 - } 694 - 695 - static inline loff_t le_ih_k_type(const struct item_head *ih) 696 - { 697 - return le_key_k_type(ih_version(ih), &(ih->ih_key)); 698 - } 699 - 700 - static inline void set_le_key_k_offset(int version, struct reiserfs_key *key, 701 - loff_t offset) 702 - { 703 - (version == KEY_FORMAT_3_5) ? (void)(key->u.k_offset_v1.k_offset = cpu_to_le32(offset)) : /* jdm check */ 704 - (void)(set_offset_v2_k_offset(&(key->u.k_offset_v2), offset)); 705 - } 706 - 707 - static inline void set_le_ih_k_offset(struct item_head *ih, loff_t offset) 708 - { 709 - set_le_key_k_offset(ih_version(ih), &(ih->ih_key), offset); 710 - } 711 - 712 - static inline void set_le_key_k_type(int version, struct reiserfs_key *key, 713 - int type) 714 - { 715 - (version == KEY_FORMAT_3_5) ? 716 - (void)(key->u.k_offset_v1.k_uniqueness = 717 - cpu_to_le32(type2uniqueness(type))) 718 - : (void)(set_offset_v2_k_type(&(key->u.k_offset_v2), type)); 719 - } 720 - 721 - static inline void set_le_ih_k_type(struct item_head *ih, int type) 722 - { 723 - set_le_key_k_type(ih_version(ih), &(ih->ih_key), type); 724 - } 725 - 726 - static inline int is_direntry_le_key(int version, struct reiserfs_key *key) 727 - { 728 - return le_key_k_type(version, key) == TYPE_DIRENTRY; 729 - } 730 - 731 - static inline int is_direct_le_key(int version, struct reiserfs_key *key) 732 - { 733 - return le_key_k_type(version, key) == TYPE_DIRECT; 734 - } 735 - 736 - static inline int is_indirect_le_key(int version, struct reiserfs_key *key) 737 - { 738 - return le_key_k_type(version, key) == TYPE_INDIRECT; 739 - } 740 - 741 - static inline int is_statdata_le_key(int version, struct reiserfs_key *key) 742 - { 743 - return le_key_k_type(version, key) == TYPE_STAT_DATA; 744 - } 745 - 746 - // 747 - // item header has version. 748 - // 749 - static inline int is_direntry_le_ih(struct item_head *ih) 750 - { 751 - return is_direntry_le_key(ih_version(ih), &ih->ih_key); 752 - } 753 - 754 - static inline int is_direct_le_ih(struct item_head *ih) 755 - { 756 - return is_direct_le_key(ih_version(ih), &ih->ih_key); 757 - } 758 - 759 - static inline int is_indirect_le_ih(struct item_head *ih) 760 - { 761 - return is_indirect_le_key(ih_version(ih), &ih->ih_key); 762 - } 763 - 764 - static inline int is_statdata_le_ih(struct item_head *ih) 765 - { 766 - return is_statdata_le_key(ih_version(ih), &ih->ih_key); 767 - } 768 - 769 - // 770 - // key is pointer to cpu key, result is cpu 771 - // 772 - static inline loff_t cpu_key_k_offset(const struct cpu_key *key) 773 - { 774 - return key->on_disk_key.k_offset; 775 - } 776 - 777 - static inline loff_t cpu_key_k_type(const struct cpu_key *key) 778 - { 779 - return key->on_disk_key.k_type; 780 - } 781 - 782 - static inline void set_cpu_key_k_offset(struct cpu_key *key, loff_t offset) 783 - { 784 - key->on_disk_key.k_offset = offset; 785 - } 786 - 787 - static inline void set_cpu_key_k_type(struct cpu_key *key, int type) 788 - { 789 - key->on_disk_key.k_type = type; 790 - } 791 - 792 - static inline void cpu_key_k_offset_dec(struct cpu_key *key) 793 - { 794 - key->on_disk_key.k_offset--; 795 - } 796 - 797 - #define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY) 798 - #define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT) 799 - #define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT) 800 - #define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA) 801 - 802 - /* are these used ? */ 803 - #define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key))) 804 - #define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key))) 805 - #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key))) 806 - #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key))) 807 - 808 - #define I_K_KEY_IN_ITEM(ih, key, n_blocksize) \ 809 - (!COMP_SHORT_KEYS(ih, key) && \ 810 - I_OFF_BYTE_IN_ITEM(ih, k_offset(key), n_blocksize)) 811 - 812 - /* maximal length of item */ 813 - #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE) 814 - #define MIN_ITEM_LEN 1 815 - 816 - /* object identifier for root dir */ 817 - #define REISERFS_ROOT_OBJECTID 2 818 - #define REISERFS_ROOT_PARENT_OBJECTID 1 819 - 820 - extern struct reiserfs_key root_key; 821 - 822 - /* 823 - * Picture represents a leaf of the S+tree 824 - * ______________________________________________________ 825 - * | | Array of | | | 826 - * |Block | Object-Item | F r e e | Objects- | 827 - * | head | Headers | S p a c e | Items | 828 - * |______|_______________|___________________|___________| 829 - */ 830 - 831 - /* Header of a disk block. More precisely, header of a formatted leaf 832 - or internal node, and not the header of an unformatted node. */ 833 - struct block_head { 834 - __le16 blk_level; /* Level of a block in the tree. */ 835 - __le16 blk_nr_item; /* Number of keys/items in a block. */ 836 - __le16 blk_free_space; /* Block free space in bytes. */ 837 - __le16 blk_reserved; 838 - /* dump this in v4/planA */ 839 - struct reiserfs_key blk_right_delim_key; /* kept only for compatibility */ 840 - }; 841 - 842 - #define BLKH_SIZE (sizeof(struct block_head)) 843 - #define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level)) 844 - #define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item)) 845 - #define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space)) 846 - #define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved)) 847 - #define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val)) 848 - #define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val)) 849 - #define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val)) 850 - #define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val)) 851 - #define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key) 852 - #define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val) 853 - 854 - /* 855 - * values for blk_level field of the struct block_head 856 - */ 857 - 858 - #define FREE_LEVEL 0 /* when node gets removed from the tree its 859 - blk_level is set to FREE_LEVEL. It is then 860 - used to see whether the node is still in the 861 - tree */ 862 - 863 - #define DISK_LEAF_NODE_LEVEL 1 /* Leaf node level. */ 864 - 865 - /* Given the buffer head of a formatted node, resolve to the block head of that node. */ 866 - #define B_BLK_HEAD(bh) ((struct block_head *)((bh)->b_data)) 867 - /* Number of items that are in buffer. */ 868 - #define B_NR_ITEMS(bh) (blkh_nr_item(B_BLK_HEAD(bh))) 869 - #define B_LEVEL(bh) (blkh_level(B_BLK_HEAD(bh))) 870 - #define B_FREE_SPACE(bh) (blkh_free_space(B_BLK_HEAD(bh))) 871 - 872 - #define PUT_B_NR_ITEMS(bh, val) do { set_blkh_nr_item(B_BLK_HEAD(bh), val); } while (0) 873 - #define PUT_B_LEVEL(bh, val) do { set_blkh_level(B_BLK_HEAD(bh), val); } while (0) 874 - #define PUT_B_FREE_SPACE(bh, val) do { set_blkh_free_space(B_BLK_HEAD(bh), val); } while (0) 875 - 876 - /* Get right delimiting key. -- little endian */ 877 - #define B_PRIGHT_DELIM_KEY(bh) (&(blk_right_delim_key(B_BLK_HEAD(bh)))) 878 - 879 - /* Does the buffer contain a disk leaf. */ 880 - #define B_IS_ITEMS_LEVEL(bh) (B_LEVEL(bh) == DISK_LEAF_NODE_LEVEL) 881 - 882 - /* Does the buffer contain a disk internal node */ 883 - #define B_IS_KEYS_LEVEL(bh) (B_LEVEL(bh) > DISK_LEAF_NODE_LEVEL \ 884 - && B_LEVEL(bh) <= MAX_HEIGHT) 885 - 886 - /***************************************************************************/ 887 - /* STAT DATA */ 888 - /***************************************************************************/ 889 - 890 - // 891 - // old stat data is 32 bytes long. We are going to distinguish new one by 892 - // different size 893 - // 894 - struct stat_data_v1 { 895 - __le16 sd_mode; /* file type, permissions */ 896 - __le16 sd_nlink; /* number of hard links */ 897 - __le16 sd_uid; /* owner */ 898 - __le16 sd_gid; /* group */ 899 - __le32 sd_size; /* file size */ 900 - __le32 sd_atime; /* time of last access */ 901 - __le32 sd_mtime; /* time file was last modified */ 902 - __le32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ 903 - union { 904 - __le32 sd_rdev; 905 - __le32 sd_blocks; /* number of blocks file uses */ 906 - } __attribute__ ((__packed__)) u; 907 - __le32 sd_first_direct_byte; /* first byte of file which is stored 908 - in a direct item: except that if it 909 - equals 1 it is a symlink and if it 910 - equals ~(__u32)0 there is no 911 - direct item. The existence of this 912 - field really grates on me. Let's 913 - replace it with a macro based on 914 - sd_size and our tail suppression 915 - policy. Someday. -Hans */ 916 - } __attribute__ ((__packed__)); 917 - 918 - #define SD_V1_SIZE (sizeof(struct stat_data_v1)) 919 - #define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5) 920 - #define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) 921 - #define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) 922 - #define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink)) 923 - #define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v)) 924 - #define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid)) 925 - #define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v)) 926 - #define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid)) 927 - #define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v)) 928 - #define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size)) 929 - #define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v)) 930 - #define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) 931 - #define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) 932 - #define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) 933 - #define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) 934 - #define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) 935 - #define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) 936 - #define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) 937 - #define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) 938 - #define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks)) 939 - #define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v)) 940 - #define sd_v1_first_direct_byte(sdp) \ 941 - (le32_to_cpu((sdp)->sd_first_direct_byte)) 942 - #define set_sd_v1_first_direct_byte(sdp,v) \ 943 - ((sdp)->sd_first_direct_byte = cpu_to_le32(v)) 944 - 945 - /* inode flags stored in sd_attrs (nee sd_reserved) */ 946 - 947 - /* we want common flags to have the same values as in ext2, 948 - so chattr(1) will work without problems */ 949 - #define REISERFS_IMMUTABLE_FL FS_IMMUTABLE_FL 950 - #define REISERFS_APPEND_FL FS_APPEND_FL 951 - #define REISERFS_SYNC_FL FS_SYNC_FL 952 - #define REISERFS_NOATIME_FL FS_NOATIME_FL 953 - #define REISERFS_NODUMP_FL FS_NODUMP_FL 954 - #define REISERFS_SECRM_FL FS_SECRM_FL 955 - #define REISERFS_UNRM_FL FS_UNRM_FL 956 - #define REISERFS_COMPR_FL FS_COMPR_FL 957 - #define REISERFS_NOTAIL_FL FS_NOTAIL_FL 958 - 959 - /* persistent flags that file inherits from the parent directory */ 960 - #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \ 961 - REISERFS_SYNC_FL | \ 962 - REISERFS_NOATIME_FL | \ 963 - REISERFS_NODUMP_FL | \ 964 - REISERFS_SECRM_FL | \ 965 - REISERFS_COMPR_FL | \ 966 - REISERFS_NOTAIL_FL ) 967 - 968 - /* Stat Data on disk (reiserfs version of UFS disk inode minus the 969 - address blocks) */ 970 - struct stat_data { 971 - __le16 sd_mode; /* file type, permissions */ 972 - __le16 sd_attrs; /* persistent inode flags */ 973 - __le32 sd_nlink; /* number of hard links */ 974 - __le64 sd_size; /* file size */ 975 - __le32 sd_uid; /* owner */ 976 - __le32 sd_gid; /* group */ 977 - __le32 sd_atime; /* time of last access */ 978 - __le32 sd_mtime; /* time file was last modified */ 979 - __le32 sd_ctime; /* time inode (stat data) was last changed (except changes to sd_atime and sd_mtime) */ 980 - __le32 sd_blocks; 981 - union { 982 - __le32 sd_rdev; 983 - __le32 sd_generation; 984 - //__le32 sd_first_direct_byte; 985 - /* first byte of file which is stored in a 986 - direct item: except that if it equals 1 987 - it is a symlink and if it equals 988 - ~(__u32)0 there is no direct item. The 989 - existence of this field really grates 990 - on me. Let's replace it with a macro 991 - based on sd_size and our tail 992 - suppression policy? */ 993 - } __attribute__ ((__packed__)) u; 994 - } __attribute__ ((__packed__)); 995 - // 996 - // this is 44 bytes long 997 - // 998 - #define SD_SIZE (sizeof(struct stat_data)) 999 - #define SD_V2_SIZE SD_SIZE 1000 - #define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6) 1001 - #define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode)) 1002 - #define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v)) 1003 - /* sd_reserved */ 1004 - /* set_sd_reserved */ 1005 - #define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink)) 1006 - #define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v)) 1007 - #define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size)) 1008 - #define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v)) 1009 - #define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid)) 1010 - #define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v)) 1011 - #define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid)) 1012 - #define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v)) 1013 - #define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime)) 1014 - #define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v)) 1015 - #define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime)) 1016 - #define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v)) 1017 - #define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime)) 1018 - #define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v)) 1019 - #define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks)) 1020 - #define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v)) 1021 - #define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev)) 1022 - #define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v)) 1023 - #define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation)) 1024 - #define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v)) 1025 - #define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs)) 1026 - #define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v)) 1027 - 1028 - /***************************************************************************/ 1029 - /* DIRECTORY STRUCTURE */ 1030 - /***************************************************************************/ 1031 - /* 1032 - Picture represents the structure of directory items 1033 - ________________________________________________ 1034 - | Array of | | | | | | 1035 - | directory |N-1| N-2 | .... | 1st |0th| 1036 - | entry headers | | | | | | 1037 - |_______________|___|_____|________|_______|___| 1038 - <---- directory entries ------> 1039 - 1040 - First directory item has k_offset component 1. We store "." and ".." 1041 - in one item, always, we never split "." and ".." into differing 1042 - items. This makes, among other things, the code for removing 1043 - directories simpler. */ 1044 - #define SD_OFFSET 0 1045 - #define SD_UNIQUENESS 0 1046 - #define DOT_OFFSET 1 1047 - #define DOT_DOT_OFFSET 2 1048 - #define DIRENTRY_UNIQUENESS 500 1049 - 1050 - /* */ 1051 - #define FIRST_ITEM_OFFSET 1 1052 - 1053 - /* 1054 - Q: How to get key of object pointed to by entry from entry? 1055 - 1056 - A: Each directory entry has its header. This header has deh_dir_id and deh_objectid fields, those are key 1057 - of object, entry points to */ 1058 - 1059 - /* NOT IMPLEMENTED: 1060 - Directory will someday contain stat data of object */ 1061 - 1062 - struct reiserfs_de_head { 1063 - __le32 deh_offset; /* third component of the directory entry key */ 1064 - __le32 deh_dir_id; /* objectid of the parent directory of the object, that is referenced 1065 - by directory entry */ 1066 - __le32 deh_objectid; /* objectid of the object, that is referenced by directory entry */ 1067 - __le16 deh_location; /* offset of name in the whole item */ 1068 - __le16 deh_state; /* whether 1) entry contains stat data (for future), and 2) whether 1069 - entry is hidden (unlinked) */ 1070 - } __attribute__ ((__packed__)); 1071 - #define DEH_SIZE sizeof(struct reiserfs_de_head) 1072 - #define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset)) 1073 - #define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id)) 1074 - #define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid)) 1075 - #define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location)) 1076 - #define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state)) 1077 - 1078 - #define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v))) 1079 - #define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v))) 1080 - #define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v))) 1081 - #define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v))) 1082 - #define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v))) 1083 - 1084 - /* empty directory contains two entries "." and ".." and their headers */ 1085 - #define EMPTY_DIR_SIZE \ 1086 - (DEH_SIZE * 2 + ROUND_UP (strlen (".")) + ROUND_UP (strlen (".."))) 1087 - 1088 - /* old format directories have this size when empty */ 1089 - #define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3) 1090 - 1091 - #define DEH_Statdata 0 /* not used now */ 1092 - #define DEH_Visible 2 1093 - 1094 - /* 64 bit systems (and the S/390) need to be aligned explicitly -jdm */ 1095 - #if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__) 1096 - # define ADDR_UNALIGNED_BITS (3) 1097 - #endif 1098 - 1099 - /* These are only used to manipulate deh_state. 1100 - * Because of this, we'll use the ext2_ bit routines, 1101 - * since they are little endian */ 1102 - #ifdef ADDR_UNALIGNED_BITS 1103 - 1104 - # define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1))) 1105 - # define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3) 1106 - 1107 - # define set_bit_unaligned(nr, addr) \ 1108 - __test_and_set_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1109 - # define clear_bit_unaligned(nr, addr) \ 1110 - __test_and_clear_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1111 - # define test_bit_unaligned(nr, addr) \ 1112 - test_bit_le((nr) + unaligned_offset(addr), aligned_address(addr)) 1113 - 1114 - #else 1115 - 1116 - # define set_bit_unaligned(nr, addr) __test_and_set_bit_le(nr, addr) 1117 - # define clear_bit_unaligned(nr, addr) __test_and_clear_bit_le(nr, addr) 1118 - # define test_bit_unaligned(nr, addr) test_bit_le(nr, addr) 1119 - 1120 - #endif 1121 - 1122 - #define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1123 - #define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1124 - #define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1125 - #define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1126 - 1127 - #define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state)) 1128 - #define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1129 - #define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state)) 1130 - 1131 - extern void make_empty_dir_item_v1(char *body, __le32 dirid, __le32 objid, 1132 - __le32 par_dirid, __le32 par_objid); 1133 - extern void make_empty_dir_item(char *body, __le32 dirid, __le32 objid, 1134 - __le32 par_dirid, __le32 par_objid); 1135 - 1136 - /* array of the entry headers */ 1137 - /* get item body */ 1138 - #define B_I_PITEM(bh,ih) ( (bh)->b_data + ih_location(ih) ) 1139 - #define B_I_DEH(bh,ih) ((struct reiserfs_de_head *)(B_I_PITEM(bh,ih))) 1140 - 1141 - /* length of the directory entry in directory item. This define 1142 - calculates length of i-th directory entry using directory entry 1143 - locations from dir entry head. When it calculates length of 0-th 1144 - directory entry, it uses length of whole item in place of entry 1145 - location of the non-existent following entry in the calculation. 1146 - See picture above.*/ 1147 - /* 1148 - #define I_DEH_N_ENTRY_LENGTH(ih,deh,i) \ 1149 - ((i) ? (deh_location((deh)-1) - deh_location((deh))) : (ih_item_len((ih)) - deh_location((deh)))) 1150 - */ 1151 - static inline int entry_length(const struct buffer_head *bh, 1152 - const struct item_head *ih, int pos_in_item) 1153 - { 1154 - struct reiserfs_de_head *deh; 1155 - 1156 - deh = B_I_DEH(bh, ih) + pos_in_item; 1157 - if (pos_in_item) 1158 - return deh_location(deh - 1) - deh_location(deh); 1159 - 1160 - return ih_item_len(ih) - deh_location(deh); 1161 - } 1162 - 1163 - /* number of entries in the directory item, depends on ENTRY_COUNT being at the start of directory dynamic data. */ 1164 - #define I_ENTRY_COUNT(ih) (ih_entry_count((ih))) 1165 - 1166 - /* name by bh, ih and entry_num */ 1167 - #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)))) 1168 - 1169 - // two entries per block (at least) 1170 - #define REISERFS_MAX_NAME(block_size) 255 1171 - 1172 - /* this structure is used for operations on directory entries. It is 1173 - not a disk structure. */ 1174 - /* When reiserfs_find_entry or search_by_entry_key find directory 1175 - entry, they return filled reiserfs_dir_entry structure */ 1176 - struct reiserfs_dir_entry { 1177 - struct buffer_head *de_bh; 1178 - int de_item_num; 1179 - struct item_head *de_ih; 1180 - int de_entry_num; 1181 - struct reiserfs_de_head *de_deh; 1182 - int de_entrylen; 1183 - int de_namelen; 1184 - char *de_name; 1185 - unsigned long *de_gen_number_bit_string; 1186 - 1187 - __u32 de_dir_id; 1188 - __u32 de_objectid; 1189 - 1190 - struct cpu_key de_entry_key; 1191 - }; 1192 - 1193 - /* these defines are useful when a particular member of a reiserfs_dir_entry is needed */ 1194 - 1195 - /* pointer to file name, stored in entry */ 1196 - #define B_I_DEH_ENTRY_FILE_NAME(bh,ih,deh) (B_I_PITEM (bh, ih) + deh_location(deh)) 1197 - 1198 - /* length of name */ 1199 - #define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \ 1200 - (I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0)) 1201 - 1202 - /* hash value occupies bits from 7 up to 30 */ 1203 - #define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL) 1204 - /* generation number occupies 7 bits starting from 0 up to 6 */ 1205 - #define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL) 1206 - #define MAX_GENERATION_NUMBER 127 1207 - 1208 - #define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number)) 1209 - 1210 - /* 1211 - * Picture represents an internal node of the reiserfs tree 1212 - * ______________________________________________________ 1213 - * | | Array of | Array of | Free | 1214 - * |block | keys | pointers | space | 1215 - * | head | N | N+1 | | 1216 - * |______|_______________|___________________|___________| 1217 - */ 1218 - 1219 - /***************************************************************************/ 1220 - /* DISK CHILD */ 1221 - /***************************************************************************/ 1222 - /* Disk child pointer: The pointer from an internal node of the tree 1223 - to a node that is on disk. */ 1224 - struct disk_child { 1225 - __le32 dc_block_number; /* Disk child's block number. */ 1226 - __le16 dc_size; /* Disk child's used space. */ 1227 - __le16 dc_reserved; 1228 - }; 1229 - 1230 - #define DC_SIZE (sizeof(struct disk_child)) 1231 - #define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number)) 1232 - #define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size)) 1233 - #define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0) 1234 - #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0) 1235 - 1236 - /* Get disk child by buffer header and position in the tree node. */ 1237 - #define B_N_CHILD(bh, n_pos) ((struct disk_child *)\ 1238 - ((bh)->b_data + BLKH_SIZE + B_NR_ITEMS(bh) * KEY_SIZE + DC_SIZE * (n_pos))) 1239 - 1240 - /* Get disk child number by buffer header and position in the tree node. */ 1241 - #define B_N_CHILD_NUM(bh, n_pos) (dc_block_number(B_N_CHILD(bh, n_pos))) 1242 - #define PUT_B_N_CHILD_NUM(bh, n_pos, val) \ 1243 - (put_dc_block_number(B_N_CHILD(bh, n_pos), val)) 1244 - 1245 - /* maximal value of field child_size in structure disk_child */ 1246 - /* child size is the combined size of all items and their headers */ 1247 - #define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE )) 1248 - 1249 - /* amount of used space in buffer (not including block head) */ 1250 - #define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur))) 1251 - 1252 - /* max and min number of keys in internal node */ 1253 - #define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) ) 1254 - #define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2) 1255 - 1256 - /***************************************************************************/ 1257 - /* PATH STRUCTURES AND DEFINES */ 1258 - /***************************************************************************/ 1259 - 1260 - /* Search_by_key fills up the path from the root to the leaf as it descends the tree looking for the 1261 - key. It uses reiserfs_bread to try to find buffers in the cache given their block number. If it 1262 - does not find them in the cache it reads them from disk. For each node search_by_key finds using 1263 - reiserfs_bread it then uses bin_search to look through that node. bin_search will find the 1264 - position of the block_number of the next node if it is looking through an internal node. If it 1265 - is looking through a leaf node bin_search will find the position of the item which has key either 1266 - equal to given key, or which is the maximal key less than the given key. */ 1267 - 1268 - struct path_element { 1269 - struct buffer_head *pe_buffer; /* Pointer to the buffer at the path in the tree. */ 1270 - int pe_position; /* Position in the tree node which is placed in the */ 1271 - /* buffer above. */ 1272 - }; 1273 - 1274 - #define MAX_HEIGHT 5 /* maximal height of a tree. don't change this without changing JOURNAL_PER_BALANCE_CNT */ 1275 - #define EXTENDED_MAX_HEIGHT 7 /* Must be equals MAX_HEIGHT + FIRST_PATH_ELEMENT_OFFSET */ 1276 - #define FIRST_PATH_ELEMENT_OFFSET 2 /* Must be equal to at least 2. */ 1277 - 1278 - #define ILLEGAL_PATH_ELEMENT_OFFSET 1 /* Must be equal to FIRST_PATH_ELEMENT_OFFSET - 1 */ 1279 - #define MAX_FEB_SIZE 6 /* this MUST be MAX_HEIGHT + 1. See about FEB below */ 1280 - 1281 - /* We need to keep track of who the ancestors of nodes are. When we 1282 - perform a search we record which nodes were visited while 1283 - descending the tree looking for the node we searched for. This list 1284 - of nodes is called the path. This information is used while 1285 - performing balancing. Note that this path information may become 1286 - invalid, and this means we must check it when using it to see if it 1287 - is still valid. You'll need to read search_by_key and the comments 1288 - in it, especially about decrement_counters_in_path(), to understand 1289 - this structure. 1290 - 1291 - Paths make the code so much harder to work with and debug.... An 1292 - enormous number of bugs are due to them, and trying to write or modify 1293 - code that uses them just makes my head hurt. They are based on an 1294 - excessive effort to avoid disturbing the precious VFS code.:-( The 1295 - gods only know how we are going to SMP the code that uses them. 1296 - znodes are the way! */ 1297 - 1298 - #define PATH_READA 0x1 /* do read ahead */ 1299 - #define PATH_READA_BACK 0x2 /* read backwards */ 1300 - 1301 - struct treepath { 1302 - int path_length; /* Length of the array above. */ 1303 - int reada; 1304 - struct path_element path_elements[EXTENDED_MAX_HEIGHT]; /* Array of the path elements. */ 1305 - int pos_in_item; 1306 - }; 1307 - 1308 - #define pos_in_item(path) ((path)->pos_in_item) 1309 - 1310 - #define INITIALIZE_PATH(var) \ 1311 - struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,} 1312 - 1313 - /* Get path element by path and path position. */ 1314 - #define PATH_OFFSET_PELEMENT(path, n_offset) ((path)->path_elements + (n_offset)) 1315 - 1316 - /* Get buffer header at the path by path and path position. */ 1317 - #define PATH_OFFSET_PBUFFER(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_buffer) 1318 - 1319 - /* Get position in the element at the path by path and path position. */ 1320 - #define PATH_OFFSET_POSITION(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_position) 1321 - 1322 - #define PATH_PLAST_BUFFER(path) (PATH_OFFSET_PBUFFER((path), (path)->path_length)) 1323 - /* you know, to the person who didn't 1324 - write this the macro name does not 1325 - at first suggest what it does. 1326 - Maybe POSITION_FROM_PATH_END? Or 1327 - maybe we should just focus on 1328 - dumping paths... -Hans */ 1329 - #define PATH_LAST_POSITION(path) (PATH_OFFSET_POSITION((path), (path)->path_length)) 1330 - 1331 - #define PATH_PITEM_HEAD(path) B_N_PITEM_HEAD(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path)) 1332 - 1333 - /* in do_balance leaf has h == 0 in contrast with path structure, 1334 - where root has level == 0. That is why we need these defines */ 1335 - #define PATH_H_PBUFFER(path, h) PATH_OFFSET_PBUFFER (path, path->path_length - (h)) /* tb->S[h] */ 1336 - #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER (path, (h) + 1) /* tb->F[h] or tb->S[0]->b_parent */ 1337 - #define PATH_H_POSITION(path, h) PATH_OFFSET_POSITION (path, path->path_length - (h)) 1338 - #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1) /* tb->S[h]->b_item_order */ 1339 - 1340 - #define PATH_H_PATH_OFFSET(path, n_h) ((path)->path_length - (n_h)) 1341 - 1342 - #define get_last_bh(path) PATH_PLAST_BUFFER(path) 1343 - #define get_ih(path) PATH_PITEM_HEAD(path) 1344 - #define get_item_pos(path) PATH_LAST_POSITION(path) 1345 - #define get_item(path) ((void *)B_N_PITEM(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION (path))) 1346 - #define item_moved(ih,path) comp_items(ih, path) 1347 - #define path_changed(ih,path) comp_items (ih, path) 1348 - 1349 - /***************************************************************************/ 1350 - /* MISC */ 1351 - /***************************************************************************/ 1352 - 1353 - /* Size of pointer to the unformatted node. */ 1354 - #define UNFM_P_SIZE (sizeof(unp_t)) 1355 - #define UNFM_P_SHIFT 2 1356 - 1357 - // in in-core inode key is stored on le form 1358 - #define INODE_PKEY(inode) ((struct reiserfs_key *)(REISERFS_I(inode)->i_key)) 1359 - 1360 - #define MAX_UL_INT 0xffffffff 1361 - #define MAX_INT 0x7ffffff 1362 - #define MAX_US_INT 0xffff 1363 - 1364 - // reiserfs version 2 has max offset 60 bits. Version 1 - 32 bit offset 1365 - #define U32_MAX (~(__u32)0) 1366 - 1367 - static inline loff_t max_reiserfs_offset(struct inode *inode) 1368 - { 1369 - if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5) 1370 - return (loff_t) U32_MAX; 1371 - 1372 - return (loff_t) ((~(__u64) 0) >> 4); 1373 - } 1374 - 1375 - /*#define MAX_KEY_UNIQUENESS MAX_UL_INT*/ 1376 - #define MAX_KEY_OBJECTID MAX_UL_INT 1377 - 1378 - #define MAX_B_NUM MAX_UL_INT 1379 - #define MAX_FC_NUM MAX_US_INT 1380 - 1381 - /* the purpose is to detect overflow of an unsigned short */ 1382 - #define REISERFS_LINK_MAX (MAX_US_INT - 1000) 1383 - 1384 - /* The following defines are used in reiserfs_insert_item and reiserfs_append_item */ 1385 - #define REISERFS_KERNEL_MEM 0 /* reiserfs kernel memory mode */ 1386 - #define REISERFS_USER_MEM 1 /* reiserfs user memory mode */ 1387 - 1388 - #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter) 1389 - #define get_generation(s) atomic_read (&fs_generation(s)) 1390 - #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen) 1391 - #define __fs_changed(gen,s) (gen != get_generation (s)) 1392 - #define fs_changed(gen,s) \ 1393 - ({ \ 1394 - reiserfs_cond_resched(s); \ 1395 - __fs_changed(gen, s); \ 1396 - }) 1397 - 1398 - /***************************************************************************/ 1399 - /* FIXATE NODES */ 1400 - /***************************************************************************/ 1401 - 1402 - #define VI_TYPE_LEFT_MERGEABLE 1 1403 - #define VI_TYPE_RIGHT_MERGEABLE 2 1404 - 1405 - /* To make any changes in the tree we always first find node, that 1406 - contains item to be changed/deleted or place to insert a new 1407 - item. We call this node S. To do balancing we need to decide what 1408 - we will shift to left/right neighbor, or to a new node, where new 1409 - item will be etc. To make this analysis simpler we build virtual 1410 - node. Virtual node is an array of items, that will replace items of 1411 - node S. (For instance if we are going to delete an item, virtual 1412 - node does not contain it). Virtual node keeps information about 1413 - item sizes and types, mergeability of first and last items, sizes 1414 - of all entries in directory item. We use this array of items when 1415 - calculating what we can shift to neighbors and how many nodes we 1416 - have to have if we do not any shiftings, if we shift to left/right 1417 - neighbor or to both. */ 1418 - struct virtual_item { 1419 - int vi_index; // index in the array of item operations 1420 - unsigned short vi_type; // left/right mergeability 1421 - unsigned short vi_item_len; /* length of item that it will have after balancing */ 1422 - struct item_head *vi_ih; 1423 - const char *vi_item; // body of item (old or new) 1424 - const void *vi_new_data; // 0 always but paste mode 1425 - void *vi_uarea; // item specific area 1426 - }; 1427 - 1428 - struct virtual_node { 1429 - char *vn_free_ptr; /* this is a pointer to the free space in the buffer */ 1430 - unsigned short vn_nr_item; /* number of items in virtual node */ 1431 - short vn_size; /* size of node , that node would have if it has unlimited size and no balancing is performed */ 1432 - short vn_mode; /* mode of balancing (paste, insert, delete, cut) */ 1433 - short vn_affected_item_num; 1434 - short vn_pos_in_item; 1435 - struct item_head *vn_ins_ih; /* item header of inserted item, 0 for other modes */ 1436 - const void *vn_data; 1437 - struct virtual_item *vn_vi; /* array of items (including a new one, excluding item to be deleted) */ 1438 - }; 1439 - 1440 - /* used by directory items when creating virtual nodes */ 1441 - struct direntry_uarea { 1442 - int flags; 1443 - __u16 entry_count; 1444 - __u16 entry_sizes[1]; 1445 - } __attribute__ ((__packed__)); 1446 - 1447 - /***************************************************************************/ 1448 - /* TREE BALANCE */ 1449 - /***************************************************************************/ 1450 - 1451 - /* This temporary structure is used in tree balance algorithms, and 1452 - constructed as we go to the extent that its various parts are 1453 - needed. It contains arrays of nodes that can potentially be 1454 - involved in the balancing of node S, and parameters that define how 1455 - each of the nodes must be balanced. Note that in these algorithms 1456 - for balancing the worst case is to need to balance the current node 1457 - S and the left and right neighbors and all of their parents plus 1458 - create a new node. We implement S1 balancing for the leaf nodes 1459 - and S0 balancing for the internal nodes (S1 and S0 are defined in 1460 - our papers.)*/ 1461 - 1462 - #define MAX_FREE_BLOCK 7 /* size of the array of buffers to free at end of do_balance */ 1463 - 1464 - /* maximum number of FEB blocknrs on a single level */ 1465 - #define MAX_AMOUNT_NEEDED 2 1466 - 1467 - /* someday somebody will prefix every field in this struct with tb_ */ 1468 - struct tree_balance { 1469 - int tb_mode; 1470 - int need_balance_dirty; 1471 - struct super_block *tb_sb; 1472 - struct reiserfs_transaction_handle *transaction_handle; 1473 - struct treepath *tb_path; 1474 - struct buffer_head *L[MAX_HEIGHT]; /* array of left neighbors of nodes in the path */ 1475 - struct buffer_head *R[MAX_HEIGHT]; /* array of right neighbors of nodes in the path */ 1476 - struct buffer_head *FL[MAX_HEIGHT]; /* array of fathers of the left neighbors */ 1477 - struct buffer_head *FR[MAX_HEIGHT]; /* array of fathers of the right neighbors */ 1478 - struct buffer_head *CFL[MAX_HEIGHT]; /* array of common parents of center node and its left neighbor */ 1479 - struct buffer_head *CFR[MAX_HEIGHT]; /* array of common parents of center node and its right neighbor */ 1480 - 1481 - struct buffer_head *FEB[MAX_FEB_SIZE]; /* array of empty buffers. Number of buffers in array equals 1482 - cur_blknum. */ 1483 - struct buffer_head *used[MAX_FEB_SIZE]; 1484 - struct buffer_head *thrown[MAX_FEB_SIZE]; 1485 - int lnum[MAX_HEIGHT]; /* array of number of items which must be 1486 - shifted to the left in order to balance the 1487 - current node; for leaves includes item that 1488 - will be partially shifted; for internal 1489 - nodes, it is the number of child pointers 1490 - rather than items. It includes the new item 1491 - being created. The code sometimes subtracts 1492 - one to get the number of wholly shifted 1493 - items for other purposes. */ 1494 - int rnum[MAX_HEIGHT]; /* substitute right for left in comment above */ 1495 - int lkey[MAX_HEIGHT]; /* array indexed by height h mapping the key delimiting L[h] and 1496 - S[h] to its item number within the node CFL[h] */ 1497 - int rkey[MAX_HEIGHT]; /* substitute r for l in comment above */ 1498 - int insert_size[MAX_HEIGHT]; /* the number of bytes by we are trying to add or remove from 1499 - S[h]. A negative value means removing. */ 1500 - int blknum[MAX_HEIGHT]; /* number of nodes that will replace node S[h] after 1501 - balancing on the level h of the tree. If 0 then S is 1502 - being deleted, if 1 then S is remaining and no new nodes 1503 - are being created, if 2 or 3 then 1 or 2 new nodes is 1504 - being created */ 1505 - 1506 - /* fields that are used only for balancing leaves of the tree */ 1507 - int cur_blknum; /* number of empty blocks having been already allocated */ 1508 - int s0num; /* number of items that fall into left most node when S[0] splits */ 1509 - int s1num; /* number of items that fall into first new node when S[0] splits */ 1510 - int s2num; /* number of items that fall into second new node when S[0] splits */ 1511 - int lbytes; /* number of bytes which can flow to the left neighbor from the left */ 1512 - /* most liquid item that cannot be shifted from S[0] entirely */ 1513 - /* if -1 then nothing will be partially shifted */ 1514 - int rbytes; /* number of bytes which will flow to the right neighbor from the right */ 1515 - /* most liquid item that cannot be shifted from S[0] entirely */ 1516 - /* if -1 then nothing will be partially shifted */ 1517 - int s1bytes; /* number of bytes which flow to the first new node when S[0] splits */ 1518 - /* note: if S[0] splits into 3 nodes, then items do not need to be cut */ 1519 - int s2bytes; 1520 - struct buffer_head *buf_to_free[MAX_FREE_BLOCK]; /* buffers which are to be freed after do_balance finishes by unfix_nodes */ 1521 - char *vn_buf; /* kmalloced memory. Used to create 1522 - virtual node and keep map of 1523 - dirtied bitmap blocks */ 1524 - int vn_buf_size; /* size of the vn_buf */ 1525 - struct virtual_node *tb_vn; /* VN starts after bitmap of bitmap blocks */ 1526 - 1527 - int fs_gen; /* saved value of `reiserfs_generation' counter 1528 - see FILESYSTEM_CHANGED() macro in reiserfs_fs.h */ 1529 - #ifdef DISPLACE_NEW_PACKING_LOCALITIES 1530 - struct in_core_key key; /* key pointer, to pass to block allocator or 1531 - another low-level subsystem */ 1532 - #endif 1533 - }; 1534 - 1535 - /* These are modes of balancing */ 1536 - 1537 - /* When inserting an item. */ 1538 - #define M_INSERT 'i' 1539 - /* When inserting into (directories only) or appending onto an already 1540 - existent item. */ 1541 - #define M_PASTE 'p' 1542 - /* When deleting an item. */ 1543 - #define M_DELETE 'd' 1544 - /* When truncating an item or removing an entry from a (directory) item. */ 1545 - #define M_CUT 'c' 1546 - 1547 - /* used when balancing on leaf level skipped (in reiserfsck) */ 1548 - #define M_INTERNAL 'n' 1549 - 1550 - /* When further balancing is not needed, then do_balance does not need 1551 - to be called. */ 1552 - #define M_SKIP_BALANCING 's' 1553 - #define M_CONVERT 'v' 1554 - 1555 - /* modes of leaf_move_items */ 1556 - #define LEAF_FROM_S_TO_L 0 1557 - #define LEAF_FROM_S_TO_R 1 1558 - #define LEAF_FROM_R_TO_L 2 1559 - #define LEAF_FROM_L_TO_R 3 1560 - #define LEAF_FROM_S_TO_SNEW 4 1561 - 1562 - #define FIRST_TO_LAST 0 1563 - #define LAST_TO_FIRST 1 1564 - 1565 - /* used in do_balance for passing parent of node information that has 1566 - been gotten from tb struct */ 1567 - struct buffer_info { 1568 - struct tree_balance *tb; 1569 - struct buffer_head *bi_bh; 1570 - struct buffer_head *bi_parent; 1571 - int bi_position; 1572 - }; 1573 - 1574 - static inline struct super_block *sb_from_tb(struct tree_balance *tb) 1575 - { 1576 - return tb ? tb->tb_sb : NULL; 1577 - } 1578 - 1579 - static inline struct super_block *sb_from_bi(struct buffer_info *bi) 1580 - { 1581 - return bi ? sb_from_tb(bi->tb) : NULL; 1582 - } 1583 - 1584 - /* there are 4 types of items: stat data, directory item, indirect, direct. 1585 - +-------------------+------------+--------------+------------+ 1586 - | | k_offset | k_uniqueness | mergeable? | 1587 - +-------------------+------------+--------------+------------+ 1588 - | stat data | 0 | 0 | no | 1589 - +-------------------+------------+--------------+------------+ 1590 - | 1st directory item| DOT_OFFSET |DIRENTRY_UNIQUENESS| no | 1591 - | non 1st directory | hash value | | yes | 1592 - | item | | | | 1593 - +-------------------+------------+--------------+------------+ 1594 - | indirect item | offset + 1 |TYPE_INDIRECT | if this is not the first indirect item of the object 1595 - +-------------------+------------+--------------+------------+ 1596 - | direct item | offset + 1 |TYPE_DIRECT | if not this is not the first direct item of the object 1597 - +-------------------+------------+--------------+------------+ 1598 - */ 1599 - 1600 - struct item_operations { 1601 - int (*bytes_number) (struct item_head * ih, int block_size); 1602 - void (*decrement_key) (struct cpu_key *); 1603 - int (*is_left_mergeable) (struct reiserfs_key * ih, 1604 - unsigned long bsize); 1605 - void (*print_item) (struct item_head *, char *item); 1606 - void (*check_item) (struct item_head *, char *item); 1607 - 1608 - int (*create_vi) (struct virtual_node * vn, struct virtual_item * vi, 1609 - int is_affected, int insert_size); 1610 - int (*check_left) (struct virtual_item * vi, int free, 1611 - int start_skip, int end_skip); 1612 - int (*check_right) (struct virtual_item * vi, int free); 1613 - int (*part_size) (struct virtual_item * vi, int from, int to); 1614 - int (*unit_num) (struct virtual_item * vi); 1615 - void (*print_vi) (struct virtual_item * vi); 1616 - }; 1617 - 1618 - extern struct item_operations *item_ops[TYPE_ANY + 1]; 1619 - 1620 - #define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize) 1621 - #define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize) 1622 - #define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item) 1623 - #define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item) 1624 - #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) 1625 - #define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip) 1626 - #define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free) 1627 - #define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to) 1628 - #define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi) 1629 - #define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi) 1630 - 1631 - #define COMP_SHORT_KEYS comp_short_keys 1632 - 1633 - /* number of blocks pointed to by the indirect item */ 1634 - #define I_UNFM_NUM(ih) (ih_item_len(ih) / UNFM_P_SIZE) 1635 - 1636 - /* the used space within the unformatted node corresponding to pos within the item pointed to by ih */ 1637 - #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size)) 1638 - 1639 - /* number of bytes contained by the direct item or the unformatted nodes the indirect item points to */ 1640 - 1641 - /* get the item header */ 1642 - #define B_N_PITEM_HEAD(bh,item_num) ( (struct item_head * )((bh)->b_data + BLKH_SIZE) + (item_num) ) 1643 - 1644 - /* get key */ 1645 - #define B_N_PDELIM_KEY(bh,item_num) ( (struct reiserfs_key * )((bh)->b_data + BLKH_SIZE) + (item_num) ) 1646 - 1647 - /* get the key */ 1648 - #define B_N_PKEY(bh,item_num) ( &(B_N_PITEM_HEAD(bh,item_num)->ih_key) ) 1649 - 1650 - /* get item body */ 1651 - #define B_N_PITEM(bh,item_num) ( (bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(item_num)))) 1652 - 1653 - /* get the stat data by the buffer header and the item order */ 1654 - #define B_N_STAT_DATA(bh,nr) \ 1655 - ( (struct stat_data *)((bh)->b_data + ih_location(B_N_PITEM_HEAD((bh),(nr))) ) ) 1656 - 1657 - /* following defines use reiserfs buffer header and item header */ 1658 - 1659 - /* get stat-data */ 1660 - #define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) ) 1661 - 1662 - // this is 3976 for size==4096 1663 - #define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE) 1664 - 1665 - /* indirect items consist of entries which contain blocknrs, pos 1666 - indicates which entry, and B_I_POS_UNFM_POINTER resolves to the 1667 - blocknr contained by the entry pos points to */ 1668 - #define B_I_POS_UNFM_POINTER(bh,ih,pos) le32_to_cpu(*(((unp_t *)B_I_PITEM(bh,ih)) + (pos))) 1669 - #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) 1670 - 1671 - struct reiserfs_iget_args { 1672 - __u32 objectid; 1673 - __u32 dirid; 1674 - }; 1675 - 1676 - /***************************************************************************/ 1677 - /* FUNCTION DECLARATIONS */ 1678 - /***************************************************************************/ 1679 - 1680 - #define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12) 1681 - 1682 - #define journal_trans_half(blocksize) \ 1683 - ((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32)) 1684 - 1685 - /* journal.c see journal.c for all the comments here */ 1686 - 1687 - /* first block written in a commit. */ 1688 - struct reiserfs_journal_desc { 1689 - __le32 j_trans_id; /* id of commit */ 1690 - __le32 j_len; /* length of commit. len +1 is the commit block */ 1691 - __le32 j_mount_id; /* mount id of this trans */ 1692 - __le32 j_realblock[1]; /* real locations for each block */ 1693 - }; 1694 - 1695 - #define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id) 1696 - #define get_desc_trans_len(d) le32_to_cpu((d)->j_len) 1697 - #define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id) 1698 - 1699 - #define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0) 1700 - #define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0) 1701 - #define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0) 1702 - 1703 - /* last block written in a commit */ 1704 - struct reiserfs_journal_commit { 1705 - __le32 j_trans_id; /* must match j_trans_id from the desc block */ 1706 - __le32 j_len; /* ditto */ 1707 - __le32 j_realblock[1]; /* real locations for each block */ 1708 - }; 1709 - 1710 - #define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id) 1711 - #define get_commit_trans_len(c) le32_to_cpu((c)->j_len) 1712 - #define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id) 1713 - 1714 - #define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0) 1715 - #define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0) 1716 - 1717 - /* this header block gets written whenever a transaction is considered fully flushed, and is more recent than the 1718 - ** last fully flushed transaction. fully flushed means all the log blocks and all the real blocks are on disk, 1719 - ** and this transaction does not need to be replayed. 1720 - */ 1721 - struct reiserfs_journal_header { 1722 - __le32 j_last_flush_trans_id; /* id of last fully flushed transaction */ 1723 - __le32 j_first_unflushed_offset; /* offset in the log of where to start replay after a crash */ 1724 - __le32 j_mount_id; 1725 - /* 12 */ struct journal_params jh_journal; 1726 - }; 1727 - 1728 - /* biggest tunable defines are right here */ 1729 - #define JOURNAL_BLOCK_COUNT 8192 /* number of blocks in the journal */ 1730 - #define JOURNAL_TRANS_MAX_DEFAULT 1024 /* biggest possible single transaction, don't change for now (8/3/99) */ 1731 - #define JOURNAL_TRANS_MIN_DEFAULT 256 1732 - #define JOURNAL_MAX_BATCH_DEFAULT 900 /* max blocks to batch into one transaction, don't make this any bigger than 900 */ 1733 - #define JOURNAL_MIN_RATIO 2 1734 - #define JOURNAL_MAX_COMMIT_AGE 30 1735 - #define JOURNAL_MAX_TRANS_AGE 30 1736 - #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9) 1737 - #define JOURNAL_BLOCKS_PER_OBJECT(sb) (JOURNAL_PER_BALANCE_CNT * 3 + \ 1738 - 2 * (REISERFS_QUOTA_INIT_BLOCKS(sb) + \ 1739 - REISERFS_QUOTA_TRANS_BLOCKS(sb))) 1740 - 1741 - #ifdef CONFIG_QUOTA 1742 - #define REISERFS_QUOTA_OPTS ((1 << REISERFS_USRQUOTA) | (1 << REISERFS_GRPQUOTA)) 1743 - /* We need to update data and inode (atime) */ 1744 - #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? 2 : 0) 1745 - /* 1 balancing, 1 bitmap, 1 data per write + stat data update */ 1746 - #define REISERFS_QUOTA_INIT_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \ 1747 - (DQUOT_INIT_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_INIT_REWRITE+1) : 0) 1748 - /* same as with INIT */ 1749 - #define REISERFS_QUOTA_DEL_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \ 1750 - (DQUOT_DEL_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_DEL_REWRITE+1) : 0) 1751 - #else 1752 - #define REISERFS_QUOTA_TRANS_BLOCKS(s) 0 1753 - #define REISERFS_QUOTA_INIT_BLOCKS(s) 0 1754 - #define REISERFS_QUOTA_DEL_BLOCKS(s) 0 1755 - #endif 1756 - 1757 - /* both of these can be as low as 1, or as high as you want. The min is the 1758 - ** number of 4k bitmap nodes preallocated on mount. New nodes are allocated 1759 - ** as needed, and released when transactions are committed. On release, if 1760 - ** the current number of nodes is > max, the node is freed, otherwise, 1761 - ** it is put on a free list for faster use later. 1762 - */ 1763 - #define REISERFS_MIN_BITMAP_NODES 10 1764 - #define REISERFS_MAX_BITMAP_NODES 100 1765 - 1766 - #define JBH_HASH_SHIFT 13 /* these are based on journal hash size of 8192 */ 1767 - #define JBH_HASH_MASK 8191 1768 - 1769 - #define _jhashfn(sb,block) \ 1770 - (((unsigned long)sb>>L1_CACHE_SHIFT) ^ \ 1771 - (((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12)))) 1772 - #define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK]) 1773 - 1774 - // We need these to make journal.c code more readable 1775 - #define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1776 - #define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1777 - #define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize) 1778 - 1779 - enum reiserfs_bh_state_bits { 1780 - BH_JDirty = BH_PrivateStart, /* buffer is in current transaction */ 1781 - BH_JDirty_wait, 1782 - BH_JNew, /* disk block was taken off free list before 1783 - * being in a finished transaction, or 1784 - * written to disk. Can be reused immed. */ 1785 - BH_JPrepared, 1786 - BH_JRestore_dirty, 1787 - BH_JTest, // debugging only will go away 1788 - }; 1789 - 1790 - BUFFER_FNS(JDirty, journaled); 1791 - TAS_BUFFER_FNS(JDirty, journaled); 1792 - BUFFER_FNS(JDirty_wait, journal_dirty); 1793 - TAS_BUFFER_FNS(JDirty_wait, journal_dirty); 1794 - BUFFER_FNS(JNew, journal_new); 1795 - TAS_BUFFER_FNS(JNew, journal_new); 1796 - BUFFER_FNS(JPrepared, journal_prepared); 1797 - TAS_BUFFER_FNS(JPrepared, journal_prepared); 1798 - BUFFER_FNS(JRestore_dirty, journal_restore_dirty); 1799 - TAS_BUFFER_FNS(JRestore_dirty, journal_restore_dirty); 1800 - BUFFER_FNS(JTest, journal_test); 1801 - TAS_BUFFER_FNS(JTest, journal_test); 1802 - 1803 - /* 1804 - ** transaction handle which is passed around for all journal calls 1805 - */ 1806 - struct reiserfs_transaction_handle { 1807 - struct super_block *t_super; /* super for this FS when journal_begin was 1808 - called. saves calls to reiserfs_get_super 1809 - also used by nested transactions to make 1810 - sure they are nesting on the right FS 1811 - _must_ be first in the handle 1812 - */ 1813 - int t_refcount; 1814 - int t_blocks_logged; /* number of blocks this writer has logged */ 1815 - int t_blocks_allocated; /* number of blocks this writer allocated */ 1816 - unsigned int t_trans_id; /* sanity check, equals the current trans id */ 1817 - void *t_handle_save; /* save existing current->journal_info */ 1818 - unsigned displace_new_blocks:1; /* if new block allocation occurres, that block 1819 - should be displaced from others */ 1820 - struct list_head t_list; 1821 - }; 1822 - 1823 - /* used to keep track of ordered and tail writes, attached to the buffer 1824 - * head through b_journal_head. 1825 - */ 1826 - struct reiserfs_jh { 1827 - struct reiserfs_journal_list *jl; 1828 - struct buffer_head *bh; 1829 - struct list_head list; 1830 - }; 1831 - 1832 - void reiserfs_free_jh(struct buffer_head *bh); 1833 - int reiserfs_add_tail_list(struct inode *inode, struct buffer_head *bh); 1834 - int reiserfs_add_ordered_list(struct inode *inode, struct buffer_head *bh); 1835 - int journal_mark_dirty(struct reiserfs_transaction_handle *, 1836 - struct super_block *, struct buffer_head *bh); 1837 - 1838 - static inline int reiserfs_file_data_log(struct inode *inode) 1839 - { 1840 - if (reiserfs_data_log(inode->i_sb) || 1841 - (REISERFS_I(inode)->i_flags & i_data_log)) 1842 - return 1; 1843 - return 0; 1844 - } 1845 - 1846 - static inline int reiserfs_transaction_running(struct super_block *s) 1847 - { 1848 - struct reiserfs_transaction_handle *th = current->journal_info; 1849 - if (th && th->t_super == s) 1850 - return 1; 1851 - if (th && th->t_super == NULL) 1852 - BUG(); 1853 - return 0; 1854 - } 1855 - 1856 - static inline int reiserfs_transaction_free_space(struct reiserfs_transaction_handle *th) 1857 - { 1858 - return th->t_blocks_allocated - th->t_blocks_logged; 1859 - } 1860 - 1861 - struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct 1862 - super_block 1863 - *, 1864 - int count); 1865 - int reiserfs_end_persistent_transaction(struct reiserfs_transaction_handle *); 1866 - int reiserfs_commit_page(struct inode *inode, struct page *page, 1867 - unsigned from, unsigned to); 1868 - int reiserfs_flush_old_commits(struct super_block *); 1869 - int reiserfs_commit_for_inode(struct inode *); 1870 - int reiserfs_inode_needs_commit(struct inode *); 1871 - void reiserfs_update_inode_transaction(struct inode *); 1872 - void reiserfs_wait_on_write_block(struct super_block *s); 1873 - void reiserfs_block_writes(struct reiserfs_transaction_handle *th); 1874 - void reiserfs_allow_writes(struct super_block *s); 1875 - void reiserfs_check_lock_depth(struct super_block *s, char *caller); 1876 - int reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh, 1877 - int wait); 1878 - void reiserfs_restore_prepared_buffer(struct super_block *, 1879 - struct buffer_head *bh); 1880 - int journal_init(struct super_block *, const char *j_dev_name, int old_format, 1881 - unsigned int); 1882 - int journal_release(struct reiserfs_transaction_handle *, struct super_block *); 1883 - int journal_release_error(struct reiserfs_transaction_handle *, 1884 - struct super_block *); 1885 - int journal_end(struct reiserfs_transaction_handle *, struct super_block *, 1886 - unsigned long); 1887 - int journal_end_sync(struct reiserfs_transaction_handle *, struct super_block *, 1888 - unsigned long); 1889 - int journal_mark_freed(struct reiserfs_transaction_handle *, 1890 - struct super_block *, b_blocknr_t blocknr); 1891 - int journal_transaction_should_end(struct reiserfs_transaction_handle *, int); 1892 - int reiserfs_in_journal(struct super_block *sb, unsigned int bmap_nr, 1893 - int bit_nr, int searchall, b_blocknr_t *next); 1894 - int journal_begin(struct reiserfs_transaction_handle *, 1895 - struct super_block *sb, unsigned long); 1896 - int journal_join_abort(struct reiserfs_transaction_handle *, 1897 - struct super_block *sb, unsigned long); 1898 - void reiserfs_abort_journal(struct super_block *sb, int errno); 1899 - void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...); 1900 - int reiserfs_allocate_list_bitmaps(struct super_block *s, 1901 - struct reiserfs_list_bitmap *, unsigned int); 1902 - 1903 - void add_save_link(struct reiserfs_transaction_handle *th, 1904 - struct inode *inode, int truncate); 1905 - int remove_save_link(struct inode *inode, int truncate); 1906 - 1907 - /* objectid.c */ 1908 - __u32 reiserfs_get_unused_objectid(struct reiserfs_transaction_handle *th); 1909 - void reiserfs_release_objectid(struct reiserfs_transaction_handle *th, 1910 - __u32 objectid_to_release); 1911 - int reiserfs_convert_objectid_map_v1(struct super_block *); 1912 - 1913 - /* stree.c */ 1914 - int B_IS_IN_TREE(const struct buffer_head *); 1915 - extern void copy_item_head(struct item_head *to, 1916 - const struct item_head *from); 1917 - 1918 - // first key is in cpu form, second - le 1919 - extern int comp_short_keys(const struct reiserfs_key *le_key, 1920 - const struct cpu_key *cpu_key); 1921 - extern void le_key2cpu_key(struct cpu_key *to, const struct reiserfs_key *from); 1922 - 1923 - // both are in le form 1924 - extern int comp_le_keys(const struct reiserfs_key *, 1925 - const struct reiserfs_key *); 1926 - extern int comp_short_le_keys(const struct reiserfs_key *, 1927 - const struct reiserfs_key *); 1928 - 1929 - // 1930 - // get key version from on disk key - kludge 1931 - // 1932 - static inline int le_key_version(const struct reiserfs_key *key) 1933 - { 1934 - int type; 1935 - 1936 - type = offset_v2_k_type(&(key->u.k_offset_v2)); 1937 - if (type != TYPE_DIRECT && type != TYPE_INDIRECT 1938 - && type != TYPE_DIRENTRY) 1939 - return KEY_FORMAT_3_5; 1940 - 1941 - return KEY_FORMAT_3_6; 1942 - 1943 - } 1944 - 1945 - static inline void copy_key(struct reiserfs_key *to, 1946 - const struct reiserfs_key *from) 1947 - { 1948 - memcpy(to, from, KEY_SIZE); 1949 - } 1950 - 1951 - int comp_items(const struct item_head *stored_ih, const struct treepath *path); 1952 - const struct reiserfs_key *get_rkey(const struct treepath *chk_path, 1953 - const struct super_block *sb); 1954 - int search_by_key(struct super_block *, const struct cpu_key *, 1955 - struct treepath *, int); 1956 - #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL) 1957 - int search_for_position_by_key(struct super_block *sb, 1958 - const struct cpu_key *cpu_key, 1959 - struct treepath *search_path); 1960 - extern void decrement_bcount(struct buffer_head *bh); 1961 - void decrement_counters_in_path(struct treepath *search_path); 1962 - void pathrelse(struct treepath *search_path); 1963 - int reiserfs_check_path(struct treepath *p); 1964 - void pathrelse_and_restore(struct super_block *s, struct treepath *search_path); 1965 - 1966 - int reiserfs_insert_item(struct reiserfs_transaction_handle *th, 1967 - struct treepath *path, 1968 - const struct cpu_key *key, 1969 - struct item_head *ih, 1970 - struct inode *inode, const char *body); 1971 - 1972 - int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th, 1973 - struct treepath *path, 1974 - const struct cpu_key *key, 1975 - struct inode *inode, 1976 - const char *body, int paste_size); 1977 - 1978 - int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th, 1979 - struct treepath *path, 1980 - struct cpu_key *key, 1981 - struct inode *inode, 1982 - struct page *page, loff_t new_file_size); 1983 - 1984 - int reiserfs_delete_item(struct reiserfs_transaction_handle *th, 1985 - struct treepath *path, 1986 - const struct cpu_key *key, 1987 - struct inode *inode, struct buffer_head *un_bh); 1988 - 1989 - void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th, 1990 - struct inode *inode, struct reiserfs_key *key); 1991 - int reiserfs_delete_object(struct reiserfs_transaction_handle *th, 1992 - struct inode *inode); 1993 - int reiserfs_do_truncate(struct reiserfs_transaction_handle *th, 1994 - struct inode *inode, struct page *, 1995 - int update_timestamps); 1996 - 1997 - #define i_block_size(inode) ((inode)->i_sb->s_blocksize) 1998 - #define file_size(inode) ((inode)->i_size) 1999 - #define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1)) 2000 - 2001 - #define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\ 2002 - !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 ) 2003 - 2004 - void padd_item(char *item, int total_length, int length); 2005 - 2006 - /* inode.c */ 2007 - /* args for the create parameter of reiserfs_get_block */ 2008 - #define GET_BLOCK_NO_CREATE 0 /* don't create new blocks or convert tails */ 2009 - #define GET_BLOCK_CREATE 1 /* add anything you need to find block */ 2010 - #define GET_BLOCK_NO_HOLE 2 /* return -ENOENT for file holes */ 2011 - #define GET_BLOCK_READ_DIRECT 4 /* read the tail if indirect item not found */ 2012 - #define GET_BLOCK_NO_IMUX 8 /* i_mutex is not held, don't preallocate */ 2013 - #define GET_BLOCK_NO_DANGLE 16 /* don't leave any transactions running */ 2014 - 2015 - void reiserfs_read_locked_inode(struct inode *inode, 2016 - struct reiserfs_iget_args *args); 2017 - int reiserfs_find_actor(struct inode *inode, void *p); 2018 - int reiserfs_init_locked_inode(struct inode *inode, void *p); 2019 - void reiserfs_evict_inode(struct inode *inode); 2020 - int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc); 2021 - int reiserfs_get_block(struct inode *inode, sector_t block, 2022 - struct buffer_head *bh_result, int create); 2023 - struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid, 2024 - int fh_len, int fh_type); 2025 - struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid, 2026 - int fh_len, int fh_type); 2027 - int reiserfs_encode_fh(struct dentry *dentry, __u32 * data, int *lenp, 2028 - int connectable); 2029 - 2030 - int reiserfs_truncate_file(struct inode *, int update_timestamps); 2031 - void make_cpu_key(struct cpu_key *cpu_key, struct inode *inode, loff_t offset, 2032 - int type, int key_length); 2033 - void make_le_item_head(struct item_head *ih, const struct cpu_key *key, 2034 - int version, 2035 - loff_t offset, int type, int length, int entry_count); 2036 - struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key); 2037 - 2038 - struct reiserfs_security_handle; 2039 - int reiserfs_new_inode(struct reiserfs_transaction_handle *th, 2040 - struct inode *dir, umode_t mode, 2041 - const char *symname, loff_t i_size, 2042 - struct dentry *dentry, struct inode *inode, 2043 - struct reiserfs_security_handle *security); 2044 - 2045 - void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th, 2046 - struct inode *inode, loff_t size); 2047 - 2048 - static inline void reiserfs_update_sd(struct reiserfs_transaction_handle *th, 2049 - struct inode *inode) 2050 - { 2051 - reiserfs_update_sd_size(th, inode, inode->i_size); 2052 - } 2053 - 2054 - void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode); 2055 - void i_attrs_to_sd_attrs(struct inode *inode, __u16 * sd_attrs); 2056 - int reiserfs_setattr(struct dentry *dentry, struct iattr *attr); 2057 - 2058 - int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len); 2059 - 2060 - /* namei.c */ 2061 - void set_de_name_and_namelen(struct reiserfs_dir_entry *de); 2062 - int search_by_entry_key(struct super_block *sb, const struct cpu_key *key, 2063 - struct treepath *path, struct reiserfs_dir_entry *de); 2064 - struct dentry *reiserfs_get_parent(struct dentry *); 2065 - 2066 - #ifdef CONFIG_REISERFS_PROC_INFO 2067 - int reiserfs_proc_info_init(struct super_block *sb); 2068 - int reiserfs_proc_info_done(struct super_block *sb); 2069 - int reiserfs_proc_info_global_init(void); 2070 - int reiserfs_proc_info_global_done(void); 2071 - 2072 - #define PROC_EXP( e ) e 2073 - 2074 - #define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data 2075 - #define PROC_INFO_MAX( sb, field, value ) \ 2076 - __PINFO( sb ).field = \ 2077 - max( REISERFS_SB( sb ) -> s_proc_info_data.field, value ) 2078 - #define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) ) 2079 - #define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) ) 2080 - #define PROC_INFO_BH_STAT( sb, bh, level ) \ 2081 - PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \ 2082 - PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \ 2083 - PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) ) 2084 - #else 2085 - static inline int reiserfs_proc_info_init(struct super_block *sb) 2086 - { 2087 - return 0; 2088 - } 2089 - 2090 - static inline int reiserfs_proc_info_done(struct super_block *sb) 2091 - { 2092 - return 0; 2093 - } 2094 - 2095 - static inline int reiserfs_proc_info_global_init(void) 2096 - { 2097 - return 0; 2098 - } 2099 - 2100 - static inline int reiserfs_proc_info_global_done(void) 2101 - { 2102 - return 0; 2103 - } 2104 - 2105 - #define PROC_EXP( e ) 2106 - #define VOID_V ( ( void ) 0 ) 2107 - #define PROC_INFO_MAX( sb, field, value ) VOID_V 2108 - #define PROC_INFO_INC( sb, field ) VOID_V 2109 - #define PROC_INFO_ADD( sb, field, val ) VOID_V 2110 - #define PROC_INFO_BH_STAT(sb, bh, n_node_level) VOID_V 2111 - #endif 2112 - 2113 - /* dir.c */ 2114 - extern const struct inode_operations reiserfs_dir_inode_operations; 2115 - extern const struct inode_operations reiserfs_symlink_inode_operations; 2116 - extern const struct inode_operations reiserfs_special_inode_operations; 2117 - extern const struct file_operations reiserfs_dir_operations; 2118 - int reiserfs_readdir_dentry(struct dentry *, void *, filldir_t, loff_t *); 2119 - 2120 - /* tail_conversion.c */ 2121 - int direct2indirect(struct reiserfs_transaction_handle *, struct inode *, 2122 - struct treepath *, struct buffer_head *, loff_t); 2123 - int indirect2direct(struct reiserfs_transaction_handle *, struct inode *, 2124 - struct page *, struct treepath *, const struct cpu_key *, 2125 - loff_t, char *); 2126 - void reiserfs_unmap_buffer(struct buffer_head *); 2127 - 2128 - /* file.c */ 2129 - extern const struct inode_operations reiserfs_file_inode_operations; 2130 - extern const struct file_operations reiserfs_file_operations; 2131 - extern const struct address_space_operations reiserfs_address_space_operations; 2132 - 2133 - /* fix_nodes.c */ 2134 - 2135 - int fix_nodes(int n_op_mode, struct tree_balance *tb, 2136 - struct item_head *ins_ih, const void *); 2137 - void unfix_nodes(struct tree_balance *); 2138 - 2139 - /* prints.c */ 2140 - void __reiserfs_panic(struct super_block *s, const char *id, 2141 - const char *function, const char *fmt, ...) 2142 - __attribute__ ((noreturn)); 2143 - #define reiserfs_panic(s, id, fmt, args...) \ 2144 - __reiserfs_panic(s, id, __func__, fmt, ##args) 2145 - void __reiserfs_error(struct super_block *s, const char *id, 2146 - const char *function, const char *fmt, ...); 2147 - #define reiserfs_error(s, id, fmt, args...) \ 2148 - __reiserfs_error(s, id, __func__, fmt, ##args) 2149 - void reiserfs_info(struct super_block *s, const char *fmt, ...); 2150 - void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...); 2151 - void print_indirect_item(struct buffer_head *bh, int item_num); 2152 - void store_print_tb(struct tree_balance *tb); 2153 - void print_cur_tb(char *mes); 2154 - void print_de(struct reiserfs_dir_entry *de); 2155 - void print_bi(struct buffer_info *bi, char *mes); 2156 - #define PRINT_LEAF_ITEMS 1 /* print all items */ 2157 - #define PRINT_DIRECTORY_ITEMS 2 /* print directory items */ 2158 - #define PRINT_DIRECT_ITEMS 4 /* print contents of direct items */ 2159 - void print_block(struct buffer_head *bh, ...); 2160 - void print_bmap(struct super_block *s, int silent); 2161 - void print_bmap_block(int i, char *data, int size, int silent); 2162 - /*void print_super_block (struct super_block * s, char * mes);*/ 2163 - void print_objectid_map(struct super_block *s); 2164 - void print_block_head(struct buffer_head *bh, char *mes); 2165 - void check_leaf(struct buffer_head *bh); 2166 - void check_internal(struct buffer_head *bh); 2167 - void print_statistics(struct super_block *s); 2168 - char *reiserfs_hashname(int code); 2169 - 2170 - /* lbalance.c */ 2171 - int leaf_move_items(int shift_mode, struct tree_balance *tb, int mov_num, 2172 - int mov_bytes, struct buffer_head *Snew); 2173 - int leaf_shift_left(struct tree_balance *tb, int shift_num, int shift_bytes); 2174 - int leaf_shift_right(struct tree_balance *tb, int shift_num, int shift_bytes); 2175 - void leaf_delete_items(struct buffer_info *cur_bi, int last_first, int first, 2176 - int del_num, int del_bytes); 2177 - void leaf_insert_into_buf(struct buffer_info *bi, int before, 2178 - struct item_head *inserted_item_ih, 2179 - const char *inserted_item_body, int zeros_number); 2180 - void leaf_paste_in_buffer(struct buffer_info *bi, int pasted_item_num, 2181 - int pos_in_item, int paste_size, const char *body, 2182 - int zeros_number); 2183 - void leaf_cut_from_buffer(struct buffer_info *bi, int cut_item_num, 2184 - int pos_in_item, int cut_size); 2185 - void leaf_paste_entries(struct buffer_info *bi, int item_num, int before, 2186 - int new_entry_count, struct reiserfs_de_head *new_dehs, 2187 - const char *records, int paste_size); 2188 - /* ibalance.c */ 2189 - int balance_internal(struct tree_balance *, int, int, struct item_head *, 2190 - struct buffer_head **); 2191 - 2192 - /* do_balance.c */ 2193 - void do_balance_mark_leaf_dirty(struct tree_balance *tb, 2194 - struct buffer_head *bh, int flag); 2195 - #define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty 2196 - #define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty 2197 - 2198 - void do_balance(struct tree_balance *tb, struct item_head *ih, 2199 - const char *body, int flag); 2200 - void reiserfs_invalidate_buffer(struct tree_balance *tb, 2201 - struct buffer_head *bh); 2202 - 2203 - int get_left_neighbor_position(struct tree_balance *tb, int h); 2204 - int get_right_neighbor_position(struct tree_balance *tb, int h); 2205 - void replace_key(struct tree_balance *tb, struct buffer_head *, int, 2206 - struct buffer_head *, int); 2207 - void make_empty_node(struct buffer_info *); 2208 - struct buffer_head *get_FEB(struct tree_balance *); 2209 - 2210 - /* bitmap.c */ 2211 - 2212 - /* structure contains hints for block allocator, and it is a container for 2213 - * arguments, such as node, search path, transaction_handle, etc. */ 2214 - struct __reiserfs_blocknr_hint { 2215 - struct inode *inode; /* inode passed to allocator, if we allocate unf. nodes */ 2216 - sector_t block; /* file offset, in blocks */ 2217 - struct in_core_key key; 2218 - struct treepath *path; /* search path, used by allocator to deternine search_start by 2219 - * various ways */ 2220 - struct reiserfs_transaction_handle *th; /* transaction handle is needed to log super blocks and 2221 - * bitmap blocks changes */ 2222 - b_blocknr_t beg, end; 2223 - b_blocknr_t search_start; /* a field used to transfer search start value (block number) 2224 - * between different block allocator procedures 2225 - * (determine_search_start() and others) */ 2226 - int prealloc_size; /* is set in determine_prealloc_size() function, used by underlayed 2227 - * function that do actual allocation */ 2228 - 2229 - unsigned formatted_node:1; /* the allocator uses different polices for getting disk space for 2230 - * formatted/unformatted blocks with/without preallocation */ 2231 - unsigned preallocate:1; 2232 - }; 2233 - 2234 - typedef struct __reiserfs_blocknr_hint reiserfs_blocknr_hint_t; 2235 - 2236 - int reiserfs_parse_alloc_options(struct super_block *, char *); 2237 - void reiserfs_init_alloc_options(struct super_block *s); 2238 - 2239 - /* 2240 - * given a directory, this will tell you what packing locality 2241 - * to use for a new object underneat it. The locality is returned 2242 - * in disk byte order (le). 2243 - */ 2244 - __le32 reiserfs_choose_packing(struct inode *dir); 2245 - 2246 - int reiserfs_init_bitmap_cache(struct super_block *sb); 2247 - void reiserfs_free_bitmap_cache(struct super_block *sb); 2248 - void reiserfs_cache_bitmap_metadata(struct super_block *sb, struct buffer_head *bh, struct reiserfs_bitmap_info *info); 2249 - struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb, unsigned int bitmap); 2250 - int is_reusable(struct super_block *s, b_blocknr_t block, int bit_value); 2251 - void reiserfs_free_block(struct reiserfs_transaction_handle *th, struct inode *, 2252 - b_blocknr_t, int for_unformatted); 2253 - int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t *, int, 2254 - int); 2255 - static inline int reiserfs_new_form_blocknrs(struct tree_balance *tb, 2256 - b_blocknr_t * new_blocknrs, 2257 - int amount_needed) 2258 - { 2259 - reiserfs_blocknr_hint_t hint = { 2260 - .th = tb->transaction_handle, 2261 - .path = tb->tb_path, 2262 - .inode = NULL, 2263 - .key = tb->key, 2264 - .block = 0, 2265 - .formatted_node = 1 2266 - }; 2267 - return reiserfs_allocate_blocknrs(&hint, new_blocknrs, amount_needed, 2268 - 0); 2269 - } 2270 - 2271 - static inline int reiserfs_new_unf_blocknrs(struct reiserfs_transaction_handle 2272 - *th, struct inode *inode, 2273 - b_blocknr_t * new_blocknrs, 2274 - struct treepath *path, 2275 - sector_t block) 2276 - { 2277 - reiserfs_blocknr_hint_t hint = { 2278 - .th = th, 2279 - .path = path, 2280 - .inode = inode, 2281 - .block = block, 2282 - .formatted_node = 0, 2283 - .preallocate = 0 2284 - }; 2285 - return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); 2286 - } 2287 - 2288 - #ifdef REISERFS_PREALLOCATE 2289 - static inline int reiserfs_new_unf_blocknrs2(struct reiserfs_transaction_handle 2290 - *th, struct inode *inode, 2291 - b_blocknr_t * new_blocknrs, 2292 - struct treepath *path, 2293 - sector_t block) 2294 - { 2295 - reiserfs_blocknr_hint_t hint = { 2296 - .th = th, 2297 - .path = path, 2298 - .inode = inode, 2299 - .block = block, 2300 - .formatted_node = 0, 2301 - .preallocate = 1 2302 - }; 2303 - return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0); 2304 - } 2305 - 2306 - void reiserfs_discard_prealloc(struct reiserfs_transaction_handle *th, 2307 - struct inode *inode); 2308 - void reiserfs_discard_all_prealloc(struct reiserfs_transaction_handle *th); 2309 - #endif 2310 - 2311 - /* hashes.c */ 2312 - __u32 keyed_hash(const signed char *msg, int len); 2313 - __u32 yura_hash(const signed char *msg, int len); 2314 - __u32 r5_hash(const signed char *msg, int len); 2315 - 2316 - #define reiserfs_set_le_bit __set_bit_le 2317 - #define reiserfs_test_and_set_le_bit __test_and_set_bit_le 2318 - #define reiserfs_clear_le_bit __clear_bit_le 2319 - #define reiserfs_test_and_clear_le_bit __test_and_clear_bit_le 2320 - #define reiserfs_test_le_bit test_bit_le 2321 - #define reiserfs_find_next_zero_le_bit find_next_zero_bit_le 2322 - 2323 - /* sometimes reiserfs_truncate may require to allocate few new blocks 2324 - to perform indirect2direct conversion. People probably used to 2325 - think, that truncate should work without problems on a filesystem 2326 - without free disk space. They may complain that they can not 2327 - truncate due to lack of free disk space. This spare space allows us 2328 - to not worry about it. 500 is probably too much, but it should be 2329 - absolutely safe */ 2330 - #define SPARE_SPACE 500 2331 - 2332 - /* prototypes from ioctl.c */ 2333 - long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg); 2334 - long reiserfs_compat_ioctl(struct file *filp, 2335 - unsigned int cmd, unsigned long arg); 2336 - int reiserfs_unpack(struct inode *inode, struct file *filp); 2337 - 2338 - #endif /* __KERNEL__ */ 2339 45 2340 46 #endif /* _LINUX_REISER_FS_H */