This source file includes following definitions.
- __reiserfs_is_journal_aborted
- reiserfs_lock_check_recursive
- reiserfs_mutex_lock_safe
- reiserfs_mutex_lock_nested_safe
- reiserfs_down_read_safe
- reiserfs_cond_resched
- REISERFS_I
- REISERFS_SB
- reiserfs_bmap_count
- bmap_would_wrap
- offset_v2_k_type
- set_offset_v2_k_type
- offset_v2_k_offset
- set_offset_v2_k_offset
- uniqueness2type
- type2uniqueness
- le_key_k_offset
- le_ih_k_offset
- le_key_k_type
- le_ih_k_type
- set_le_key_k_offset
- add_le_key_k_offset
- add_le_ih_k_offset
- set_le_ih_k_offset
- set_le_key_k_type
- set_le_ih_k_type
- is_direntry_le_key
- is_direct_le_key
- is_indirect_le_key
- is_statdata_le_key
- is_direntry_le_ih
- is_direct_le_ih
- is_indirect_le_ih
- is_statdata_le_ih
- cpu_key_k_offset
- cpu_key_k_type
- set_cpu_key_k_offset
- set_cpu_key_k_type
- cpu_key_k_offset_dec
- reiserfs_node_data
- internal_key
- leaf_key
- ih_item_body
- item_body
- tp_item_head
- tp_item_body
- entry_length
- max_reiserfs_offset
- sb_from_tb
- sb_from_bi
- reiserfs_file_data_log
- reiserfs_transaction_running
- reiserfs_transaction_free_space
- le_key_version
- copy_key
- reiserfs_update_sd
- reiserfs_proc_info_init
- reiserfs_proc_info_done
- reiserfs_proc_info_global_init
- reiserfs_proc_info_global_done
- reiserfs_new_form_blocknrs
- reiserfs_new_unf_blocknrs
- reiserfs_new_unf_blocknrs2
1
2
3
4
5
6
7 #include <linux/reiserfs_fs.h>
8
9 #include <linux/slab.h>
10 #include <linux/interrupt.h>
11 #include <linux/sched.h>
12 #include <linux/bug.h>
13 #include <linux/workqueue.h>
14 #include <asm/unaligned.h>
15 #include <linux/bitops.h>
16 #include <linux/proc_fs.h>
17 #include <linux/buffer_head.h>
18
19
20 #define REISERFS_IOC32_UNPACK _IOW(0xCD, 1, int)
21 #define REISERFS_IOC32_GETFLAGS FS_IOC32_GETFLAGS
22 #define REISERFS_IOC32_SETFLAGS FS_IOC32_SETFLAGS
23 #define REISERFS_IOC32_GETVERSION FS_IOC32_GETVERSION
24 #define REISERFS_IOC32_SETVERSION FS_IOC32_SETVERSION
25
26 struct reiserfs_journal_list;
27
28
29 typedef enum {
30
31
32
33
34 i_item_key_version_mask = 0x0001,
35
36
37
38
39
40 i_stat_data_version_mask = 0x0002,
41
42
43 i_pack_on_close_mask = 0x0004,
44
45
46 i_nopack_mask = 0x0008,
47
48
49
50
51
52
53 i_link_saved_unlink_mask = 0x0010,
54 i_link_saved_truncate_mask = 0x0020,
55
56 i_has_xattr_dir = 0x0040,
57 i_data_log = 0x0080,
58 } reiserfs_inode_flags;
59
60 struct reiserfs_inode_info {
61 __u32 i_key[4];
62
63
64
65
66
67 __u32 i_flags;
68
69
70 __u32 i_first_direct_byte;
71
72
73 __u32 i_attrs;
74
75
76 int i_prealloc_block;
77 int i_prealloc_count;
78
79
80 struct list_head i_prealloc_list;
81
82
83
84
85
86 unsigned new_packing_locality:1;
87
88
89
90
91
92
93 unsigned int i_trans_id;
94
95 struct reiserfs_journal_list *i_jl;
96 atomic_t openers;
97 struct mutex tailpack;
98 #ifdef CONFIG_REISERFS_FS_XATTR
99 struct rw_semaphore i_xattr_sem;
100 #endif
101 #ifdef CONFIG_QUOTA
102 struct dquot *i_dquot[MAXQUOTAS];
103 #endif
104
105 struct inode vfs_inode;
106 };
107
108 typedef enum {
109 reiserfs_attrs_cleared = 0x00000001,
110 } reiserfs_super_block_flags;
111
112
113
114
115
116 #define sb_block_count(sbp) (le32_to_cpu((sbp)->s_v1.s_block_count))
117 #define set_sb_block_count(sbp,v) ((sbp)->s_v1.s_block_count = cpu_to_le32(v))
118 #define sb_free_blocks(sbp) (le32_to_cpu((sbp)->s_v1.s_free_blocks))
119 #define set_sb_free_blocks(sbp,v) ((sbp)->s_v1.s_free_blocks = cpu_to_le32(v))
120 #define sb_root_block(sbp) (le32_to_cpu((sbp)->s_v1.s_root_block))
121 #define set_sb_root_block(sbp,v) ((sbp)->s_v1.s_root_block = cpu_to_le32(v))
122
123 #define sb_jp_journal_1st_block(sbp) \
124 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_1st_block))
125 #define set_sb_jp_journal_1st_block(sbp,v) \
126 ((sbp)->s_v1.s_journal.jp_journal_1st_block = cpu_to_le32(v))
127 #define sb_jp_journal_dev(sbp) \
128 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_dev))
129 #define set_sb_jp_journal_dev(sbp,v) \
130 ((sbp)->s_v1.s_journal.jp_journal_dev = cpu_to_le32(v))
131 #define sb_jp_journal_size(sbp) \
132 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_size))
133 #define set_sb_jp_journal_size(sbp,v) \
134 ((sbp)->s_v1.s_journal.jp_journal_size = cpu_to_le32(v))
135 #define sb_jp_journal_trans_max(sbp) \
136 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_trans_max))
137 #define set_sb_jp_journal_trans_max(sbp,v) \
138 ((sbp)->s_v1.s_journal.jp_journal_trans_max = cpu_to_le32(v))
139 #define sb_jp_journal_magic(sbp) \
140 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_magic))
141 #define set_sb_jp_journal_magic(sbp,v) \
142 ((sbp)->s_v1.s_journal.jp_journal_magic = cpu_to_le32(v))
143 #define sb_jp_journal_max_batch(sbp) \
144 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_batch))
145 #define set_sb_jp_journal_max_batch(sbp,v) \
146 ((sbp)->s_v1.s_journal.jp_journal_max_batch = cpu_to_le32(v))
147 #define sb_jp_jourmal_max_commit_age(sbp) \
148 (le32_to_cpu((sbp)->s_v1.s_journal.jp_journal_max_commit_age))
149 #define set_sb_jp_journal_max_commit_age(sbp,v) \
150 ((sbp)->s_v1.s_journal.jp_journal_max_commit_age = cpu_to_le32(v))
151
152 #define sb_blocksize(sbp) (le16_to_cpu((sbp)->s_v1.s_blocksize))
153 #define set_sb_blocksize(sbp,v) ((sbp)->s_v1.s_blocksize = cpu_to_le16(v))
154 #define sb_oid_maxsize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_maxsize))
155 #define set_sb_oid_maxsize(sbp,v) ((sbp)->s_v1.s_oid_maxsize = cpu_to_le16(v))
156 #define sb_oid_cursize(sbp) (le16_to_cpu((sbp)->s_v1.s_oid_cursize))
157 #define set_sb_oid_cursize(sbp,v) ((sbp)->s_v1.s_oid_cursize = cpu_to_le16(v))
158 #define sb_umount_state(sbp) (le16_to_cpu((sbp)->s_v1.s_umount_state))
159 #define set_sb_umount_state(sbp,v) ((sbp)->s_v1.s_umount_state = cpu_to_le16(v))
160 #define sb_fs_state(sbp) (le16_to_cpu((sbp)->s_v1.s_fs_state))
161 #define set_sb_fs_state(sbp,v) ((sbp)->s_v1.s_fs_state = cpu_to_le16(v))
162 #define sb_hash_function_code(sbp) \
163 (le32_to_cpu((sbp)->s_v1.s_hash_function_code))
164 #define set_sb_hash_function_code(sbp,v) \
165 ((sbp)->s_v1.s_hash_function_code = cpu_to_le32(v))
166 #define sb_tree_height(sbp) (le16_to_cpu((sbp)->s_v1.s_tree_height))
167 #define set_sb_tree_height(sbp,v) ((sbp)->s_v1.s_tree_height = cpu_to_le16(v))
168 #define sb_bmap_nr(sbp) (le16_to_cpu((sbp)->s_v1.s_bmap_nr))
169 #define set_sb_bmap_nr(sbp,v) ((sbp)->s_v1.s_bmap_nr = cpu_to_le16(v))
170 #define sb_version(sbp) (le16_to_cpu((sbp)->s_v1.s_version))
171 #define set_sb_version(sbp,v) ((sbp)->s_v1.s_version = cpu_to_le16(v))
172
173 #define sb_mnt_count(sbp) (le16_to_cpu((sbp)->s_mnt_count))
174 #define set_sb_mnt_count(sbp, v) ((sbp)->s_mnt_count = cpu_to_le16(v))
175
176 #define sb_reserved_for_journal(sbp) \
177 (le16_to_cpu((sbp)->s_v1.s_reserved_for_journal))
178 #define set_sb_reserved_for_journal(sbp,v) \
179 ((sbp)->s_v1.s_reserved_for_journal = cpu_to_le16(v))
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209 #define JOURNAL_BLOCK_SIZE 4096
210 #define JOURNAL_MAX_CNODE 1500
211 #define JOURNAL_HASH_SIZE 8192
212
213
214 #define JOURNAL_NUM_BITMAPS 5
215
216
217
218
219
220
221
222
223
224
225
226 struct reiserfs_journal_cnode {
227 struct buffer_head *bh;
228 struct super_block *sb;
229
230
231 __u32 blocknr;
232
233 unsigned long state;
234
235
236 struct reiserfs_journal_list *jlist;
237
238 struct reiserfs_journal_cnode *next;
239 struct reiserfs_journal_cnode *prev;
240 struct reiserfs_journal_cnode *hprev;
241 struct reiserfs_journal_cnode *hnext;
242 };
243
244 struct reiserfs_bitmap_node {
245 int id;
246 char *data;
247 struct list_head list;
248 };
249
250 struct reiserfs_list_bitmap {
251 struct reiserfs_journal_list *journal_list;
252 struct reiserfs_bitmap_node **bitmaps;
253 };
254
255
256
257
258
259
260
261
262 struct reiserfs_journal_list {
263 unsigned long j_start;
264 unsigned long j_state;
265 unsigned long j_len;
266 atomic_t j_nonzerolen;
267 atomic_t j_commit_left;
268
269
270 atomic_t j_older_commits_done;
271
272 struct mutex j_commit_mutex;
273 unsigned int j_trans_id;
274 time64_t j_timestamp;
275 struct reiserfs_list_bitmap *j_list_bitmap;
276 struct buffer_head *j_commit_bh;
277 struct reiserfs_journal_cnode *j_realblock;
278 struct reiserfs_journal_cnode *j_freedlist;
279
280 struct list_head j_list;
281
282
283
284
285
286 struct list_head j_working_list;
287
288
289 struct list_head j_tail_bh_list;
290
291
292 struct list_head j_bh_list;
293 int j_refcount;
294 };
295
296 struct reiserfs_journal {
297 struct buffer_head **j_ap_blocks;
298
299 struct reiserfs_journal_cnode *j_last;
300
301
302 struct reiserfs_journal_cnode *j_first;
303
304 struct block_device *j_dev_bd;
305 fmode_t j_dev_mode;
306
307
308 int j_1st_reserved_block;
309
310 unsigned long j_state;
311 unsigned int j_trans_id;
312 unsigned long j_mount_id;
313
314
315 unsigned long j_start;
316 unsigned long j_len;
317
318
319 unsigned long j_len_alloc;
320
321 atomic_t j_wcount;
322
323
324 unsigned long j_bcount;
325
326
327 unsigned long j_first_unflushed_offset;
328
329
330 unsigned j_last_flush_trans_id;
331
332 struct buffer_head *j_header_bh;
333
334 time64_t j_trans_start_time;
335 struct mutex j_mutex;
336 struct mutex j_flush_mutex;
337
338
339 wait_queue_head_t j_join_wait;
340
341 atomic_t j_jlock;
342 int j_list_bitmap_index;
343
344
345 int j_must_wait;
346
347
348 int j_next_full_flush;
349
350
351 int j_next_async_flush;
352
353 int j_cnode_used;
354 int j_cnode_free;
355
356
357 unsigned int j_trans_max;
358
359
360 unsigned int j_max_batch;
361
362
363 unsigned int j_max_commit_age;
364
365
366 unsigned int j_max_trans_age;
367
368
369 unsigned int j_default_max_commit_age;
370
371 struct reiserfs_journal_cnode *j_cnode_free_list;
372
373
374 struct reiserfs_journal_cnode *j_cnode_free_orig;
375
376 struct reiserfs_journal_list *j_current_jl;
377 int j_free_bitmap_nodes;
378 int j_used_bitmap_nodes;
379
380 int j_num_lists;
381 int j_num_work_lists;
382
383
384 unsigned int j_last_flush_id;
385
386
387 unsigned int j_last_commit_id;
388
389 struct list_head j_bitmap_nodes;
390 struct list_head j_dirty_buffers;
391 spinlock_t j_dirty_buffers_lock;
392
393
394 struct list_head j_journal_list;
395
396
397 struct list_head j_working_list;
398
399
400 struct reiserfs_journal_cnode *j_hash_table[JOURNAL_HASH_SIZE];
401
402
403 struct reiserfs_journal_cnode *j_list_hash_table[JOURNAL_HASH_SIZE];
404
405
406 struct reiserfs_list_bitmap j_list_bitmap[JOURNAL_NUM_BITMAPS];
407
408
409 struct list_head j_prealloc_list;
410 int j_persistent_trans;
411 unsigned long j_max_trans_size;
412 unsigned long j_max_batch_size;
413
414 int j_errno;
415
416
417 struct delayed_work j_work;
418 struct super_block *j_work_sb;
419 atomic_t j_async_throttle;
420 };
421
422 enum journal_state_bits {
423 J_WRITERS_BLOCKED = 1,
424 J_WRITERS_QUEUED,
425 J_ABORTED,
426 };
427
428
429 #define JOURNAL_DESC_MAGIC "ReIsErLB"
430
431 typedef __u32(*hashf_t) (const signed char *, int);
432
433 struct reiserfs_bitmap_info {
434 __u32 free_count;
435 };
436
437 struct proc_dir_entry;
438
439 #if defined( CONFIG_PROC_FS ) && defined( CONFIG_REISERFS_PROC_INFO )
440 typedef unsigned long int stat_cnt_t;
441 typedef struct reiserfs_proc_info_data {
442 spinlock_t lock;
443 int exiting;
444 int max_hash_collisions;
445
446 stat_cnt_t breads;
447 stat_cnt_t bread_miss;
448 stat_cnt_t search_by_key;
449 stat_cnt_t search_by_key_fs_changed;
450 stat_cnt_t search_by_key_restarted;
451
452 stat_cnt_t insert_item_restarted;
453 stat_cnt_t paste_into_item_restarted;
454 stat_cnt_t cut_from_item_restarted;
455 stat_cnt_t delete_solid_item_restarted;
456 stat_cnt_t delete_item_restarted;
457
458 stat_cnt_t leaked_oid;
459 stat_cnt_t leaves_removable;
460
461
462
463
464
465 stat_cnt_t balance_at[5];
466
467 stat_cnt_t sbk_read_at[5];
468 stat_cnt_t sbk_fs_changed[5];
469 stat_cnt_t sbk_restarted[5];
470 stat_cnt_t items_at[5];
471 stat_cnt_t free_at[5];
472 stat_cnt_t can_node_be_removed[5];
473 long int lnum[5];
474 long int rnum[5];
475 long int lbytes[5];
476 long int rbytes[5];
477 stat_cnt_t get_neighbors[5];
478 stat_cnt_t get_neighbors_restart[5];
479 stat_cnt_t need_l_neighbor[5];
480 stat_cnt_t need_r_neighbor[5];
481
482 stat_cnt_t free_block;
483 struct __scan_bitmap_stats {
484 stat_cnt_t call;
485 stat_cnt_t wait;
486 stat_cnt_t bmap;
487 stat_cnt_t retry;
488 stat_cnt_t in_journal_hint;
489 stat_cnt_t in_journal_nohint;
490 stat_cnt_t stolen;
491 } scan_bitmap;
492 struct __journal_stats {
493 stat_cnt_t in_journal;
494 stat_cnt_t in_journal_bitmap;
495 stat_cnt_t in_journal_reusable;
496 stat_cnt_t lock_journal;
497 stat_cnt_t lock_journal_wait;
498 stat_cnt_t journal_being;
499 stat_cnt_t journal_relock_writers;
500 stat_cnt_t journal_relock_wcount;
501 stat_cnt_t mark_dirty;
502 stat_cnt_t mark_dirty_already;
503 stat_cnt_t mark_dirty_notjournal;
504 stat_cnt_t restore_prepared;
505 stat_cnt_t prepare;
506 stat_cnt_t prepare_retry;
507 } journal;
508 } reiserfs_proc_info_data_t;
509 #else
510 typedef struct reiserfs_proc_info_data {
511 } reiserfs_proc_info_data_t;
512 #endif
513
514
515 #define REISERFS_MAXQUOTAS 2
516
517
518 struct reiserfs_sb_info {
519
520 struct buffer_head *s_sbh;
521
522
523 struct reiserfs_super_block *s_rs;
524 struct reiserfs_bitmap_info *s_ap_bitmap;
525
526
527 struct reiserfs_journal *s_journal;
528
529 unsigned short s_mount_state;
530
531
532 struct mutex lock;
533
534
535 struct task_struct *lock_owner;
536
537
538 int lock_depth;
539
540 struct workqueue_struct *commit_wq;
541
542
543 void (*end_io_handler) (struct buffer_head *, int);
544
545
546
547
548
549 hashf_t s_hash_function;
550
551
552 unsigned long s_mount_opt;
553
554
555 struct {
556
557 unsigned long bits;
558
559
560
561
562
563 unsigned long large_file_size;
564
565 int border;
566
567
568
569
570
571 int preallocmin;
572
573
574
575
576
577
578 int preallocsize;
579 } s_alloc_options;
580
581
582 wait_queue_head_t s_wait;
583
584 atomic_t s_generation_counter;
585
586
587 unsigned long s_properties;
588
589
590 int s_disk_reads;
591 int s_disk_writes;
592 int s_fix_nodes;
593 int s_do_balance;
594 int s_unneeded_left_neighbor;
595 int s_good_search_by_key_reada;
596 int s_bmaps;
597 int s_bmaps_without_search;
598 int s_direct2indirect;
599 int s_indirect2direct;
600
601
602
603
604
605
606 int s_is_unlinked_ok;
607
608 reiserfs_proc_info_data_t s_proc_info_data;
609 struct proc_dir_entry *procdir;
610
611
612 int reserved_blocks;
613
614
615
616 spinlock_t bitmap_lock;
617 struct dentry *priv_root;
618 struct dentry *xattr_root;
619 int j_errno;
620
621 int work_queued;
622 struct delayed_work old_work;
623 spinlock_t old_work_lock;
624
625 #ifdef CONFIG_QUOTA
626 char *s_qf_names[REISERFS_MAXQUOTAS];
627 int s_jquota_fmt;
628 #endif
629 char *s_jdev;
630 #ifdef CONFIG_REISERFS_CHECK
631
632
633
634
635
636
637
638 struct tree_balance *cur_tb;
639 #endif
640 };
641
642
643 #define REISERFS_3_5 0
644 #define REISERFS_3_6 1
645 #define REISERFS_OLD_FORMAT 2
646
647
648 enum reiserfs_mount_options {
649
650 REISERFS_LARGETAIL,
651
652
653
654
655 REISERFS_SMALLTAIL,
656
657
658 REPLAYONLY,
659
660
661
662
663
664
665 REISERFS_CONVERT,
666
667
668
669
670
671
672
673
674
675
676
677 FORCE_TEA_HASH,
678 FORCE_RUPASOV_HASH,
679 FORCE_R5_HASH,
680 FORCE_HASH_DETECT,
681
682 REISERFS_DATA_LOG,
683 REISERFS_DATA_ORDERED,
684 REISERFS_DATA_WRITEBACK,
685
686
687
688
689
690
691
692 REISERFS_NO_BORDER,
693 REISERFS_NO_UNHASHED_RELOCATION,
694 REISERFS_HASHED_RELOCATION,
695 REISERFS_ATTRS,
696 REISERFS_XATTRS_USER,
697 REISERFS_POSIXACL,
698 REISERFS_EXPOSE_PRIVROOT,
699 REISERFS_BARRIER_NONE,
700 REISERFS_BARRIER_FLUSH,
701
702
703 REISERFS_ERROR_PANIC,
704 REISERFS_ERROR_RO,
705 REISERFS_ERROR_CONTINUE,
706
707 REISERFS_USRQUOTA,
708 REISERFS_GRPQUOTA,
709
710 REISERFS_TEST1,
711 REISERFS_TEST2,
712 REISERFS_TEST3,
713 REISERFS_TEST4,
714 REISERFS_UNSUPPORTED_OPT,
715 };
716
717 #define reiserfs_r5_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_R5_HASH))
718 #define reiserfs_rupasov_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_RUPASOV_HASH))
719 #define reiserfs_tea_hash(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_TEA_HASH))
720 #define reiserfs_hash_detect(s) (REISERFS_SB(s)->s_mount_opt & (1 << FORCE_HASH_DETECT))
721 #define reiserfs_no_border(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_BORDER))
722 #define reiserfs_no_unhashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_NO_UNHASHED_RELOCATION))
723 #define reiserfs_hashed_relocation(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_HASHED_RELOCATION))
724 #define reiserfs_test4(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_TEST4))
725
726 #define have_large_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_LARGETAIL))
727 #define have_small_tails(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_SMALLTAIL))
728 #define replay_only(s) (REISERFS_SB(s)->s_mount_opt & (1 << REPLAYONLY))
729 #define reiserfs_attrs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ATTRS))
730 #define old_format_only(s) (REISERFS_SB(s)->s_properties & (1 << REISERFS_3_5))
731 #define convert_reiserfs(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_CONVERT))
732 #define reiserfs_data_log(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_LOG))
733 #define reiserfs_data_ordered(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_ORDERED))
734 #define reiserfs_data_writeback(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_DATA_WRITEBACK))
735 #define reiserfs_xattrs_user(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_XATTRS_USER))
736 #define reiserfs_posixacl(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_POSIXACL))
737 #define reiserfs_expose_privroot(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_EXPOSE_PRIVROOT))
738 #define reiserfs_xattrs_optional(s) (reiserfs_xattrs_user(s) || reiserfs_posixacl(s))
739 #define reiserfs_barrier_none(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_NONE))
740 #define reiserfs_barrier_flush(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_BARRIER_FLUSH))
741
742 #define reiserfs_error_panic(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_PANIC))
743 #define reiserfs_error_ro(s) (REISERFS_SB(s)->s_mount_opt & (1 << REISERFS_ERROR_RO))
744
745 void reiserfs_file_buffer(struct buffer_head *bh, int list);
746 extern struct file_system_type reiserfs_fs_type;
747 int reiserfs_resize(struct super_block *, unsigned long);
748
749 #define CARRY_ON 0
750 #define SCHEDULE_OCCURRED 1
751
752 #define SB_BUFFER_WITH_SB(s) (REISERFS_SB(s)->s_sbh)
753 #define SB_JOURNAL(s) (REISERFS_SB(s)->s_journal)
754 #define SB_JOURNAL_1st_RESERVED_BLOCK(s) (SB_JOURNAL(s)->j_1st_reserved_block)
755 #define SB_JOURNAL_LEN_FREE(s) (SB_JOURNAL(s)->j_journal_len_free)
756 #define SB_AP_BITMAP(s) (REISERFS_SB(s)->s_ap_bitmap)
757
758 #define SB_DISK_JOURNAL_HEAD(s) (SB_JOURNAL(s)->j_header_bh->)
759
760 #define reiserfs_is_journal_aborted(journal) (unlikely (__reiserfs_is_journal_aborted (journal)))
761 static inline int __reiserfs_is_journal_aborted(struct reiserfs_journal
762 *journal)
763 {
764 return test_bit(J_ABORTED, &journal->j_state);
765 }
766
767
768
769
770
771
772 void reiserfs_write_lock(struct super_block *s);
773 void reiserfs_write_unlock(struct super_block *s);
774 int __must_check reiserfs_write_unlock_nested(struct super_block *s);
775 void reiserfs_write_lock_nested(struct super_block *s, int depth);
776
777 #ifdef CONFIG_REISERFS_CHECK
778 void reiserfs_lock_check_recursive(struct super_block *s);
779 #else
780 static inline void reiserfs_lock_check_recursive(struct super_block *s) { }
781 #endif
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810 static inline void reiserfs_mutex_lock_safe(struct mutex *m,
811 struct super_block *s)
812 {
813 int depth;
814
815 depth = reiserfs_write_unlock_nested(s);
816 mutex_lock(m);
817 reiserfs_write_lock_nested(s, depth);
818 }
819
820 static inline void
821 reiserfs_mutex_lock_nested_safe(struct mutex *m, unsigned int subclass,
822 struct super_block *s)
823 {
824 int depth;
825
826 depth = reiserfs_write_unlock_nested(s);
827 mutex_lock_nested(m, subclass);
828 reiserfs_write_lock_nested(s, depth);
829 }
830
831 static inline void
832 reiserfs_down_read_safe(struct rw_semaphore *sem, struct super_block *s)
833 {
834 int depth;
835 depth = reiserfs_write_unlock_nested(s);
836 down_read(sem);
837 reiserfs_write_lock_nested(s, depth);
838 }
839
840
841
842
843
844 static inline void reiserfs_cond_resched(struct super_block *s)
845 {
846 if (need_resched()) {
847 int depth;
848
849 depth = reiserfs_write_unlock_nested(s);
850 schedule();
851 reiserfs_write_lock_nested(s, depth);
852 }
853 }
854
855 struct fid;
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880 #define USE_INODE_GENERATION_COUNTER
881
882 #define REISERFS_PREALLOCATE
883 #define DISPLACE_NEW_PACKING_LOCALITIES
884 #define PREALLOCATION_SIZE 9
885
886
887 #define _ROUND_UP(x,n) (((x)+(n)-1u) & ~((n)-1u))
888
889
890
891
892
893
894 #define ROUND_UP(x) _ROUND_UP(x,8LL)
895
896
897
898
899
900 #define REISERFS_DEBUG_CODE 5
901
902 void __reiserfs_warning(struct super_block *s, const char *id,
903 const char *func, const char *fmt, ...);
904 #define reiserfs_warning(s, id, fmt, args...) \
905 __reiserfs_warning(s, id, __func__, fmt, ##args)
906
907
908
909 #define __RASSERT(cond, scond, format, args...) \
910 do { \
911 if (!(cond)) \
912 reiserfs_panic(NULL, "assertion failure", "(" #cond ") at " \
913 __FILE__ ":%i:%s: " format "\n", \
914 __LINE__, __func__ , ##args); \
915 } while (0)
916
917 #define RASSERT(cond, format, args...) __RASSERT(cond, #cond, format, ##args)
918
919 #if defined( CONFIG_REISERFS_CHECK )
920 #define RFALSE(cond, format, args...) __RASSERT(!(cond), "!(" #cond ")", format, ##args)
921 #else
922 #define RFALSE( cond, format, args... ) do {;} while( 0 )
923 #endif
924
925 #define CONSTF __attribute_const__
926
927
928
929
930
931
932
933
934
935
936
937
938
939 #define UNSET_HASH 0
940 #define TEA_HASH 1
941 #define YURA_HASH 2
942 #define R5_HASH 3
943 #define DEFAULT_HASH R5_HASH
944
945 struct journal_params {
946
947 __le32 jp_journal_1st_block;
948
949
950 __le32 jp_journal_dev;
951
952
953 __le32 jp_journal_size;
954
955
956 __le32 jp_journal_trans_max;
957
958
959
960
961
962 __le32 jp_journal_magic;
963
964
965 __le32 jp_journal_max_batch;
966
967
968 __le32 jp_journal_max_commit_age;
969
970
971 __le32 jp_journal_max_trans_age;
972 };
973
974
975 struct reiserfs_super_block_v1 {
976 __le32 s_block_count;
977 __le32 s_free_blocks;
978 __le32 s_root_block;
979 struct journal_params s_journal;
980 __le16 s_blocksize;
981
982
983 __le16 s_oid_maxsize;
984 __le16 s_oid_cursize;
985
986
987 __le16 s_umount_state;
988
989
990
991
992
993 char s_magic[10];
994
995
996
997
998
999 __le16 s_fs_state;
1000
1001
1002
1003
1004 __le32 s_hash_function_code;
1005 __le16 s_tree_height;
1006
1007
1008
1009
1010
1011 __le16 s_bmap_nr;
1012
1013
1014
1015
1016 __le16 s_version;
1017
1018
1019
1020
1021
1022 __le16 s_reserved_for_journal;
1023 } __attribute__ ((__packed__));
1024
1025 #define SB_SIZE_V1 (sizeof(struct reiserfs_super_block_v1))
1026
1027
1028 struct reiserfs_super_block {
1029 struct reiserfs_super_block_v1 s_v1;
1030 __le32 s_inode_generation;
1031
1032
1033 __le32 s_flags;
1034
1035 unsigned char s_uuid[16];
1036 unsigned char s_label[16];
1037 __le16 s_mnt_count;
1038 __le16 s_max_mnt_count;
1039 __le32 s_lastcheck;
1040 __le32 s_check_interval;
1041
1042
1043
1044
1045 char s_unused[76];
1046 } __attribute__ ((__packed__));
1047
1048 #define SB_SIZE (sizeof(struct reiserfs_super_block))
1049
1050 #define REISERFS_VERSION_1 0
1051 #define REISERFS_VERSION_2 2
1052
1053
1054 #define SB_DISK_SUPER_BLOCK(s) (REISERFS_SB(s)->s_rs)
1055 #define SB_V1_DISK_SUPER_BLOCK(s) (&(SB_DISK_SUPER_BLOCK(s)->s_v1))
1056 #define SB_BLOCKSIZE(s) \
1057 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_blocksize))
1058 #define SB_BLOCK_COUNT(s) \
1059 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_block_count))
1060 #define SB_FREE_BLOCKS(s) \
1061 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks))
1062 #define SB_REISERFS_MAGIC(s) \
1063 (SB_V1_DISK_SUPER_BLOCK(s)->s_magic)
1064 #define SB_ROOT_BLOCK(s) \
1065 le32_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_root_block))
1066 #define SB_TREE_HEIGHT(s) \
1067 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height))
1068 #define SB_REISERFS_STATE(s) \
1069 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state))
1070 #define SB_VERSION(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_version))
1071 #define SB_BMAP_NR(s) le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr))
1072
1073 #define PUT_SB_BLOCK_COUNT(s, val) \
1074 do { SB_V1_DISK_SUPER_BLOCK(s)->s_block_count = cpu_to_le32(val); } while (0)
1075 #define PUT_SB_FREE_BLOCKS(s, val) \
1076 do { SB_V1_DISK_SUPER_BLOCK(s)->s_free_blocks = cpu_to_le32(val); } while (0)
1077 #define PUT_SB_ROOT_BLOCK(s, val) \
1078 do { SB_V1_DISK_SUPER_BLOCK(s)->s_root_block = cpu_to_le32(val); } while (0)
1079 #define PUT_SB_TREE_HEIGHT(s, val) \
1080 do { SB_V1_DISK_SUPER_BLOCK(s)->s_tree_height = cpu_to_le16(val); } while (0)
1081 #define PUT_SB_REISERFS_STATE(s, val) \
1082 do { SB_V1_DISK_SUPER_BLOCK(s)->s_umount_state = cpu_to_le16(val); } while (0)
1083 #define PUT_SB_VERSION(s, val) \
1084 do { SB_V1_DISK_SUPER_BLOCK(s)->s_version = cpu_to_le16(val); } while (0)
1085 #define PUT_SB_BMAP_NR(s, val) \
1086 do { SB_V1_DISK_SUPER_BLOCK(s)->s_bmap_nr = cpu_to_le16 (val); } while (0)
1087
1088 #define SB_ONDISK_JP(s) (&SB_V1_DISK_SUPER_BLOCK(s)->s_journal)
1089 #define SB_ONDISK_JOURNAL_SIZE(s) \
1090 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_size))
1091 #define SB_ONDISK_JOURNAL_1st_BLOCK(s) \
1092 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_1st_block))
1093 #define SB_ONDISK_JOURNAL_DEVICE(s) \
1094 le32_to_cpu ((SB_ONDISK_JP(s)->jp_journal_dev))
1095 #define SB_ONDISK_RESERVED_FOR_JOURNAL(s) \
1096 le16_to_cpu ((SB_V1_DISK_SUPER_BLOCK(s)->s_reserved_for_journal))
1097
1098 #define is_block_in_log_or_reserved_area(s, block) \
1099 block >= SB_JOURNAL_1st_RESERVED_BLOCK(s) \
1100 && block < SB_JOURNAL_1st_RESERVED_BLOCK(s) + \
1101 ((!is_reiserfs_jr(SB_DISK_SUPER_BLOCK(s)) ? \
1102 SB_ONDISK_JOURNAL_SIZE(s) + 1 : SB_ONDISK_RESERVED_FOR_JOURNAL(s)))
1103
1104 int is_reiserfs_3_5(struct reiserfs_super_block *rs);
1105 int is_reiserfs_3_6(struct reiserfs_super_block *rs);
1106 int is_reiserfs_jr(struct reiserfs_super_block *rs);
1107
1108
1109
1110
1111
1112
1113
1114
1115 #define REISERFS_DISK_OFFSET_IN_BYTES (64 * 1024)
1116 #define REISERFS_FIRST_BLOCK unused_define
1117 #define REISERFS_JOURNAL_OFFSET_IN_BYTES REISERFS_DISK_OFFSET_IN_BYTES
1118
1119
1120 #define REISERFS_OLD_DISK_OFFSET_IN_BYTES (8 * 1024)
1121
1122
1123 #define CARRY_ON 0
1124 #define REPEAT_SEARCH -1
1125 #define IO_ERROR -2
1126 #define NO_DISK_SPACE -3
1127 #define NO_BALANCING_NEEDED (-4)
1128 #define NO_MORE_UNUSED_CONTIGUOUS_BLOCKS (-5)
1129 #define QUOTA_EXCEEDED -6
1130
1131 typedef __u32 b_blocknr_t;
1132 typedef __le32 unp_t;
1133
1134 struct unfm_nodeinfo {
1135 unp_t unfm_nodenum;
1136 unsigned short unfm_freespace;
1137 };
1138
1139
1140 #define KEY_FORMAT_3_5 0
1141 #define KEY_FORMAT_3_6 1
1142
1143
1144 #define STAT_DATA_V1 0
1145 #define STAT_DATA_V2 1
1146
1147 static inline struct reiserfs_inode_info *REISERFS_I(const struct inode *inode)
1148 {
1149 return container_of(inode, struct reiserfs_inode_info, vfs_inode);
1150 }
1151
1152 static inline struct reiserfs_sb_info *REISERFS_SB(const struct super_block *sb)
1153 {
1154 return sb->s_fs_info;
1155 }
1156
1157
1158
1159
1160
1161 static inline __u32 reiserfs_bmap_count(struct super_block *sb)
1162 {
1163 return (SB_BLOCK_COUNT(sb) - 1) / (sb->s_blocksize * 8) + 1;
1164 }
1165
1166 static inline int bmap_would_wrap(unsigned bmap_nr)
1167 {
1168 return bmap_nr > ((1LL << 16) - 1);
1169 }
1170
1171 extern const struct xattr_handler *reiserfs_xattr_handlers[];
1172
1173
1174
1175
1176
1177 #define get_inode_item_key_version( inode ) \
1178 ((REISERFS_I(inode)->i_flags & i_item_key_version_mask) ? KEY_FORMAT_3_6 : KEY_FORMAT_3_5)
1179
1180 #define set_inode_item_key_version( inode, version ) \
1181 ({ if((version)==KEY_FORMAT_3_6) \
1182 REISERFS_I(inode)->i_flags |= i_item_key_version_mask; \
1183 else \
1184 REISERFS_I(inode)->i_flags &= ~i_item_key_version_mask; })
1185
1186 #define get_inode_sd_version(inode) \
1187 ((REISERFS_I(inode)->i_flags & i_stat_data_version_mask) ? STAT_DATA_V2 : STAT_DATA_V1)
1188
1189 #define set_inode_sd_version(inode, version) \
1190 ({ if((version)==STAT_DATA_V2) \
1191 REISERFS_I(inode)->i_flags |= i_stat_data_version_mask; \
1192 else \
1193 REISERFS_I(inode)->i_flags &= ~i_stat_data_version_mask; })
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207 #define STORE_TAIL_IN_UNFM_S1(n_file_size,n_tail_size,n_block_size) \
1208 (\
1209 (!(n_tail_size)) || \
1210 (((n_tail_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) || \
1211 ( (n_file_size) >= (n_block_size) * 4 ) || \
1212 ( ( (n_file_size) >= (n_block_size) * 3 ) && \
1213 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/4) ) || \
1214 ( ( (n_file_size) >= (n_block_size) * 2 ) && \
1215 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size))/2) ) || \
1216 ( ( (n_file_size) >= (n_block_size) ) && \
1217 ( (n_tail_size) >= (MAX_DIRECT_ITEM_LEN(n_block_size) * 3)/4) ) ) \
1218 )
1219
1220
1221
1222
1223
1224
1225
1226 #define STORE_TAIL_IN_UNFM_S2(n_file_size,n_tail_size,n_block_size) \
1227 (\
1228 (!(n_tail_size)) || \
1229 (((n_file_size) > MAX_DIRECT_ITEM_LEN(n_block_size)) ) \
1230 )
1231
1232
1233
1234
1235 #define REISERFS_VALID_FS 1
1236 #define REISERFS_ERROR_FS 2
1237
1238
1239
1240
1241 #define TYPE_STAT_DATA 0
1242 #define TYPE_INDIRECT 1
1243 #define TYPE_DIRECT 2
1244 #define TYPE_DIRENTRY 3
1245 #define TYPE_MAXTYPE 3
1246 #define TYPE_ANY 15
1247
1248
1249
1250
1251
1252
1253 struct offset_v1 {
1254 __le32 k_offset;
1255 __le32 k_uniqueness;
1256 } __attribute__ ((__packed__));
1257
1258 struct offset_v2 {
1259 __le64 v;
1260 } __attribute__ ((__packed__));
1261
1262 static inline __u16 offset_v2_k_type(const struct offset_v2 *v2)
1263 {
1264 __u8 type = le64_to_cpu(v2->v) >> 60;
1265 return (type <= TYPE_MAXTYPE) ? type : TYPE_ANY;
1266 }
1267
1268 static inline void set_offset_v2_k_type(struct offset_v2 *v2, int type)
1269 {
1270 v2->v =
1271 (v2->v & cpu_to_le64(~0ULL >> 4)) | cpu_to_le64((__u64) type << 60);
1272 }
1273
1274 static inline loff_t offset_v2_k_offset(const struct offset_v2 *v2)
1275 {
1276 return le64_to_cpu(v2->v) & (~0ULL >> 4);
1277 }
1278
1279 static inline void set_offset_v2_k_offset(struct offset_v2 *v2, loff_t offset)
1280 {
1281 offset &= (~0ULL >> 4);
1282 v2->v = (v2->v & cpu_to_le64(15ULL << 60)) | cpu_to_le64(offset);
1283 }
1284
1285
1286
1287
1288
1289 struct reiserfs_key {
1290
1291 __le32 k_dir_id;
1292
1293 __le32 k_objectid;
1294 union {
1295 struct offset_v1 k_offset_v1;
1296 struct offset_v2 k_offset_v2;
1297 } __attribute__ ((__packed__)) u;
1298 } __attribute__ ((__packed__));
1299
1300 struct in_core_key {
1301
1302 __u32 k_dir_id;
1303 __u32 k_objectid;
1304 __u64 k_offset;
1305 __u8 k_type;
1306 };
1307
1308 struct cpu_key {
1309 struct in_core_key on_disk_key;
1310 int version;
1311
1312 int key_length;
1313 };
1314
1315
1316
1317
1318
1319
1320
1321 #define REISERFS_FULL_KEY_LEN 4
1322 #define REISERFS_SHORT_KEY_LEN 2
1323
1324
1325 #define FIRST_GREATER 1
1326 #define SECOND_GREATER -1
1327 #define KEYS_IDENTICAL 0
1328 #define KEY_FOUND 1
1329 #define KEY_NOT_FOUND 0
1330
1331 #define KEY_SIZE (sizeof(struct reiserfs_key))
1332
1333
1334 #define ITEM_FOUND 1
1335 #define ITEM_NOT_FOUND 0
1336 #define ENTRY_FOUND 1
1337 #define ENTRY_NOT_FOUND 0
1338 #define DIRECTORY_NOT_FOUND -1
1339 #define REGULAR_FILE_FOUND -2
1340 #define DIRECTORY_FOUND -3
1341 #define BYTE_FOUND 1
1342 #define BYTE_NOT_FOUND 0
1343 #define FILE_NOT_FOUND -1
1344
1345 #define POSITION_FOUND 1
1346 #define POSITION_NOT_FOUND 0
1347
1348
1349 #define NAME_FOUND 1
1350 #define NAME_NOT_FOUND 0
1351 #define GOTO_PREVIOUS_ITEM 2
1352 #define NAME_FOUND_INVISIBLE 3
1353
1354
1355
1356
1357
1358
1359
1360
1361 struct item_head {
1362
1363
1364
1365
1366 struct reiserfs_key ih_key;
1367 union {
1368
1369
1370
1371
1372
1373
1374
1375
1376 __le16 ih_free_space_reserved;
1377
1378
1379
1380
1381
1382 __le16 ih_entry_count;
1383 } __attribute__ ((__packed__)) u;
1384 __le16 ih_item_len;
1385
1386
1387 __le16 ih_item_location;
1388
1389
1390
1391
1392
1393 __le16 ih_version;
1394 } __attribute__ ((__packed__));
1395
1396 #define IH_SIZE (sizeof(struct item_head))
1397
1398 #define ih_free_space(ih) le16_to_cpu((ih)->u.ih_free_space_reserved)
1399 #define ih_version(ih) le16_to_cpu((ih)->ih_version)
1400 #define ih_entry_count(ih) le16_to_cpu((ih)->u.ih_entry_count)
1401 #define ih_location(ih) le16_to_cpu((ih)->ih_item_location)
1402 #define ih_item_len(ih) le16_to_cpu((ih)->ih_item_len)
1403
1404 #define put_ih_free_space(ih, val) do { (ih)->u.ih_free_space_reserved = cpu_to_le16(val); } while(0)
1405 #define put_ih_version(ih, val) do { (ih)->ih_version = cpu_to_le16(val); } while (0)
1406 #define put_ih_entry_count(ih, val) do { (ih)->u.ih_entry_count = cpu_to_le16(val); } while (0)
1407 #define put_ih_location(ih, val) do { (ih)->ih_item_location = cpu_to_le16(val); } while (0)
1408 #define put_ih_item_len(ih, val) do { (ih)->ih_item_len = cpu_to_le16(val); } while (0)
1409
1410 #define unreachable_item(ih) (ih_version(ih) & (1 << 15))
1411
1412 #define get_ih_free_space(ih) (ih_version (ih) == KEY_FORMAT_3_6 ? 0 : ih_free_space (ih))
1413 #define set_ih_free_space(ih,val) put_ih_free_space((ih), ((ih_version(ih) == KEY_FORMAT_3_6) ? 0 : (val)))
1414
1415
1416
1417
1418
1419
1420
1421
1422 #define get_block_num(p, i) get_unaligned_le32((p) + (i))
1423 #define put_block_num(p, i, v) put_unaligned_le32((v), (p) + (i))
1424
1425
1426 #define V1_SD_UNIQUENESS 0
1427 #define V1_INDIRECT_UNIQUENESS 0xfffffffe
1428 #define V1_DIRECT_UNIQUENESS 0xffffffff
1429 #define V1_DIRENTRY_UNIQUENESS 500
1430 #define V1_ANY_UNIQUENESS 555
1431
1432
1433 static inline int uniqueness2type(__u32 uniqueness) CONSTF;
1434 static inline int uniqueness2type(__u32 uniqueness)
1435 {
1436 switch ((int)uniqueness) {
1437 case V1_SD_UNIQUENESS:
1438 return TYPE_STAT_DATA;
1439 case V1_INDIRECT_UNIQUENESS:
1440 return TYPE_INDIRECT;
1441 case V1_DIRECT_UNIQUENESS:
1442 return TYPE_DIRECT;
1443 case V1_DIRENTRY_UNIQUENESS:
1444 return TYPE_DIRENTRY;
1445 case V1_ANY_UNIQUENESS:
1446 default:
1447 return TYPE_ANY;
1448 }
1449 }
1450
1451 static inline __u32 type2uniqueness(int type) CONSTF;
1452 static inline __u32 type2uniqueness(int type)
1453 {
1454 switch (type) {
1455 case TYPE_STAT_DATA:
1456 return V1_SD_UNIQUENESS;
1457 case TYPE_INDIRECT:
1458 return V1_INDIRECT_UNIQUENESS;
1459 case TYPE_DIRECT:
1460 return V1_DIRECT_UNIQUENESS;
1461 case TYPE_DIRENTRY:
1462 return V1_DIRENTRY_UNIQUENESS;
1463 case TYPE_ANY:
1464 default:
1465 return V1_ANY_UNIQUENESS;
1466 }
1467 }
1468
1469
1470
1471
1472
1473
1474 static inline loff_t le_key_k_offset(int version,
1475 const struct reiserfs_key *key)
1476 {
1477 return (version == KEY_FORMAT_3_5) ?
1478 le32_to_cpu(key->u.k_offset_v1.k_offset) :
1479 offset_v2_k_offset(&(key->u.k_offset_v2));
1480 }
1481
1482 static inline loff_t le_ih_k_offset(const struct item_head *ih)
1483 {
1484 return le_key_k_offset(ih_version(ih), &(ih->ih_key));
1485 }
1486
1487 static inline loff_t le_key_k_type(int version, const struct reiserfs_key *key)
1488 {
1489 if (version == KEY_FORMAT_3_5) {
1490 loff_t val = le32_to_cpu(key->u.k_offset_v1.k_uniqueness);
1491 return uniqueness2type(val);
1492 } else
1493 return offset_v2_k_type(&(key->u.k_offset_v2));
1494 }
1495
1496 static inline loff_t le_ih_k_type(const struct item_head *ih)
1497 {
1498 return le_key_k_type(ih_version(ih), &(ih->ih_key));
1499 }
1500
1501 static inline void set_le_key_k_offset(int version, struct reiserfs_key *key,
1502 loff_t offset)
1503 {
1504 if (version == KEY_FORMAT_3_5)
1505 key->u.k_offset_v1.k_offset = cpu_to_le32(offset);
1506 else
1507 set_offset_v2_k_offset(&key->u.k_offset_v2, offset);
1508 }
1509
1510 static inline void add_le_key_k_offset(int version, struct reiserfs_key *key,
1511 loff_t offset)
1512 {
1513 set_le_key_k_offset(version, key,
1514 le_key_k_offset(version, key) + offset);
1515 }
1516
1517 static inline void add_le_ih_k_offset(struct item_head *ih, loff_t offset)
1518 {
1519 add_le_key_k_offset(ih_version(ih), &(ih->ih_key), offset);
1520 }
1521
1522 static inline void set_le_ih_k_offset(struct item_head *ih, loff_t offset)
1523 {
1524 set_le_key_k_offset(ih_version(ih), &(ih->ih_key), offset);
1525 }
1526
1527 static inline void set_le_key_k_type(int version, struct reiserfs_key *key,
1528 int type)
1529 {
1530 if (version == KEY_FORMAT_3_5) {
1531 type = type2uniqueness(type);
1532 key->u.k_offset_v1.k_uniqueness = cpu_to_le32(type);
1533 } else
1534 set_offset_v2_k_type(&key->u.k_offset_v2, type);
1535 }
1536
1537 static inline void set_le_ih_k_type(struct item_head *ih, int type)
1538 {
1539 set_le_key_k_type(ih_version(ih), &(ih->ih_key), type);
1540 }
1541
1542 static inline int is_direntry_le_key(int version, struct reiserfs_key *key)
1543 {
1544 return le_key_k_type(version, key) == TYPE_DIRENTRY;
1545 }
1546
1547 static inline int is_direct_le_key(int version, struct reiserfs_key *key)
1548 {
1549 return le_key_k_type(version, key) == TYPE_DIRECT;
1550 }
1551
1552 static inline int is_indirect_le_key(int version, struct reiserfs_key *key)
1553 {
1554 return le_key_k_type(version, key) == TYPE_INDIRECT;
1555 }
1556
1557 static inline int is_statdata_le_key(int version, struct reiserfs_key *key)
1558 {
1559 return le_key_k_type(version, key) == TYPE_STAT_DATA;
1560 }
1561
1562
1563 static inline int is_direntry_le_ih(struct item_head *ih)
1564 {
1565 return is_direntry_le_key(ih_version(ih), &ih->ih_key);
1566 }
1567
1568 static inline int is_direct_le_ih(struct item_head *ih)
1569 {
1570 return is_direct_le_key(ih_version(ih), &ih->ih_key);
1571 }
1572
1573 static inline int is_indirect_le_ih(struct item_head *ih)
1574 {
1575 return is_indirect_le_key(ih_version(ih), &ih->ih_key);
1576 }
1577
1578 static inline int is_statdata_le_ih(struct item_head *ih)
1579 {
1580 return is_statdata_le_key(ih_version(ih), &ih->ih_key);
1581 }
1582
1583
1584 static inline loff_t cpu_key_k_offset(const struct cpu_key *key)
1585 {
1586 return key->on_disk_key.k_offset;
1587 }
1588
1589 static inline loff_t cpu_key_k_type(const struct cpu_key *key)
1590 {
1591 return key->on_disk_key.k_type;
1592 }
1593
1594 static inline void set_cpu_key_k_offset(struct cpu_key *key, loff_t offset)
1595 {
1596 key->on_disk_key.k_offset = offset;
1597 }
1598
1599 static inline void set_cpu_key_k_type(struct cpu_key *key, int type)
1600 {
1601 key->on_disk_key.k_type = type;
1602 }
1603
1604 static inline void cpu_key_k_offset_dec(struct cpu_key *key)
1605 {
1606 key->on_disk_key.k_offset--;
1607 }
1608
1609 #define is_direntry_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRENTRY)
1610 #define is_direct_cpu_key(key) (cpu_key_k_type (key) == TYPE_DIRECT)
1611 #define is_indirect_cpu_key(key) (cpu_key_k_type (key) == TYPE_INDIRECT)
1612 #define is_statdata_cpu_key(key) (cpu_key_k_type (key) == TYPE_STAT_DATA)
1613
1614
1615 #define is_direntry_cpu_ih(ih) (is_direntry_cpu_key (&((ih)->ih_key)))
1616 #define is_direct_cpu_ih(ih) (is_direct_cpu_key (&((ih)->ih_key)))
1617 #define is_indirect_cpu_ih(ih) (is_indirect_cpu_key (&((ih)->ih_key)))
1618 #define is_statdata_cpu_ih(ih) (is_statdata_cpu_key (&((ih)->ih_key)))
1619
1620 #define I_K_KEY_IN_ITEM(ih, key, n_blocksize) \
1621 (!COMP_SHORT_KEYS(ih, key) && \
1622 I_OFF_BYTE_IN_ITEM(ih, k_offset(key), n_blocksize))
1623
1624
1625 #define MAX_ITEM_LEN(block_size) (block_size - BLKH_SIZE - IH_SIZE)
1626 #define MIN_ITEM_LEN 1
1627
1628
1629 #define REISERFS_ROOT_OBJECTID 2
1630 #define REISERFS_ROOT_PARENT_OBJECTID 1
1631
1632 extern struct reiserfs_key root_key;
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647 struct block_head {
1648 __le16 blk_level;
1649 __le16 blk_nr_item;
1650 __le16 blk_free_space;
1651 __le16 blk_reserved;
1652
1653
1654
1655 struct reiserfs_key blk_right_delim_key;
1656 };
1657
1658 #define BLKH_SIZE (sizeof(struct block_head))
1659 #define blkh_level(p_blkh) (le16_to_cpu((p_blkh)->blk_level))
1660 #define blkh_nr_item(p_blkh) (le16_to_cpu((p_blkh)->blk_nr_item))
1661 #define blkh_free_space(p_blkh) (le16_to_cpu((p_blkh)->blk_free_space))
1662 #define blkh_reserved(p_blkh) (le16_to_cpu((p_blkh)->blk_reserved))
1663 #define set_blkh_level(p_blkh,val) ((p_blkh)->blk_level = cpu_to_le16(val))
1664 #define set_blkh_nr_item(p_blkh,val) ((p_blkh)->blk_nr_item = cpu_to_le16(val))
1665 #define set_blkh_free_space(p_blkh,val) ((p_blkh)->blk_free_space = cpu_to_le16(val))
1666 #define set_blkh_reserved(p_blkh,val) ((p_blkh)->blk_reserved = cpu_to_le16(val))
1667 #define blkh_right_delim_key(p_blkh) ((p_blkh)->blk_right_delim_key)
1668 #define set_blkh_right_delim_key(p_blkh,val) ((p_blkh)->blk_right_delim_key = val)
1669
1670
1671
1672
1673
1674
1675
1676 #define FREE_LEVEL 0
1677
1678 #define DISK_LEAF_NODE_LEVEL 1
1679
1680
1681
1682
1683
1684 #define B_BLK_HEAD(bh) ((struct block_head *)((bh)->b_data))
1685
1686 #define B_NR_ITEMS(bh) (blkh_nr_item(B_BLK_HEAD(bh)))
1687 #define B_LEVEL(bh) (blkh_level(B_BLK_HEAD(bh)))
1688 #define B_FREE_SPACE(bh) (blkh_free_space(B_BLK_HEAD(bh)))
1689
1690 #define PUT_B_NR_ITEMS(bh, val) do { set_blkh_nr_item(B_BLK_HEAD(bh), val); } while (0)
1691 #define PUT_B_LEVEL(bh, val) do { set_blkh_level(B_BLK_HEAD(bh), val); } while (0)
1692 #define PUT_B_FREE_SPACE(bh, val) do { set_blkh_free_space(B_BLK_HEAD(bh), val); } while (0)
1693
1694
1695 #define B_PRIGHT_DELIM_KEY(bh) (&(blk_right_delim_key(B_BLK_HEAD(bh))))
1696
1697
1698 #define B_IS_ITEMS_LEVEL(bh) (B_LEVEL(bh) == DISK_LEAF_NODE_LEVEL)
1699
1700
1701 #define B_IS_KEYS_LEVEL(bh) (B_LEVEL(bh) > DISK_LEAF_NODE_LEVEL \
1702 && B_LEVEL(bh) <= MAX_HEIGHT)
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712 struct stat_data_v1 {
1713 __le16 sd_mode;
1714 __le16 sd_nlink;
1715 __le16 sd_uid;
1716 __le16 sd_gid;
1717 __le32 sd_size;
1718 __le32 sd_atime;
1719 __le32 sd_mtime;
1720
1721
1722
1723
1724
1725 __le32 sd_ctime;
1726 union {
1727 __le32 sd_rdev;
1728 __le32 sd_blocks;
1729 } __attribute__ ((__packed__)) u;
1730
1731
1732
1733
1734
1735
1736
1737
1738 __le32 sd_first_direct_byte;
1739 } __attribute__ ((__packed__));
1740
1741 #define SD_V1_SIZE (sizeof(struct stat_data_v1))
1742 #define stat_data_v1(ih) (ih_version (ih) == KEY_FORMAT_3_5)
1743 #define sd_v1_mode(sdp) (le16_to_cpu((sdp)->sd_mode))
1744 #define set_sd_v1_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v))
1745 #define sd_v1_nlink(sdp) (le16_to_cpu((sdp)->sd_nlink))
1746 #define set_sd_v1_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le16(v))
1747 #define sd_v1_uid(sdp) (le16_to_cpu((sdp)->sd_uid))
1748 #define set_sd_v1_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le16(v))
1749 #define sd_v1_gid(sdp) (le16_to_cpu((sdp)->sd_gid))
1750 #define set_sd_v1_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le16(v))
1751 #define sd_v1_size(sdp) (le32_to_cpu((sdp)->sd_size))
1752 #define set_sd_v1_size(sdp,v) ((sdp)->sd_size = cpu_to_le32(v))
1753 #define sd_v1_atime(sdp) (le32_to_cpu((sdp)->sd_atime))
1754 #define set_sd_v1_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v))
1755 #define sd_v1_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime))
1756 #define set_sd_v1_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v))
1757 #define sd_v1_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime))
1758 #define set_sd_v1_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v))
1759 #define sd_v1_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev))
1760 #define set_sd_v1_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v))
1761 #define sd_v1_blocks(sdp) (le32_to_cpu((sdp)->u.sd_blocks))
1762 #define set_sd_v1_blocks(sdp,v) ((sdp)->u.sd_blocks = cpu_to_le32(v))
1763 #define sd_v1_first_direct_byte(sdp) \
1764 (le32_to_cpu((sdp)->sd_first_direct_byte))
1765 #define set_sd_v1_first_direct_byte(sdp,v) \
1766 ((sdp)->sd_first_direct_byte = cpu_to_le32(v))
1767
1768
1769
1770
1771
1772
1773
1774 #define REISERFS_IMMUTABLE_FL FS_IMMUTABLE_FL
1775 #define REISERFS_APPEND_FL FS_APPEND_FL
1776 #define REISERFS_SYNC_FL FS_SYNC_FL
1777 #define REISERFS_NOATIME_FL FS_NOATIME_FL
1778 #define REISERFS_NODUMP_FL FS_NODUMP_FL
1779 #define REISERFS_SECRM_FL FS_SECRM_FL
1780 #define REISERFS_UNRM_FL FS_UNRM_FL
1781 #define REISERFS_COMPR_FL FS_COMPR_FL
1782 #define REISERFS_NOTAIL_FL FS_NOTAIL_FL
1783
1784
1785 #define REISERFS_INHERIT_MASK ( REISERFS_IMMUTABLE_FL | \
1786 REISERFS_SYNC_FL | \
1787 REISERFS_NOATIME_FL | \
1788 REISERFS_NODUMP_FL | \
1789 REISERFS_SECRM_FL | \
1790 REISERFS_COMPR_FL | \
1791 REISERFS_NOTAIL_FL )
1792
1793
1794
1795
1796
1797 struct stat_data {
1798 __le16 sd_mode;
1799 __le16 sd_attrs;
1800 __le32 sd_nlink;
1801 __le64 sd_size;
1802 __le32 sd_uid;
1803 __le32 sd_gid;
1804 __le32 sd_atime;
1805 __le32 sd_mtime;
1806
1807
1808
1809
1810
1811 __le32 sd_ctime;
1812 __le32 sd_blocks;
1813 union {
1814 __le32 sd_rdev;
1815 __le32 sd_generation;
1816 } __attribute__ ((__packed__)) u;
1817 } __attribute__ ((__packed__));
1818
1819
1820 #define SD_SIZE (sizeof(struct stat_data))
1821 #define SD_V2_SIZE SD_SIZE
1822 #define stat_data_v2(ih) (ih_version (ih) == KEY_FORMAT_3_6)
1823 #define sd_v2_mode(sdp) (le16_to_cpu((sdp)->sd_mode))
1824 #define set_sd_v2_mode(sdp,v) ((sdp)->sd_mode = cpu_to_le16(v))
1825
1826
1827 #define sd_v2_nlink(sdp) (le32_to_cpu((sdp)->sd_nlink))
1828 #define set_sd_v2_nlink(sdp,v) ((sdp)->sd_nlink = cpu_to_le32(v))
1829 #define sd_v2_size(sdp) (le64_to_cpu((sdp)->sd_size))
1830 #define set_sd_v2_size(sdp,v) ((sdp)->sd_size = cpu_to_le64(v))
1831 #define sd_v2_uid(sdp) (le32_to_cpu((sdp)->sd_uid))
1832 #define set_sd_v2_uid(sdp,v) ((sdp)->sd_uid = cpu_to_le32(v))
1833 #define sd_v2_gid(sdp) (le32_to_cpu((sdp)->sd_gid))
1834 #define set_sd_v2_gid(sdp,v) ((sdp)->sd_gid = cpu_to_le32(v))
1835 #define sd_v2_atime(sdp) (le32_to_cpu((sdp)->sd_atime))
1836 #define set_sd_v2_atime(sdp,v) ((sdp)->sd_atime = cpu_to_le32(v))
1837 #define sd_v2_mtime(sdp) (le32_to_cpu((sdp)->sd_mtime))
1838 #define set_sd_v2_mtime(sdp,v) ((sdp)->sd_mtime = cpu_to_le32(v))
1839 #define sd_v2_ctime(sdp) (le32_to_cpu((sdp)->sd_ctime))
1840 #define set_sd_v2_ctime(sdp,v) ((sdp)->sd_ctime = cpu_to_le32(v))
1841 #define sd_v2_blocks(sdp) (le32_to_cpu((sdp)->sd_blocks))
1842 #define set_sd_v2_blocks(sdp,v) ((sdp)->sd_blocks = cpu_to_le32(v))
1843 #define sd_v2_rdev(sdp) (le32_to_cpu((sdp)->u.sd_rdev))
1844 #define set_sd_v2_rdev(sdp,v) ((sdp)->u.sd_rdev = cpu_to_le32(v))
1845 #define sd_v2_generation(sdp) (le32_to_cpu((sdp)->u.sd_generation))
1846 #define set_sd_v2_generation(sdp,v) ((sdp)->u.sd_generation = cpu_to_le32(v))
1847 #define sd_v2_attrs(sdp) (le16_to_cpu((sdp)->sd_attrs))
1848 #define set_sd_v2_attrs(sdp,v) ((sdp)->sd_attrs = cpu_to_le16(v))
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867 #define SD_OFFSET 0
1868 #define SD_UNIQUENESS 0
1869 #define DOT_OFFSET 1
1870 #define DOT_DOT_OFFSET 2
1871 #define DIRENTRY_UNIQUENESS 500
1872
1873 #define FIRST_ITEM_OFFSET 1
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887 struct reiserfs_de_head {
1888 __le32 deh_offset;
1889
1890
1891
1892
1893
1894 __le32 deh_dir_id;
1895
1896
1897 __le32 deh_objectid;
1898 __le16 deh_location;
1899
1900
1901
1902
1903
1904 __le16 deh_state;
1905 } __attribute__ ((__packed__));
1906 #define DEH_SIZE sizeof(struct reiserfs_de_head)
1907 #define deh_offset(p_deh) (le32_to_cpu((p_deh)->deh_offset))
1908 #define deh_dir_id(p_deh) (le32_to_cpu((p_deh)->deh_dir_id))
1909 #define deh_objectid(p_deh) (le32_to_cpu((p_deh)->deh_objectid))
1910 #define deh_location(p_deh) (le16_to_cpu((p_deh)->deh_location))
1911 #define deh_state(p_deh) (le16_to_cpu((p_deh)->deh_state))
1912
1913 #define put_deh_offset(p_deh,v) ((p_deh)->deh_offset = cpu_to_le32((v)))
1914 #define put_deh_dir_id(p_deh,v) ((p_deh)->deh_dir_id = cpu_to_le32((v)))
1915 #define put_deh_objectid(p_deh,v) ((p_deh)->deh_objectid = cpu_to_le32((v)))
1916 #define put_deh_location(p_deh,v) ((p_deh)->deh_location = cpu_to_le16((v)))
1917 #define put_deh_state(p_deh,v) ((p_deh)->deh_state = cpu_to_le16((v)))
1918
1919
1920 #define EMPTY_DIR_SIZE \
1921 (DEH_SIZE * 2 + ROUND_UP (sizeof(".") - 1) + ROUND_UP (sizeof("..") - 1))
1922
1923
1924 #define EMPTY_DIR_SIZE_V1 (DEH_SIZE * 2 + 3)
1925
1926 #define DEH_Statdata 0
1927 #define DEH_Visible 2
1928
1929
1930 #if BITS_PER_LONG == 64 || defined(__s390__) || defined(__hppa__)
1931 # define ADDR_UNALIGNED_BITS (3)
1932 #endif
1933
1934
1935
1936
1937
1938
1939 #ifdef ADDR_UNALIGNED_BITS
1940
1941 # define aligned_address(addr) ((void *)((long)(addr) & ~((1UL << ADDR_UNALIGNED_BITS) - 1)))
1942 # define unaligned_offset(addr) (((int)((long)(addr) & ((1 << ADDR_UNALIGNED_BITS) - 1))) << 3)
1943
1944 # define set_bit_unaligned(nr, addr) \
1945 __test_and_set_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1946 # define clear_bit_unaligned(nr, addr) \
1947 __test_and_clear_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1948 # define test_bit_unaligned(nr, addr) \
1949 test_bit_le((nr) + unaligned_offset(addr), aligned_address(addr))
1950
1951 #else
1952
1953 # define set_bit_unaligned(nr, addr) __test_and_set_bit_le(nr, addr)
1954 # define clear_bit_unaligned(nr, addr) __test_and_clear_bit_le(nr, addr)
1955 # define test_bit_unaligned(nr, addr) test_bit_le(nr, addr)
1956
1957 #endif
1958
1959 #define mark_de_with_sd(deh) set_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1960 #define mark_de_without_sd(deh) clear_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1961 #define mark_de_visible(deh) set_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1962 #define mark_de_hidden(deh) clear_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1963
1964 #define de_with_sd(deh) test_bit_unaligned (DEH_Statdata, &((deh)->deh_state))
1965 #define de_visible(deh) test_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1966 #define de_hidden(deh) !test_bit_unaligned (DEH_Visible, &((deh)->deh_state))
1967
1968 extern void make_empty_dir_item_v1(char *body, __le32 dirid, __le32 objid,
1969 __le32 par_dirid, __le32 par_objid);
1970 extern void make_empty_dir_item(char *body, __le32 dirid, __le32 objid,
1971 __le32 par_dirid, __le32 par_objid);
1972
1973
1974 #define REISERFS_MAX_NAME(block_size) 255
1975
1976
1977
1978
1979
1980
1981
1982
1983 struct reiserfs_dir_entry {
1984 struct buffer_head *de_bh;
1985 int de_item_num;
1986 struct item_head *de_ih;
1987 int de_entry_num;
1988 struct reiserfs_de_head *de_deh;
1989 int de_entrylen;
1990 int de_namelen;
1991 char *de_name;
1992 unsigned long *de_gen_number_bit_string;
1993
1994 __u32 de_dir_id;
1995 __u32 de_objectid;
1996
1997 struct cpu_key de_entry_key;
1998 };
1999
2000
2001
2002
2003
2004
2005
2006 #define B_I_DEH_ENTRY_FILE_NAME(bh, ih, deh) \
2007 (ih_item_body(bh, ih) + deh_location(deh))
2008
2009
2010 #define I_DEH_N_ENTRY_FILE_NAME_LENGTH(ih,deh,entry_num) \
2011 (I_DEH_N_ENTRY_LENGTH (ih, deh, entry_num) - (de_with_sd (deh) ? SD_SIZE : 0))
2012
2013
2014 #define GET_HASH_VALUE(offset) ((offset) & 0x7fffff80LL)
2015
2016 #define GET_GENERATION_NUMBER(offset) ((offset) & 0x7fLL)
2017 #define MAX_GENERATION_NUMBER 127
2018
2019 #define SET_GENERATION_NUMBER(offset,gen_number) (GET_HASH_VALUE(offset)|(gen_number))
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037 struct disk_child {
2038 __le32 dc_block_number;
2039 __le16 dc_size;
2040 __le16 dc_reserved;
2041 };
2042
2043 #define DC_SIZE (sizeof(struct disk_child))
2044 #define dc_block_number(dc_p) (le32_to_cpu((dc_p)->dc_block_number))
2045 #define dc_size(dc_p) (le16_to_cpu((dc_p)->dc_size))
2046 #define put_dc_block_number(dc_p, val) do { (dc_p)->dc_block_number = cpu_to_le32(val); } while(0)
2047 #define put_dc_size(dc_p, val) do { (dc_p)->dc_size = cpu_to_le16(val); } while(0)
2048
2049
2050 #define B_N_CHILD(bh, n_pos) ((struct disk_child *)\
2051 ((bh)->b_data + BLKH_SIZE + B_NR_ITEMS(bh) * KEY_SIZE + DC_SIZE * (n_pos)))
2052
2053
2054 #define B_N_CHILD_NUM(bh, n_pos) (dc_block_number(B_N_CHILD(bh, n_pos)))
2055 #define PUT_B_N_CHILD_NUM(bh, n_pos, val) \
2056 (put_dc_block_number(B_N_CHILD(bh, n_pos), val))
2057
2058
2059
2060 #define MAX_CHILD_SIZE(bh) ((int)( (bh)->b_size - BLKH_SIZE ))
2061
2062
2063 #define B_CHILD_SIZE(cur) (MAX_CHILD_SIZE(cur)-(B_FREE_SPACE(cur)))
2064
2065
2066 #define MAX_NR_KEY(bh) ( (MAX_CHILD_SIZE(bh)-DC_SIZE)/(KEY_SIZE+DC_SIZE) )
2067 #define MIN_NR_KEY(bh) (MAX_NR_KEY(bh)/2)
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086 struct path_element {
2087
2088 struct buffer_head *pe_buffer;
2089
2090 int pe_position;
2091 };
2092
2093
2094
2095
2096
2097 #define MAX_HEIGHT 5
2098
2099
2100 #define EXTENDED_MAX_HEIGHT 7
2101
2102
2103 #define FIRST_PATH_ELEMENT_OFFSET 2
2104
2105
2106 #define ILLEGAL_PATH_ELEMENT_OFFSET 1
2107
2108
2109 #define MAX_FEB_SIZE 6
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130 #define PATH_READA 0x1
2131 #define PATH_READA_BACK 0x2
2132
2133 struct treepath {
2134 int path_length;
2135 int reada;
2136
2137 struct path_element path_elements[EXTENDED_MAX_HEIGHT];
2138 int pos_in_item;
2139 };
2140
2141 #define pos_in_item(path) ((path)->pos_in_item)
2142
2143 #define INITIALIZE_PATH(var) \
2144 struct treepath var = {.path_length = ILLEGAL_PATH_ELEMENT_OFFSET, .reada = 0,}
2145
2146
2147 #define PATH_OFFSET_PELEMENT(path, n_offset) ((path)->path_elements + (n_offset))
2148
2149
2150 #define PATH_OFFSET_PBUFFER(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_buffer)
2151
2152
2153 #define PATH_OFFSET_POSITION(path, n_offset) (PATH_OFFSET_PELEMENT(path, n_offset)->pe_position)
2154
2155 #define PATH_PLAST_BUFFER(path) (PATH_OFFSET_PBUFFER((path), (path)->path_length))
2156
2157
2158
2159
2160
2161
2162 #define PATH_LAST_POSITION(path) (PATH_OFFSET_POSITION((path), (path)->path_length))
2163
2164
2165
2166
2167
2168
2169
2170 #define PATH_H_PBUFFER(path, h) \
2171 PATH_OFFSET_PBUFFER(path, path->path_length - (h))
2172
2173
2174 #define PATH_H_PPARENT(path, h) PATH_H_PBUFFER(path, (h) + 1)
2175
2176 #define PATH_H_POSITION(path, h) \
2177 PATH_OFFSET_POSITION(path, path->path_length - (h))
2178
2179
2180 #define PATH_H_B_ITEM_ORDER(path, h) PATH_H_POSITION(path, h + 1)
2181
2182 #define PATH_H_PATH_OFFSET(path, n_h) ((path)->path_length - (n_h))
2183
2184 static inline void *reiserfs_node_data(const struct buffer_head *bh)
2185 {
2186 return bh->b_data + sizeof(struct block_head);
2187 }
2188
2189
2190 static inline struct reiserfs_key *internal_key(struct buffer_head *bh,
2191 int item_num)
2192 {
2193 struct reiserfs_key *key = reiserfs_node_data(bh);
2194
2195 return &key[item_num];
2196 }
2197
2198
2199 static inline struct item_head *item_head(const struct buffer_head *bh,
2200 int item_num)
2201 {
2202 struct item_head *ih = reiserfs_node_data(bh);
2203
2204 return &ih[item_num];
2205 }
2206
2207
2208 static inline struct reiserfs_key *leaf_key(const struct buffer_head *bh,
2209 int item_num)
2210 {
2211 return &item_head(bh, item_num)->ih_key;
2212 }
2213
2214 static inline void *ih_item_body(const struct buffer_head *bh,
2215 const struct item_head *ih)
2216 {
2217 return bh->b_data + ih_location(ih);
2218 }
2219
2220
2221 static inline void *item_body(const struct buffer_head *bh, int item_num)
2222 {
2223 return ih_item_body(bh, item_head(bh, item_num));
2224 }
2225
2226 static inline struct item_head *tp_item_head(const struct treepath *path)
2227 {
2228 return item_head(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path));
2229 }
2230
2231 static inline void *tp_item_body(const struct treepath *path)
2232 {
2233 return item_body(PATH_PLAST_BUFFER(path), PATH_LAST_POSITION(path));
2234 }
2235
2236 #define get_last_bh(path) PATH_PLAST_BUFFER(path)
2237 #define get_item_pos(path) PATH_LAST_POSITION(path)
2238 #define item_moved(ih,path) comp_items(ih, path)
2239 #define path_changed(ih,path) comp_items (ih, path)
2240
2241
2242
2243 #define B_I_DEH(bh, ih) ((struct reiserfs_de_head *)(ih_item_body(bh, ih)))
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253 static inline int entry_length(const struct buffer_head *bh,
2254 const struct item_head *ih, int pos_in_item)
2255 {
2256 struct reiserfs_de_head *deh;
2257
2258 deh = B_I_DEH(bh, ih) + pos_in_item;
2259 if (pos_in_item)
2260 return deh_location(deh - 1) - deh_location(deh);
2261
2262 return ih_item_len(ih) - deh_location(deh);
2263 }
2264
2265
2266
2267
2268
2269
2270 #define UNFM_P_SIZE (sizeof(unp_t))
2271 #define UNFM_P_SHIFT 2
2272
2273
2274 #define INODE_PKEY(inode) ((struct reiserfs_key *)(REISERFS_I(inode)->i_key))
2275
2276 #define MAX_UL_INT 0xffffffff
2277 #define MAX_INT 0x7ffffff
2278 #define MAX_US_INT 0xffff
2279
2280
2281 static inline loff_t max_reiserfs_offset(struct inode *inode)
2282 {
2283 if (get_inode_item_key_version(inode) == KEY_FORMAT_3_5)
2284 return (loff_t) U32_MAX;
2285
2286 return (loff_t) ((~(__u64) 0) >> 4);
2287 }
2288
2289 #define MAX_KEY_OBJECTID MAX_UL_INT
2290
2291 #define MAX_B_NUM MAX_UL_INT
2292 #define MAX_FC_NUM MAX_US_INT
2293
2294
2295 #define REISERFS_LINK_MAX (MAX_US_INT - 1000)
2296
2297
2298
2299
2300
2301 #define REISERFS_KERNEL_MEM 0
2302 #define REISERFS_USER_MEM 1
2303
2304 #define fs_generation(s) (REISERFS_SB(s)->s_generation_counter)
2305 #define get_generation(s) atomic_read (&fs_generation(s))
2306 #define FILESYSTEM_CHANGED_TB(tb) (get_generation((tb)->tb_sb) != (tb)->fs_gen)
2307 #define __fs_changed(gen,s) (gen != get_generation (s))
2308 #define fs_changed(gen,s) \
2309 ({ \
2310 reiserfs_cond_resched(s); \
2311 __fs_changed(gen, s); \
2312 })
2313
2314
2315
2316
2317
2318 #define VI_TYPE_LEFT_MERGEABLE 1
2319 #define VI_TYPE_RIGHT_MERGEABLE 2
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336 struct virtual_item {
2337 int vi_index;
2338 unsigned short vi_type;
2339
2340
2341 unsigned short vi_item_len;
2342
2343 struct item_head *vi_ih;
2344 const char *vi_item;
2345 const void *vi_new_data;
2346 void *vi_uarea;
2347 };
2348
2349 struct virtual_node {
2350
2351 char *vn_free_ptr;
2352
2353 unsigned short vn_nr_item;
2354
2355
2356
2357
2358
2359 short vn_size;
2360
2361
2362 short vn_mode;
2363
2364 short vn_affected_item_num;
2365 short vn_pos_in_item;
2366
2367
2368 struct item_head *vn_ins_ih;
2369 const void *vn_data;
2370
2371
2372 struct virtual_item *vn_vi;
2373 };
2374
2375
2376 struct direntry_uarea {
2377 int flags;
2378 __u16 entry_count;
2379 __u16 entry_sizes[1];
2380 } __attribute__ ((__packed__));
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400 #define MAX_FREE_BLOCK 7
2401
2402
2403 #define MAX_AMOUNT_NEEDED 2
2404
2405
2406 struct tree_balance {
2407 int tb_mode;
2408 int need_balance_dirty;
2409 struct super_block *tb_sb;
2410 struct reiserfs_transaction_handle *transaction_handle;
2411 struct treepath *tb_path;
2412
2413
2414 struct buffer_head *L[MAX_HEIGHT];
2415
2416
2417 struct buffer_head *R[MAX_HEIGHT];
2418
2419
2420 struct buffer_head *FL[MAX_HEIGHT];
2421
2422
2423 struct buffer_head *FR[MAX_HEIGHT];
2424
2425 struct buffer_head *CFL[MAX_HEIGHT];
2426
2427
2428 struct buffer_head *CFR[MAX_HEIGHT];
2429
2430
2431
2432
2433
2434 struct buffer_head *FEB[MAX_FEB_SIZE];
2435 struct buffer_head *used[MAX_FEB_SIZE];
2436 struct buffer_head *thrown[MAX_FEB_SIZE];
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446 int lnum[MAX_HEIGHT];
2447
2448
2449 int rnum[MAX_HEIGHT];
2450
2451
2452
2453
2454
2455 int lkey[MAX_HEIGHT];
2456
2457
2458 int rkey[MAX_HEIGHT];
2459
2460
2461
2462
2463
2464 int insert_size[MAX_HEIGHT];
2465
2466
2467
2468
2469
2470
2471
2472 int blknum[MAX_HEIGHT];
2473
2474
2475
2476
2477 int cur_blknum;
2478
2479
2480 int s0num;
2481
2482
2483
2484
2485
2486
2487 int lbytes;
2488
2489
2490
2491
2492
2493
2494 int rbytes;
2495
2496
2497
2498
2499
2500
2501 int item_pos;
2502
2503
2504 struct buffer_head *S_new[2];
2505
2506
2507
2508
2509
2510 int snum[2];
2511
2512
2513
2514
2515
2516 int sbytes[2];
2517
2518 int pos_in_item;
2519 int zeroes_num;
2520
2521
2522
2523
2524
2525 struct buffer_head *buf_to_free[MAX_FREE_BLOCK];
2526
2527
2528
2529
2530
2531 char *vn_buf;
2532
2533 int vn_buf_size;
2534
2535
2536 struct virtual_node *tb_vn;
2537
2538
2539
2540
2541
2542 int fs_gen;
2543
2544 #ifdef DISPLACE_NEW_PACKING_LOCALITIES
2545
2546
2547
2548
2549 struct in_core_key key;
2550 #endif
2551 };
2552
2553
2554
2555
2556 #define M_INSERT 'i'
2557
2558
2559
2560
2561 #define M_PASTE 'p'
2562
2563 #define M_DELETE 'd'
2564
2565 #define M_CUT 'c'
2566
2567
2568 #define M_INTERNAL 'n'
2569
2570
2571
2572
2573
2574 #define M_SKIP_BALANCING 's'
2575 #define M_CONVERT 'v'
2576
2577
2578 #define LEAF_FROM_S_TO_L 0
2579 #define LEAF_FROM_S_TO_R 1
2580 #define LEAF_FROM_R_TO_L 2
2581 #define LEAF_FROM_L_TO_R 3
2582 #define LEAF_FROM_S_TO_SNEW 4
2583
2584 #define FIRST_TO_LAST 0
2585 #define LAST_TO_FIRST 1
2586
2587
2588
2589
2590
2591 struct buffer_info {
2592 struct tree_balance *tb;
2593 struct buffer_head *bi_bh;
2594 struct buffer_head *bi_parent;
2595 int bi_position;
2596 };
2597
2598 static inline struct super_block *sb_from_tb(struct tree_balance *tb)
2599 {
2600 return tb ? tb->tb_sb : NULL;
2601 }
2602
2603 static inline struct super_block *sb_from_bi(struct buffer_info *bi)
2604 {
2605 return bi ? sb_from_tb(bi->tb) : NULL;
2606 }
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628 struct item_operations {
2629 int (*bytes_number) (struct item_head * ih, int block_size);
2630 void (*decrement_key) (struct cpu_key *);
2631 int (*is_left_mergeable) (struct reiserfs_key * ih,
2632 unsigned long bsize);
2633 void (*print_item) (struct item_head *, char *item);
2634 void (*check_item) (struct item_head *, char *item);
2635
2636 int (*create_vi) (struct virtual_node * vn, struct virtual_item * vi,
2637 int is_affected, int insert_size);
2638 int (*check_left) (struct virtual_item * vi, int free,
2639 int start_skip, int end_skip);
2640 int (*check_right) (struct virtual_item * vi, int free);
2641 int (*part_size) (struct virtual_item * vi, int from, int to);
2642 int (*unit_num) (struct virtual_item * vi);
2643 void (*print_vi) (struct virtual_item * vi);
2644 };
2645
2646 extern struct item_operations *item_ops[TYPE_ANY + 1];
2647
2648 #define op_bytes_number(ih,bsize) item_ops[le_ih_k_type (ih)]->bytes_number (ih, bsize)
2649 #define op_is_left_mergeable(key,bsize) item_ops[le_key_k_type (le_key_version (key), key)]->is_left_mergeable (key, bsize)
2650 #define op_print_item(ih,item) item_ops[le_ih_k_type (ih)]->print_item (ih, item)
2651 #define op_check_item(ih,item) item_ops[le_ih_k_type (ih)]->check_item (ih, item)
2652 #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)
2653 #define op_check_left(vi,free,start_skip,end_skip) item_ops[(vi)->vi_index]->check_left (vi, free, start_skip, end_skip)
2654 #define op_check_right(vi,free) item_ops[(vi)->vi_index]->check_right (vi, free)
2655 #define op_part_size(vi,from,to) item_ops[(vi)->vi_index]->part_size (vi, from, to)
2656 #define op_unit_num(vi) item_ops[(vi)->vi_index]->unit_num (vi)
2657 #define op_print_vi(vi) item_ops[(vi)->vi_index]->print_vi (vi)
2658
2659 #define COMP_SHORT_KEYS comp_short_keys
2660
2661
2662 #define I_UNFM_NUM(ih) (ih_item_len(ih) / UNFM_P_SIZE)
2663
2664
2665
2666
2667
2668 #define I_POS_UNFM_SIZE(ih,pos,size) (((pos) == I_UNFM_NUM(ih) - 1 ) ? (size) - ih_free_space(ih) : (size))
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678 #define B_I_STAT_DATA(bh, ih) ( (struct stat_data * )((bh)->b_data + ih_location(ih)) )
2679
2680
2681 #define MAX_DIRECT_ITEM_LEN(size) ((size) - BLKH_SIZE - 2*IH_SIZE - SD_SIZE - UNFM_P_SIZE)
2682
2683
2684
2685
2686
2687
2688 #define B_I_POS_UNFM_POINTER(bh, ih, pos) \
2689 le32_to_cpu(*(((unp_t *)ih_item_body(bh, ih)) + (pos)))
2690 #define PUT_B_I_POS_UNFM_POINTER(bh, ih, pos, val) \
2691 (*(((unp_t *)ih_item_body(bh, ih)) + (pos)) = cpu_to_le32(val))
2692
2693 struct reiserfs_iget_args {
2694 __u32 objectid;
2695 __u32 dirid;
2696 };
2697
2698
2699
2700
2701
2702 #define get_journal_desc_magic(bh) (bh->b_data + bh->b_size - 12)
2703
2704 #define journal_trans_half(blocksize) \
2705 ((blocksize - sizeof (struct reiserfs_journal_desc) + sizeof (__u32) - 12) / sizeof (__u32))
2706
2707
2708
2709
2710 struct reiserfs_journal_desc {
2711 __le32 j_trans_id;
2712
2713
2714 __le32 j_len;
2715
2716 __le32 j_mount_id;
2717 __le32 j_realblock[1];
2718 };
2719
2720 #define get_desc_trans_id(d) le32_to_cpu((d)->j_trans_id)
2721 #define get_desc_trans_len(d) le32_to_cpu((d)->j_len)
2722 #define get_desc_mount_id(d) le32_to_cpu((d)->j_mount_id)
2723
2724 #define set_desc_trans_id(d,val) do { (d)->j_trans_id = cpu_to_le32 (val); } while (0)
2725 #define set_desc_trans_len(d,val) do { (d)->j_len = cpu_to_le32 (val); } while (0)
2726 #define set_desc_mount_id(d,val) do { (d)->j_mount_id = cpu_to_le32 (val); } while (0)
2727
2728
2729 struct reiserfs_journal_commit {
2730 __le32 j_trans_id;
2731 __le32 j_len;
2732 __le32 j_realblock[1];
2733 };
2734
2735 #define get_commit_trans_id(c) le32_to_cpu((c)->j_trans_id)
2736 #define get_commit_trans_len(c) le32_to_cpu((c)->j_len)
2737 #define get_commit_mount_id(c) le32_to_cpu((c)->j_mount_id)
2738
2739 #define set_commit_trans_id(c,val) do { (c)->j_trans_id = cpu_to_le32 (val); } while (0)
2740 #define set_commit_trans_len(c,val) do { (c)->j_len = cpu_to_le32 (val); } while (0)
2741
2742
2743
2744
2745
2746
2747
2748 struct reiserfs_journal_header {
2749
2750 __le32 j_last_flush_trans_id;
2751
2752
2753 __le32 j_first_unflushed_offset;
2754
2755 __le32 j_mount_id;
2756 struct journal_params jh_journal;
2757 };
2758
2759
2760 #define JOURNAL_BLOCK_COUNT 8192
2761
2762
2763 #define JOURNAL_TRANS_MAX_DEFAULT 1024
2764 #define JOURNAL_TRANS_MIN_DEFAULT 256
2765
2766
2767
2768
2769
2770 #define JOURNAL_MAX_BATCH_DEFAULT 900
2771 #define JOURNAL_MIN_RATIO 2
2772 #define JOURNAL_MAX_COMMIT_AGE 30
2773 #define JOURNAL_MAX_TRANS_AGE 30
2774 #define JOURNAL_PER_BALANCE_CNT (3 * (MAX_HEIGHT-2) + 9)
2775 #define JOURNAL_BLOCKS_PER_OBJECT(sb) (JOURNAL_PER_BALANCE_CNT * 3 + \
2776 2 * (REISERFS_QUOTA_INIT_BLOCKS(sb) + \
2777 REISERFS_QUOTA_TRANS_BLOCKS(sb)))
2778
2779 #ifdef CONFIG_QUOTA
2780 #define REISERFS_QUOTA_OPTS ((1 << REISERFS_USRQUOTA) | (1 << REISERFS_GRPQUOTA))
2781
2782 #define REISERFS_QUOTA_TRANS_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? 2 : 0)
2783
2784 #define REISERFS_QUOTA_INIT_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \
2785 (DQUOT_INIT_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_INIT_REWRITE+1) : 0)
2786
2787 #define REISERFS_QUOTA_DEL_BLOCKS(s) (REISERFS_SB(s)->s_mount_opt & REISERFS_QUOTA_OPTS ? \
2788 (DQUOT_DEL_ALLOC*(JOURNAL_PER_BALANCE_CNT+2)+DQUOT_DEL_REWRITE+1) : 0)
2789 #else
2790 #define REISERFS_QUOTA_TRANS_BLOCKS(s) 0
2791 #define REISERFS_QUOTA_INIT_BLOCKS(s) 0
2792 #define REISERFS_QUOTA_DEL_BLOCKS(s) 0
2793 #endif
2794
2795
2796
2797
2798
2799
2800
2801
2802 #define REISERFS_MIN_BITMAP_NODES 10
2803 #define REISERFS_MAX_BITMAP_NODES 100
2804
2805
2806 #define JBH_HASH_SHIFT 13
2807 #define JBH_HASH_MASK 8191
2808
2809 #define _jhashfn(sb,block) \
2810 (((unsigned long)sb>>L1_CACHE_SHIFT) ^ \
2811 (((block)<<(JBH_HASH_SHIFT - 6)) ^ ((block) >> 13) ^ ((block) << (JBH_HASH_SHIFT - 12))))
2812 #define journal_hash(t,sb,block) ((t)[_jhashfn((sb),(block)) & JBH_HASH_MASK])
2813
2814
2815 #define journal_find_get_block(s, block) __find_get_block(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2816 #define journal_getblk(s, block) __getblk(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2817 #define journal_bread(s, block) __bread(SB_JOURNAL(s)->j_dev_bd, block, s->s_blocksize)
2818
2819 enum reiserfs_bh_state_bits {
2820 BH_JDirty = BH_PrivateStart,
2821 BH_JDirty_wait,
2822
2823
2824
2825
2826 BH_JNew,
2827 BH_JPrepared,
2828 BH_JRestore_dirty,
2829 BH_JTest,
2830 };
2831
2832 BUFFER_FNS(JDirty, journaled);
2833 TAS_BUFFER_FNS(JDirty, journaled);
2834 BUFFER_FNS(JDirty_wait, journal_dirty);
2835 TAS_BUFFER_FNS(JDirty_wait, journal_dirty);
2836 BUFFER_FNS(JNew, journal_new);
2837 TAS_BUFFER_FNS(JNew, journal_new);
2838 BUFFER_FNS(JPrepared, journal_prepared);
2839 TAS_BUFFER_FNS(JPrepared, journal_prepared);
2840 BUFFER_FNS(JRestore_dirty, journal_restore_dirty);
2841 TAS_BUFFER_FNS(JRestore_dirty, journal_restore_dirty);
2842 BUFFER_FNS(JTest, journal_test);
2843 TAS_BUFFER_FNS(JTest, journal_test);
2844
2845
2846 struct reiserfs_transaction_handle {
2847
2848
2849
2850
2851
2852
2853 struct super_block *t_super;
2854
2855 int t_refcount;
2856 int t_blocks_logged;
2857 int t_blocks_allocated;
2858
2859
2860 unsigned int t_trans_id;
2861
2862 void *t_handle_save;
2863
2864
2865
2866
2867
2868 unsigned displace_new_blocks:1;
2869
2870 struct list_head t_list;
2871 };
2872
2873
2874
2875
2876
2877 struct reiserfs_jh {
2878 struct reiserfs_journal_list *jl;
2879 struct buffer_head *bh;
2880 struct list_head list;
2881 };
2882
2883 void reiserfs_free_jh(struct buffer_head *bh);
2884 int reiserfs_add_tail_list(struct inode *inode, struct buffer_head *bh);
2885 int reiserfs_add_ordered_list(struct inode *inode, struct buffer_head *bh);
2886 int journal_mark_dirty(struct reiserfs_transaction_handle *,
2887 struct buffer_head *bh);
2888
2889 static inline int reiserfs_file_data_log(struct inode *inode)
2890 {
2891 if (reiserfs_data_log(inode->i_sb) ||
2892 (REISERFS_I(inode)->i_flags & i_data_log))
2893 return 1;
2894 return 0;
2895 }
2896
2897 static inline int reiserfs_transaction_running(struct super_block *s)
2898 {
2899 struct reiserfs_transaction_handle *th = current->journal_info;
2900 if (th && th->t_super == s)
2901 return 1;
2902 if (th && th->t_super == NULL)
2903 BUG();
2904 return 0;
2905 }
2906
2907 static inline int reiserfs_transaction_free_space(struct reiserfs_transaction_handle *th)
2908 {
2909 return th->t_blocks_allocated - th->t_blocks_logged;
2910 }
2911
2912 struct reiserfs_transaction_handle *reiserfs_persistent_transaction(struct
2913 super_block
2914 *,
2915 int count);
2916 int reiserfs_end_persistent_transaction(struct reiserfs_transaction_handle *);
2917 void reiserfs_vfs_truncate_file(struct inode *inode);
2918 int reiserfs_commit_page(struct inode *inode, struct page *page,
2919 unsigned from, unsigned to);
2920 void reiserfs_flush_old_commits(struct super_block *);
2921 int reiserfs_commit_for_inode(struct inode *);
2922 int reiserfs_inode_needs_commit(struct inode *);
2923 void reiserfs_update_inode_transaction(struct inode *);
2924 void reiserfs_wait_on_write_block(struct super_block *s);
2925 void reiserfs_block_writes(struct reiserfs_transaction_handle *th);
2926 void reiserfs_allow_writes(struct super_block *s);
2927 void reiserfs_check_lock_depth(struct super_block *s, char *caller);
2928 int reiserfs_prepare_for_journal(struct super_block *, struct buffer_head *bh,
2929 int wait);
2930 void reiserfs_restore_prepared_buffer(struct super_block *,
2931 struct buffer_head *bh);
2932 int journal_init(struct super_block *, const char *j_dev_name, int old_format,
2933 unsigned int);
2934 int journal_release(struct reiserfs_transaction_handle *, struct super_block *);
2935 int journal_release_error(struct reiserfs_transaction_handle *,
2936 struct super_block *);
2937 int journal_end(struct reiserfs_transaction_handle *);
2938 int journal_end_sync(struct reiserfs_transaction_handle *);
2939 int journal_mark_freed(struct reiserfs_transaction_handle *,
2940 struct super_block *, b_blocknr_t blocknr);
2941 int journal_transaction_should_end(struct reiserfs_transaction_handle *, int);
2942 int reiserfs_in_journal(struct super_block *sb, unsigned int bmap_nr,
2943 int bit_nr, int searchall, b_blocknr_t *next);
2944 int journal_begin(struct reiserfs_transaction_handle *,
2945 struct super_block *sb, unsigned long);
2946 int journal_join_abort(struct reiserfs_transaction_handle *,
2947 struct super_block *sb);
2948 void reiserfs_abort_journal(struct super_block *sb, int errno);
2949 void reiserfs_abort(struct super_block *sb, int errno, const char *fmt, ...);
2950 int reiserfs_allocate_list_bitmaps(struct super_block *s,
2951 struct reiserfs_list_bitmap *, unsigned int);
2952
2953 void reiserfs_schedule_old_flush(struct super_block *s);
2954 void reiserfs_cancel_old_flush(struct super_block *s);
2955 void add_save_link(struct reiserfs_transaction_handle *th,
2956 struct inode *inode, int truncate);
2957 int remove_save_link(struct inode *inode, int truncate);
2958
2959
2960 __u32 reiserfs_get_unused_objectid(struct reiserfs_transaction_handle *th);
2961 void reiserfs_release_objectid(struct reiserfs_transaction_handle *th,
2962 __u32 objectid_to_release);
2963 int reiserfs_convert_objectid_map_v1(struct super_block *);
2964
2965
2966 int B_IS_IN_TREE(const struct buffer_head *);
2967 extern void copy_item_head(struct item_head *to,
2968 const struct item_head *from);
2969
2970
2971 extern int comp_short_keys(const struct reiserfs_key *le_key,
2972 const struct cpu_key *cpu_key);
2973 extern void le_key2cpu_key(struct cpu_key *to, const struct reiserfs_key *from);
2974
2975
2976 extern int comp_le_keys(const struct reiserfs_key *,
2977 const struct reiserfs_key *);
2978 extern int comp_short_le_keys(const struct reiserfs_key *,
2979 const struct reiserfs_key *);
2980
2981
2982 static inline int le_key_version(const struct reiserfs_key *key)
2983 {
2984 int type;
2985
2986 type = offset_v2_k_type(&(key->u.k_offset_v2));
2987 if (type != TYPE_DIRECT && type != TYPE_INDIRECT
2988 && type != TYPE_DIRENTRY)
2989 return KEY_FORMAT_3_5;
2990
2991 return KEY_FORMAT_3_6;
2992
2993 }
2994
2995 static inline void copy_key(struct reiserfs_key *to,
2996 const struct reiserfs_key *from)
2997 {
2998 memcpy(to, from, KEY_SIZE);
2999 }
3000
3001 int comp_items(const struct item_head *stored_ih, const struct treepath *path);
3002 const struct reiserfs_key *get_rkey(const struct treepath *chk_path,
3003 const struct super_block *sb);
3004 int search_by_key(struct super_block *, const struct cpu_key *,
3005 struct treepath *, int);
3006 #define search_item(s,key,path) search_by_key (s, key, path, DISK_LEAF_NODE_LEVEL)
3007 int search_for_position_by_key(struct super_block *sb,
3008 const struct cpu_key *cpu_key,
3009 struct treepath *search_path);
3010 extern void decrement_bcount(struct buffer_head *bh);
3011 void decrement_counters_in_path(struct treepath *search_path);
3012 void pathrelse(struct treepath *search_path);
3013 int reiserfs_check_path(struct treepath *p);
3014 void pathrelse_and_restore(struct super_block *s, struct treepath *search_path);
3015
3016 int reiserfs_insert_item(struct reiserfs_transaction_handle *th,
3017 struct treepath *path,
3018 const struct cpu_key *key,
3019 struct item_head *ih,
3020 struct inode *inode, const char *body);
3021
3022 int reiserfs_paste_into_item(struct reiserfs_transaction_handle *th,
3023 struct treepath *path,
3024 const struct cpu_key *key,
3025 struct inode *inode,
3026 const char *body, int paste_size);
3027
3028 int reiserfs_cut_from_item(struct reiserfs_transaction_handle *th,
3029 struct treepath *path,
3030 struct cpu_key *key,
3031 struct inode *inode,
3032 struct page *page, loff_t new_file_size);
3033
3034 int reiserfs_delete_item(struct reiserfs_transaction_handle *th,
3035 struct treepath *path,
3036 const struct cpu_key *key,
3037 struct inode *inode, struct buffer_head *un_bh);
3038
3039 void reiserfs_delete_solid_item(struct reiserfs_transaction_handle *th,
3040 struct inode *inode, struct reiserfs_key *key);
3041 int reiserfs_delete_object(struct reiserfs_transaction_handle *th,
3042 struct inode *inode);
3043 int reiserfs_do_truncate(struct reiserfs_transaction_handle *th,
3044 struct inode *inode, struct page *,
3045 int update_timestamps);
3046
3047 #define i_block_size(inode) ((inode)->i_sb->s_blocksize)
3048 #define file_size(inode) ((inode)->i_size)
3049 #define tail_size(inode) (file_size (inode) & (i_block_size (inode) - 1))
3050
3051 #define tail_has_to_be_packed(inode) (have_large_tails ((inode)->i_sb)?\
3052 !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 )
3053
3054 void padd_item(char *item, int total_length, int length);
3055
3056
3057
3058 #define GET_BLOCK_NO_CREATE 0
3059 #define GET_BLOCK_CREATE 1
3060 #define GET_BLOCK_NO_HOLE 2
3061 #define GET_BLOCK_READ_DIRECT 4
3062 #define GET_BLOCK_NO_IMUX 8
3063 #define GET_BLOCK_NO_DANGLE 16
3064
3065 void reiserfs_read_locked_inode(struct inode *inode,
3066 struct reiserfs_iget_args *args);
3067 int reiserfs_find_actor(struct inode *inode, void *p);
3068 int reiserfs_init_locked_inode(struct inode *inode, void *p);
3069 void reiserfs_evict_inode(struct inode *inode);
3070 int reiserfs_write_inode(struct inode *inode, struct writeback_control *wbc);
3071 int reiserfs_get_block(struct inode *inode, sector_t block,
3072 struct buffer_head *bh_result, int create);
3073 struct dentry *reiserfs_fh_to_dentry(struct super_block *sb, struct fid *fid,
3074 int fh_len, int fh_type);
3075 struct dentry *reiserfs_fh_to_parent(struct super_block *sb, struct fid *fid,
3076 int fh_len, int fh_type);
3077 int reiserfs_encode_fh(struct inode *inode, __u32 * data, int *lenp,
3078 struct inode *parent);
3079
3080 int reiserfs_truncate_file(struct inode *, int update_timestamps);
3081 void make_cpu_key(struct cpu_key *cpu_key, struct inode *inode, loff_t offset,
3082 int type, int key_length);
3083 void make_le_item_head(struct item_head *ih, const struct cpu_key *key,
3084 int version,
3085 loff_t offset, int type, int length, int entry_count);
3086 struct inode *reiserfs_iget(struct super_block *s, const struct cpu_key *key);
3087
3088 struct reiserfs_security_handle;
3089 int reiserfs_new_inode(struct reiserfs_transaction_handle *th,
3090 struct inode *dir, umode_t mode,
3091 const char *symname, loff_t i_size,
3092 struct dentry *dentry, struct inode *inode,
3093 struct reiserfs_security_handle *security);
3094
3095 void reiserfs_update_sd_size(struct reiserfs_transaction_handle *th,
3096 struct inode *inode, loff_t size);
3097
3098 static inline void reiserfs_update_sd(struct reiserfs_transaction_handle *th,
3099 struct inode *inode)
3100 {
3101 reiserfs_update_sd_size(th, inode, inode->i_size);
3102 }
3103
3104 void sd_attrs_to_i_attrs(__u16 sd_attrs, struct inode *inode);
3105 int reiserfs_setattr(struct dentry *dentry, struct iattr *attr);
3106
3107 int __reiserfs_write_begin(struct page *page, unsigned from, unsigned len);
3108
3109
3110 void set_de_name_and_namelen(struct reiserfs_dir_entry *de);
3111 int search_by_entry_key(struct super_block *sb, const struct cpu_key *key,
3112 struct treepath *path, struct reiserfs_dir_entry *de);
3113 struct dentry *reiserfs_get_parent(struct dentry *);
3114
3115 #ifdef CONFIG_REISERFS_PROC_INFO
3116 int reiserfs_proc_info_init(struct super_block *sb);
3117 int reiserfs_proc_info_done(struct super_block *sb);
3118 int reiserfs_proc_info_global_init(void);
3119 int reiserfs_proc_info_global_done(void);
3120
3121 #define PROC_EXP( e ) e
3122
3123 #define __PINFO( sb ) REISERFS_SB(sb) -> s_proc_info_data
3124 #define PROC_INFO_MAX( sb, field, value ) \
3125 __PINFO( sb ).field = \
3126 max( REISERFS_SB( sb ) -> s_proc_info_data.field, value )
3127 #define PROC_INFO_INC( sb, field ) ( ++ ( __PINFO( sb ).field ) )
3128 #define PROC_INFO_ADD( sb, field, val ) ( __PINFO( sb ).field += ( val ) )
3129 #define PROC_INFO_BH_STAT( sb, bh, level ) \
3130 PROC_INFO_INC( sb, sbk_read_at[ ( level ) ] ); \
3131 PROC_INFO_ADD( sb, free_at[ ( level ) ], B_FREE_SPACE( bh ) ); \
3132 PROC_INFO_ADD( sb, items_at[ ( level ) ], B_NR_ITEMS( bh ) )
3133 #else
3134 static inline int reiserfs_proc_info_init(struct super_block *sb)
3135 {
3136 return 0;
3137 }
3138
3139 static inline int reiserfs_proc_info_done(struct super_block *sb)
3140 {
3141 return 0;
3142 }
3143
3144 static inline int reiserfs_proc_info_global_init(void)
3145 {
3146 return 0;
3147 }
3148
3149 static inline int reiserfs_proc_info_global_done(void)
3150 {
3151 return 0;
3152 }
3153
3154 #define PROC_EXP( e )
3155 #define VOID_V ( ( void ) 0 )
3156 #define PROC_INFO_MAX( sb, field, value ) VOID_V
3157 #define PROC_INFO_INC( sb, field ) VOID_V
3158 #define PROC_INFO_ADD( sb, field, val ) VOID_V
3159 #define PROC_INFO_BH_STAT(sb, bh, n_node_level) VOID_V
3160 #endif
3161
3162
3163 extern const struct inode_operations reiserfs_dir_inode_operations;
3164 extern const struct inode_operations reiserfs_symlink_inode_operations;
3165 extern const struct inode_operations reiserfs_special_inode_operations;
3166 extern const struct file_operations reiserfs_dir_operations;
3167 int reiserfs_readdir_inode(struct inode *, struct dir_context *);
3168
3169
3170 int direct2indirect(struct reiserfs_transaction_handle *, struct inode *,
3171 struct treepath *, struct buffer_head *, loff_t);
3172 int indirect2direct(struct reiserfs_transaction_handle *, struct inode *,
3173 struct page *, struct treepath *, const struct cpu_key *,
3174 loff_t, char *);
3175 void reiserfs_unmap_buffer(struct buffer_head *);
3176
3177
3178 extern const struct inode_operations reiserfs_file_inode_operations;
3179 extern const struct file_operations reiserfs_file_operations;
3180 extern const struct address_space_operations reiserfs_address_space_operations;
3181
3182
3183
3184 int fix_nodes(int n_op_mode, struct tree_balance *tb,
3185 struct item_head *ins_ih, const void *);
3186 void unfix_nodes(struct tree_balance *);
3187
3188
3189 void __reiserfs_panic(struct super_block *s, const char *id,
3190 const char *function, const char *fmt, ...)
3191 __attribute__ ((noreturn));
3192 #define reiserfs_panic(s, id, fmt, args...) \
3193 __reiserfs_panic(s, id, __func__, fmt, ##args)
3194 void __reiserfs_error(struct super_block *s, const char *id,
3195 const char *function, const char *fmt, ...);
3196 #define reiserfs_error(s, id, fmt, args...) \
3197 __reiserfs_error(s, id, __func__, fmt, ##args)
3198 void reiserfs_info(struct super_block *s, const char *fmt, ...);
3199 void reiserfs_debug(struct super_block *s, int level, const char *fmt, ...);
3200 void print_indirect_item(struct buffer_head *bh, int item_num);
3201 void store_print_tb(struct tree_balance *tb);
3202 void print_cur_tb(char *mes);
3203 void print_de(struct reiserfs_dir_entry *de);
3204 void print_bi(struct buffer_info *bi, char *mes);
3205 #define PRINT_LEAF_ITEMS 1
3206 #define PRINT_DIRECTORY_ITEMS 2
3207 #define PRINT_DIRECT_ITEMS 4
3208 void print_block(struct buffer_head *bh, ...);
3209 void print_bmap(struct super_block *s, int silent);
3210 void print_bmap_block(int i, char *data, int size, int silent);
3211
3212 void print_objectid_map(struct super_block *s);
3213 void print_block_head(struct buffer_head *bh, char *mes);
3214 void check_leaf(struct buffer_head *bh);
3215 void check_internal(struct buffer_head *bh);
3216 void print_statistics(struct super_block *s);
3217 char *reiserfs_hashname(int code);
3218
3219
3220 int leaf_move_items(int shift_mode, struct tree_balance *tb, int mov_num,
3221 int mov_bytes, struct buffer_head *Snew);
3222 int leaf_shift_left(struct tree_balance *tb, int shift_num, int shift_bytes);
3223 int leaf_shift_right(struct tree_balance *tb, int shift_num, int shift_bytes);
3224 void leaf_delete_items(struct buffer_info *cur_bi, int last_first, int first,
3225 int del_num, int del_bytes);
3226 void leaf_insert_into_buf(struct buffer_info *bi, int before,
3227 struct item_head * const inserted_item_ih,
3228 const char * const inserted_item_body,
3229 int zeros_number);
3230 void leaf_paste_in_buffer(struct buffer_info *bi, int pasted_item_num,
3231 int pos_in_item, int paste_size,
3232 const char * const body, int zeros_number);
3233 void leaf_cut_from_buffer(struct buffer_info *bi, int cut_item_num,
3234 int pos_in_item, int cut_size);
3235 void leaf_paste_entries(struct buffer_info *bi, int item_num, int before,
3236 int new_entry_count, struct reiserfs_de_head *new_dehs,
3237 const char *records, int paste_size);
3238
3239 int balance_internal(struct tree_balance *, int, int, struct item_head *,
3240 struct buffer_head **);
3241
3242
3243 void do_balance_mark_leaf_dirty(struct tree_balance *tb,
3244 struct buffer_head *bh, int flag);
3245 #define do_balance_mark_internal_dirty do_balance_mark_leaf_dirty
3246 #define do_balance_mark_sb_dirty do_balance_mark_leaf_dirty
3247
3248 void do_balance(struct tree_balance *tb, struct item_head *ih,
3249 const char *body, int flag);
3250 void reiserfs_invalidate_buffer(struct tree_balance *tb,
3251 struct buffer_head *bh);
3252
3253 int get_left_neighbor_position(struct tree_balance *tb, int h);
3254 int get_right_neighbor_position(struct tree_balance *tb, int h);
3255 void replace_key(struct tree_balance *tb, struct buffer_head *, int,
3256 struct buffer_head *, int);
3257 void make_empty_node(struct buffer_info *);
3258 struct buffer_head *get_FEB(struct tree_balance *);
3259
3260
3261
3262
3263
3264
3265
3266 struct __reiserfs_blocknr_hint {
3267
3268 struct inode *inode;
3269
3270 sector_t block;
3271 struct in_core_key key;
3272
3273
3274
3275
3276
3277 struct treepath *path;
3278
3279
3280
3281
3282
3283 struct reiserfs_transaction_handle *th;
3284
3285 b_blocknr_t beg, end;
3286
3287
3288
3289
3290
3291
3292 b_blocknr_t search_start;
3293
3294
3295
3296
3297
3298 int prealloc_size;
3299
3300
3301
3302
3303
3304 unsigned formatted_node:1;
3305 unsigned preallocate:1;
3306 };
3307
3308 typedef struct __reiserfs_blocknr_hint reiserfs_blocknr_hint_t;
3309
3310 int reiserfs_parse_alloc_options(struct super_block *, char *);
3311 void reiserfs_init_alloc_options(struct super_block *s);
3312
3313
3314
3315
3316
3317
3318 __le32 reiserfs_choose_packing(struct inode *dir);
3319
3320 void show_alloc_options(struct seq_file *seq, struct super_block *s);
3321 int reiserfs_init_bitmap_cache(struct super_block *sb);
3322 void reiserfs_free_bitmap_cache(struct super_block *sb);
3323 void reiserfs_cache_bitmap_metadata(struct super_block *sb, struct buffer_head *bh, struct reiserfs_bitmap_info *info);
3324 struct buffer_head *reiserfs_read_bitmap_block(struct super_block *sb, unsigned int bitmap);
3325 int is_reusable(struct super_block *s, b_blocknr_t block, int bit_value);
3326 void reiserfs_free_block(struct reiserfs_transaction_handle *th, struct inode *,
3327 b_blocknr_t, int for_unformatted);
3328 int reiserfs_allocate_blocknrs(reiserfs_blocknr_hint_t *, b_blocknr_t *, int,
3329 int);
3330 static inline int reiserfs_new_form_blocknrs(struct tree_balance *tb,
3331 b_blocknr_t * new_blocknrs,
3332 int amount_needed)
3333 {
3334 reiserfs_blocknr_hint_t hint = {
3335 .th = tb->transaction_handle,
3336 .path = tb->tb_path,
3337 .inode = NULL,
3338 .key = tb->key,
3339 .block = 0,
3340 .formatted_node = 1
3341 };
3342 return reiserfs_allocate_blocknrs(&hint, new_blocknrs, amount_needed,
3343 0);
3344 }
3345
3346 static inline int reiserfs_new_unf_blocknrs(struct reiserfs_transaction_handle
3347 *th, struct inode *inode,
3348 b_blocknr_t * new_blocknrs,
3349 struct treepath *path,
3350 sector_t block)
3351 {
3352 reiserfs_blocknr_hint_t hint = {
3353 .th = th,
3354 .path = path,
3355 .inode = inode,
3356 .block = block,
3357 .formatted_node = 0,
3358 .preallocate = 0
3359 };
3360 return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0);
3361 }
3362
3363 #ifdef REISERFS_PREALLOCATE
3364 static inline int reiserfs_new_unf_blocknrs2(struct reiserfs_transaction_handle
3365 *th, struct inode *inode,
3366 b_blocknr_t * new_blocknrs,
3367 struct treepath *path,
3368 sector_t block)
3369 {
3370 reiserfs_blocknr_hint_t hint = {
3371 .th = th,
3372 .path = path,
3373 .inode = inode,
3374 .block = block,
3375 .formatted_node = 0,
3376 .preallocate = 1
3377 };
3378 return reiserfs_allocate_blocknrs(&hint, new_blocknrs, 1, 0);
3379 }
3380
3381 void reiserfs_discard_prealloc(struct reiserfs_transaction_handle *th,
3382 struct inode *inode);
3383 void reiserfs_discard_all_prealloc(struct reiserfs_transaction_handle *th);
3384 #endif
3385
3386
3387 __u32 keyed_hash(const signed char *msg, int len);
3388 __u32 yura_hash(const signed char *msg, int len);
3389 __u32 r5_hash(const signed char *msg, int len);
3390
3391 #define reiserfs_set_le_bit __set_bit_le
3392 #define reiserfs_test_and_set_le_bit __test_and_set_bit_le
3393 #define reiserfs_clear_le_bit __clear_bit_le
3394 #define reiserfs_test_and_clear_le_bit __test_and_clear_bit_le
3395 #define reiserfs_test_le_bit test_bit_le
3396 #define reiserfs_find_next_zero_le_bit find_next_zero_bit_le
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407 #define SPARE_SPACE 500
3408
3409
3410 long reiserfs_ioctl(struct file *filp, unsigned int cmd, unsigned long arg);
3411 long reiserfs_compat_ioctl(struct file *filp,
3412 unsigned int cmd, unsigned long arg);
3413 int reiserfs_unpack(struct inode *inode, struct file *filp);