This source file includes following definitions.
- BUFFER_FNS
- bh2jh
- jbd_lock_bh_state
- jbd_trylock_bh_state
- jbd_is_locked_bh_state
- jbd_unlock_bh_state
- jbd_lock_bh_journal_head
- jbd_unlock_bh_journal_head
- jbd2_time_diff
- jbd2_file_log_bh
- jbd2_unfile_log_bh
- journal_current_handle
- jbd2_alloc_handle
- jbd2_free_handle
- jbd2_alloc_inode
- jbd2_free_inode
- is_journal_aborted
- is_handle_aborted
- jbd2_journal_abort_handle
- tid_gt
- tid_geq
- jbd2_journal_has_csum_v2or3_feature
- jbd2_journal_has_csum_v2or3
- jbd2_space_needed
- jbd2_log_space_left
- jbd2_chksum
- jbd2_get_latest_transaction
1
2
3
4
5
6
7
8
9
10
11
12
13 #ifndef _LINUX_JBD2_H
14 #define _LINUX_JBD2_H
15
16
17 #ifndef __KERNEL__
18 #include "jfs_compat.h"
19 #define JBD2_DEBUG
20 #else
21
22 #include <linux/types.h>
23 #include <linux/buffer_head.h>
24 #include <linux/journal-head.h>
25 #include <linux/stddef.h>
26 #include <linux/mutex.h>
27 #include <linux/timer.h>
28 #include <linux/slab.h>
29 #include <linux/bit_spinlock.h>
30 #include <crypto/hash.h>
31 #endif
32
33 #define journal_oom_retry 1
34
35
36
37
38
39
40
41
42 #undef JBD2_PARANOID_IOFAIL
43
44
45
46
47 #define JBD2_DEFAULT_MAX_COMMIT_AGE 5
48
49 #ifdef CONFIG_JBD2_DEBUG
50
51
52
53
54
55 #define JBD2_EXPENSIVE_CHECKING
56 extern ushort jbd2_journal_enable_debug;
57 void __jbd2_debug(int level, const char *file, const char *func,
58 unsigned int line, const char *fmt, ...);
59
60 #define jbd_debug(n, fmt, a...) \
61 __jbd2_debug((n), __FILE__, __func__, __LINE__, (fmt), ##a)
62 #else
63 #define jbd_debug(n, fmt, a...)
64 #endif
65
66 extern void *jbd2_alloc(size_t size, gfp_t flags);
67 extern void jbd2_free(void *ptr, size_t size);
68
69 #define JBD2_MIN_JOURNAL_BLOCKS 1024
70
71 #ifdef __KERNEL__
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 typedef struct jbd2_journal_handle handle_t;
91
92
93
94
95
96
97
98
99
100
101
102
103
104 typedef struct journal_s journal_t;
105 #endif
106
107
108
109
110
111 #define JBD2_MAGIC_NUMBER 0xc03b3998U
112
113
114
115
116
117
118
119
120
121 #define JBD2_DESCRIPTOR_BLOCK 1
122 #define JBD2_COMMIT_BLOCK 2
123 #define JBD2_SUPERBLOCK_V1 3
124 #define JBD2_SUPERBLOCK_V2 4
125 #define JBD2_REVOKE_BLOCK 5
126
127
128
129
130 typedef struct journal_header_s
131 {
132 __be32 h_magic;
133 __be32 h_blocktype;
134 __be32 h_sequence;
135 } journal_header_t;
136
137
138
139
140 #define JBD2_CRC32_CHKSUM 1
141 #define JBD2_MD5_CHKSUM 2
142 #define JBD2_SHA1_CHKSUM 3
143 #define JBD2_CRC32C_CHKSUM 4
144
145 #define JBD2_CRC32_CHKSUM_SIZE 4
146
147 #define JBD2_CHECKSUM_BYTES (32 / sizeof(u32))
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166 struct commit_header {
167 __be32 h_magic;
168 __be32 h_blocktype;
169 __be32 h_sequence;
170 unsigned char h_chksum_type;
171 unsigned char h_chksum_size;
172 unsigned char h_padding[2];
173 __be32 h_chksum[JBD2_CHECKSUM_BYTES];
174 __be64 h_commit_sec;
175 __be32 h_commit_nsec;
176 };
177
178
179
180
181
182
183
184 typedef struct journal_block_tag3_s
185 {
186 __be32 t_blocknr;
187 __be32 t_flags;
188 __be32 t_blocknr_high;
189 __be32 t_checksum;
190 } journal_block_tag3_t;
191
192 typedef struct journal_block_tag_s
193 {
194 __be32 t_blocknr;
195 __be16 t_checksum;
196 __be16 t_flags;
197 __be32 t_blocknr_high;
198 } journal_block_tag_t;
199
200
201 struct jbd2_journal_block_tail {
202 __be32 t_checksum;
203 };
204
205
206
207
208
209 typedef struct jbd2_journal_revoke_header_s
210 {
211 journal_header_t r_header;
212 __be32 r_count;
213 } jbd2_journal_revoke_header_t;
214
215
216 #define JBD2_FLAG_ESCAPE 1
217 #define JBD2_FLAG_SAME_UUID 2
218 #define JBD2_FLAG_DELETED 4
219 #define JBD2_FLAG_LAST_TAG 8
220
221
222
223
224
225 typedef struct journal_superblock_s
226 {
227
228 journal_header_t s_header;
229
230
231
232 __be32 s_blocksize;
233 __be32 s_maxlen;
234 __be32 s_first;
235
236
237
238 __be32 s_sequence;
239 __be32 s_start;
240
241
242
243 __be32 s_errno;
244
245
246
247 __be32 s_feature_compat;
248 __be32 s_feature_incompat;
249 __be32 s_feature_ro_compat;
250
251 __u8 s_uuid[16];
252
253
254 __be32 s_nr_users;
255
256 __be32 s_dynsuper;
257
258
259 __be32 s_max_transaction;
260 __be32 s_max_trans_data;
261
262
263 __u8 s_checksum_type;
264 __u8 s_padding2[3];
265 __u32 s_padding[42];
266 __be32 s_checksum;
267
268
269 __u8 s_users[16*48];
270
271 } journal_superblock_t;
272
273
274 #define JBD2_HAS_COMPAT_FEATURE(j,mask) \
275 ((j)->j_format_version >= 2 && \
276 ((j)->j_superblock->s_feature_compat & cpu_to_be32((mask))))
277 #define JBD2_HAS_RO_COMPAT_FEATURE(j,mask) \
278 ((j)->j_format_version >= 2 && \
279 ((j)->j_superblock->s_feature_ro_compat & cpu_to_be32((mask))))
280 #define JBD2_HAS_INCOMPAT_FEATURE(j,mask) \
281 ((j)->j_format_version >= 2 && \
282 ((j)->j_superblock->s_feature_incompat & cpu_to_be32((mask))))
283
284 #define JBD2_FEATURE_COMPAT_CHECKSUM 0x00000001
285
286 #define JBD2_FEATURE_INCOMPAT_REVOKE 0x00000001
287 #define JBD2_FEATURE_INCOMPAT_64BIT 0x00000002
288 #define JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT 0x00000004
289 #define JBD2_FEATURE_INCOMPAT_CSUM_V2 0x00000008
290 #define JBD2_FEATURE_INCOMPAT_CSUM_V3 0x00000010
291
292
293
294
295 #define JBD2_KNOWN_COMPAT_FEATURES JBD2_FEATURE_COMPAT_CHECKSUM
296 #define JBD2_KNOWN_ROCOMPAT_FEATURES 0
297 #define JBD2_KNOWN_INCOMPAT_FEATURES (JBD2_FEATURE_INCOMPAT_REVOKE | \
298 JBD2_FEATURE_INCOMPAT_64BIT | \
299 JBD2_FEATURE_INCOMPAT_ASYNC_COMMIT | \
300 JBD2_FEATURE_INCOMPAT_CSUM_V2 | \
301 JBD2_FEATURE_INCOMPAT_CSUM_V3)
302
303 #ifdef __KERNEL__
304
305 #include <linux/fs.h>
306 #include <linux/sched.h>
307
308 enum jbd_state_bits {
309 BH_JBD
310 = BH_PrivateStart,
311 BH_JWrite,
312 BH_Freed,
313 BH_Revoked,
314 BH_RevokeValid,
315 BH_JBDDirty,
316 BH_State,
317 BH_JournalHead,
318 BH_Shadow,
319 BH_Verified,
320 BH_JBDPrivateStart,
321 };
322
323 BUFFER_FNS(JBD, jbd)
324 BUFFER_FNS(JWrite, jwrite)
325 BUFFER_FNS(JBDDirty, jbddirty)
326 TAS_BUFFER_FNS(JBDDirty, jbddirty)
327 BUFFER_FNS(Revoked, revoked)
328 TAS_BUFFER_FNS(Revoked, revoked)
329 BUFFER_FNS(RevokeValid, revokevalid)
330 TAS_BUFFER_FNS(RevokeValid, revokevalid)
331 BUFFER_FNS(Freed, freed)
332 BUFFER_FNS(Shadow, shadow)
333 BUFFER_FNS(Verified, verified)
334
335 static inline struct buffer_head *jh2bh(struct journal_head *jh)
336 {
337 return jh->b_bh;
338 }
339
340 static inline struct journal_head *bh2jh(struct buffer_head *bh)
341 {
342 return bh->b_private;
343 }
344
345 static inline void jbd_lock_bh_state(struct buffer_head *bh)
346 {
347 bit_spin_lock(BH_State, &bh->b_state);
348 }
349
350 static inline int jbd_trylock_bh_state(struct buffer_head *bh)
351 {
352 return bit_spin_trylock(BH_State, &bh->b_state);
353 }
354
355 static inline int jbd_is_locked_bh_state(struct buffer_head *bh)
356 {
357 return bit_spin_is_locked(BH_State, &bh->b_state);
358 }
359
360 static inline void jbd_unlock_bh_state(struct buffer_head *bh)
361 {
362 bit_spin_unlock(BH_State, &bh->b_state);
363 }
364
365 static inline void jbd_lock_bh_journal_head(struct buffer_head *bh)
366 {
367 bit_spin_lock(BH_JournalHead, &bh->b_state);
368 }
369
370 static inline void jbd_unlock_bh_journal_head(struct buffer_head *bh)
371 {
372 bit_spin_unlock(BH_JournalHead, &bh->b_state);
373 }
374
375 #define J_ASSERT(assert) BUG_ON(!(assert))
376
377 #define J_ASSERT_BH(bh, expr) J_ASSERT(expr)
378 #define J_ASSERT_JH(jh, expr) J_ASSERT(expr)
379
380 #if defined(JBD2_PARANOID_IOFAIL)
381 #define J_EXPECT(expr, why...) J_ASSERT(expr)
382 #define J_EXPECT_BH(bh, expr, why...) J_ASSERT_BH(bh, expr)
383 #define J_EXPECT_JH(jh, expr, why...) J_ASSERT_JH(jh, expr)
384 #else
385 #define __journal_expect(expr, why...) \
386 ({ \
387 int val = (expr); \
388 if (!val) { \
389 printk(KERN_ERR \
390 "JBD2 unexpected failure: %s: %s;\n", \
391 __func__, #expr); \
392 printk(KERN_ERR why "\n"); \
393 } \
394 val; \
395 })
396 #define J_EXPECT(expr, why...) __journal_expect(expr, ## why)
397 #define J_EXPECT_BH(bh, expr, why...) __journal_expect(expr, ## why)
398 #define J_EXPECT_JH(jh, expr, why...) __journal_expect(expr, ## why)
399 #endif
400
401
402 #define __JI_COMMIT_RUNNING 0
403 #define __JI_WRITE_DATA 1
404 #define __JI_WAIT_DATA 2
405
406
407
408
409
410
411 #define JI_COMMIT_RUNNING (1 << __JI_COMMIT_RUNNING)
412
413 #define JI_WRITE_DATA (1 << __JI_WRITE_DATA)
414
415 #define JI_WAIT_DATA (1 << __JI_WAIT_DATA)
416
417
418
419
420
421 struct jbd2_inode {
422
423
424
425
426
427
428 transaction_t *i_transaction;
429
430
431
432
433
434
435
436 transaction_t *i_next_transaction;
437
438
439
440
441 struct list_head i_list;
442
443
444
445
446
447
448 struct inode *i_vfs_inode;
449
450
451
452
453 unsigned long i_flags;
454
455
456
457
458
459
460
461 loff_t i_dirty_start;
462
463
464
465
466
467
468
469 loff_t i_dirty_end;
470 };
471
472 struct jbd2_revoke_table_s;
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498 struct jbd2_journal_handle
499 {
500 union {
501 transaction_t *h_transaction;
502
503 journal_t *h_journal;
504 };
505
506 handle_t *h_rsv_handle;
507 int h_buffer_credits;
508 int h_ref;
509 int h_err;
510
511
512 unsigned int h_sync: 1;
513 unsigned int h_jdata: 1;
514 unsigned int h_reserved: 1;
515 unsigned int h_aborted: 1;
516 unsigned int h_type: 8;
517 unsigned int h_line_no: 16;
518
519 unsigned long h_start_jiffies;
520 unsigned int h_requested_credits;
521
522 unsigned int saved_alloc_context;
523 };
524
525
526
527
528
529 struct transaction_chp_stats_s {
530 unsigned long cs_chp_time;
531 __u32 cs_forced_to_close;
532 __u32 cs_written;
533 __u32 cs_dropped;
534 };
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572 struct transaction_s
573 {
574
575 journal_t *t_journal;
576
577
578 tid_t t_tid;
579
580
581
582
583
584
585
586
587
588 enum {
589 T_RUNNING,
590 T_LOCKED,
591 T_SWITCH,
592 T_FLUSH,
593 T_COMMIT,
594 T_COMMIT_DFLUSH,
595 T_COMMIT_JFLUSH,
596 T_COMMIT_CALLBACK,
597 T_FINISHED
598 } t_state;
599
600
601
602
603 unsigned long t_log_start;
604
605
606 int t_nr_buffers;
607
608
609
610
611
612 struct journal_head *t_reserved_list;
613
614
615
616
617
618 struct journal_head *t_buffers;
619
620
621
622
623
624
625 struct journal_head *t_forget;
626
627
628
629
630
631 struct journal_head *t_checkpoint_list;
632
633
634
635
636
637 struct journal_head *t_checkpoint_io_list;
638
639
640
641
642
643
644 struct journal_head *t_shadow_list;
645
646
647
648
649
650 struct list_head t_inode_list;
651
652
653
654
655 spinlock_t t_handle_lock;
656
657
658
659
660 unsigned long t_max_wait;
661
662
663
664
665 unsigned long t_start;
666
667
668
669
670 unsigned long t_requested;
671
672
673
674
675 struct transaction_chp_stats_s t_chp_stats;
676
677
678
679
680
681 atomic_t t_updates;
682
683
684
685
686
687 atomic_t t_outstanding_credits;
688
689
690
691
692
693 transaction_t *t_cpnext, *t_cpprev;
694
695
696
697
698
699 unsigned long t_expires;
700
701
702
703
704 ktime_t t_start_time;
705
706
707
708
709 atomic_t t_handle_count;
710
711
712
713
714
715 unsigned int t_synchronous_commit:1;
716
717
718 int t_need_data_flush;
719
720
721
722
723
724 struct list_head t_private_list;
725 };
726
727 struct transaction_run_stats_s {
728 unsigned long rs_wait;
729 unsigned long rs_request_delay;
730 unsigned long rs_running;
731 unsigned long rs_locked;
732 unsigned long rs_flushing;
733 unsigned long rs_logging;
734
735 __u32 rs_handle_count;
736 __u32 rs_blocks;
737 __u32 rs_blocks_logged;
738 };
739
740 struct transaction_stats_s {
741 unsigned long ts_tid;
742 unsigned long ts_requested;
743 struct transaction_run_stats_s run;
744 };
745
746 static inline unsigned long
747 jbd2_time_diff(unsigned long start, unsigned long end)
748 {
749 if (end >= start)
750 return end - start;
751
752 return end + (MAX_JIFFY_OFFSET - start);
753 }
754
755 #define JBD2_NR_BATCH 64
756
757
758
759
760
761 struct journal_s
762 {
763
764
765
766 unsigned long j_flags;
767
768
769
770
771
772
773
774 int j_errno;
775
776
777
778
779 struct buffer_head *j_sb_buffer;
780
781
782
783
784 journal_superblock_t *j_superblock;
785
786
787
788
789 int j_format_version;
790
791
792
793
794 rwlock_t j_state_lock;
795
796
797
798
799
800
801 int j_barrier_count;
802
803
804
805
806 struct mutex j_barrier;
807
808
809
810
811
812
813
814 transaction_t *j_running_transaction;
815
816
817
818
819
820
821
822 transaction_t *j_committing_transaction;
823
824
825
826
827
828
829
830 transaction_t *j_checkpoint_transactions;
831
832
833
834
835
836
837
838 wait_queue_head_t j_wait_transaction_locked;
839
840
841
842
843 wait_queue_head_t j_wait_done_commit;
844
845
846
847
848 wait_queue_head_t j_wait_commit;
849
850
851
852
853 wait_queue_head_t j_wait_updates;
854
855
856
857
858
859
860 wait_queue_head_t j_wait_reserved;
861
862
863
864
865
866
867 struct mutex j_checkpoint_mutex;
868
869
870
871
872
873
874
875
876
877 struct buffer_head *j_chkpt_bhs[JBD2_NR_BATCH];
878
879
880
881
882
883
884
885 unsigned long j_head;
886
887
888
889
890
891
892
893 unsigned long j_tail;
894
895
896
897
898
899
900
901 unsigned long j_free;
902
903
904
905
906
907
908
909 unsigned long j_first;
910
911
912
913
914
915
916
917 unsigned long j_last;
918
919
920
921
922 struct block_device *j_dev;
923
924
925
926
927 int j_blocksize;
928
929
930
931
932
933
934 unsigned long long j_blk_offset;
935
936
937
938
939 char j_devname[BDEVNAME_SIZE+24];
940
941
942
943
944
945
946
947 struct block_device *j_fs_dev;
948
949
950
951
952 unsigned int j_maxlen;
953
954
955
956
957
958
959 atomic_t j_reserved_credits;
960
961
962
963
964 spinlock_t j_list_lock;
965
966
967
968
969
970
971
972 struct inode *j_inode;
973
974
975
976
977
978
979 tid_t j_tail_sequence;
980
981
982
983
984
985
986 tid_t j_transaction_sequence;
987
988
989
990
991
992
993
994 tid_t j_commit_sequence;
995
996
997
998
999
1000
1001
1002 tid_t j_commit_request;
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012 __u8 j_uuid[16];
1013
1014
1015
1016
1017 struct task_struct *j_task;
1018
1019
1020
1021
1022
1023
1024
1025 int j_max_transaction_buffers;
1026
1027
1028
1029
1030
1031
1032 unsigned long j_commit_interval;
1033
1034
1035
1036
1037 struct timer_list j_commit_timer;
1038
1039
1040
1041
1042 spinlock_t j_revoke_lock;
1043
1044
1045
1046
1047
1048
1049
1050 struct jbd2_revoke_table_s *j_revoke;
1051
1052
1053
1054
1055 struct jbd2_revoke_table_s *j_revoke_table[2];
1056
1057
1058
1059
1060 struct buffer_head **j_wbuf;
1061
1062
1063
1064
1065
1066
1067 int j_wbufsize;
1068
1069
1070
1071
1072
1073
1074
1075 pid_t j_last_sync_writer;
1076
1077
1078
1079
1080
1081
1082
1083 u64 j_average_commit_time;
1084
1085
1086
1087
1088
1089
1090
1091 u32 j_min_batch_time;
1092
1093
1094
1095
1096
1097
1098
1099 u32 j_max_batch_time;
1100
1101
1102
1103
1104
1105
1106 void (*j_commit_callback)(journal_t *,
1107 transaction_t *);
1108
1109
1110
1111
1112
1113
1114
1115
1116 spinlock_t j_history_lock;
1117
1118
1119
1120
1121 struct proc_dir_entry *j_proc_entry;
1122
1123
1124
1125
1126 struct transaction_stats_s j_stats;
1127
1128
1129
1130
1131 unsigned int j_failed_commit;
1132
1133
1134
1135
1136
1137
1138
1139 void *j_private;
1140
1141
1142
1143
1144
1145
1146 struct crypto_shash *j_chksum_driver;
1147
1148
1149
1150
1151
1152
1153 __u32 j_csum_seed;
1154
1155 #ifdef CONFIG_DEBUG_LOCK_ALLOC
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166 struct lockdep_map j_trans_commit_map;
1167 #endif
1168 };
1169
1170 #define jbd2_might_wait_for_commit(j) \
1171 do { \
1172 rwsem_acquire(&j->j_trans_commit_map, 0, 0, _THIS_IP_); \
1173 rwsem_release(&j->j_trans_commit_map, 1, _THIS_IP_); \
1174 } while (0)
1175
1176
1177 #define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \
1178 static inline bool jbd2_has_feature_##name(journal_t *j) \
1179 { \
1180 return ((j)->j_format_version >= 2 && \
1181 ((j)->j_superblock->s_feature_compat & \
1182 cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname)) != 0); \
1183 } \
1184 static inline void jbd2_set_feature_##name(journal_t *j) \
1185 { \
1186 (j)->j_superblock->s_feature_compat |= \
1187 cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \
1188 } \
1189 static inline void jbd2_clear_feature_##name(journal_t *j) \
1190 { \
1191 (j)->j_superblock->s_feature_compat &= \
1192 ~cpu_to_be32(JBD2_FEATURE_COMPAT_##flagname); \
1193 }
1194
1195 #define JBD2_FEATURE_RO_COMPAT_FUNCS(name, flagname) \
1196 static inline bool jbd2_has_feature_##name(journal_t *j) \
1197 { \
1198 return ((j)->j_format_version >= 2 && \
1199 ((j)->j_superblock->s_feature_ro_compat & \
1200 cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname)) != 0); \
1201 } \
1202 static inline void jbd2_set_feature_##name(journal_t *j) \
1203 { \
1204 (j)->j_superblock->s_feature_ro_compat |= \
1205 cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \
1206 } \
1207 static inline void jbd2_clear_feature_##name(journal_t *j) \
1208 { \
1209 (j)->j_superblock->s_feature_ro_compat &= \
1210 ~cpu_to_be32(JBD2_FEATURE_RO_COMPAT_##flagname); \
1211 }
1212
1213 #define JBD2_FEATURE_INCOMPAT_FUNCS(name, flagname) \
1214 static inline bool jbd2_has_feature_##name(journal_t *j) \
1215 { \
1216 return ((j)->j_format_version >= 2 && \
1217 ((j)->j_superblock->s_feature_incompat & \
1218 cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname)) != 0); \
1219 } \
1220 static inline void jbd2_set_feature_##name(journal_t *j) \
1221 { \
1222 (j)->j_superblock->s_feature_incompat |= \
1223 cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \
1224 } \
1225 static inline void jbd2_clear_feature_##name(journal_t *j) \
1226 { \
1227 (j)->j_superblock->s_feature_incompat &= \
1228 ~cpu_to_be32(JBD2_FEATURE_INCOMPAT_##flagname); \
1229 }
1230
1231 JBD2_FEATURE_COMPAT_FUNCS(checksum, CHECKSUM)
1232
1233 JBD2_FEATURE_INCOMPAT_FUNCS(revoke, REVOKE)
1234 JBD2_FEATURE_INCOMPAT_FUNCS(64bit, 64BIT)
1235 JBD2_FEATURE_INCOMPAT_FUNCS(async_commit, ASYNC_COMMIT)
1236 JBD2_FEATURE_INCOMPAT_FUNCS(csum2, CSUM_V2)
1237 JBD2_FEATURE_INCOMPAT_FUNCS(csum3, CSUM_V3)
1238
1239
1240
1241
1242 #define JBD2_UNMOUNT 0x001
1243 #define JBD2_ABORT 0x002
1244 #define JBD2_ACK_ERR 0x004
1245 #define JBD2_FLUSHED 0x008
1246 #define JBD2_LOADED 0x010
1247 #define JBD2_BARRIER 0x020
1248 #define JBD2_ABORT_ON_SYNCDATA_ERR 0x040
1249
1250
1251 #define JBD2_REC_ERR 0x080
1252
1253
1254
1255
1256
1257
1258
1259 extern void jbd2_journal_unfile_buffer(journal_t *, struct journal_head *);
1260 extern void __jbd2_journal_refile_buffer(struct journal_head *);
1261 extern void jbd2_journal_refile_buffer(journal_t *, struct journal_head *);
1262 extern void __jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
1263 extern void __journal_free_buffer(struct journal_head *bh);
1264 extern void jbd2_journal_file_buffer(struct journal_head *, transaction_t *, int);
1265 extern void __journal_clean_data_list(transaction_t *transaction);
1266 static inline void jbd2_file_log_bh(struct list_head *head, struct buffer_head *bh)
1267 {
1268 list_add_tail(&bh->b_assoc_buffers, head);
1269 }
1270 static inline void jbd2_unfile_log_bh(struct buffer_head *bh)
1271 {
1272 list_del_init(&bh->b_assoc_buffers);
1273 }
1274
1275
1276 struct buffer_head *jbd2_journal_get_descriptor_buffer(transaction_t *, int);
1277 void jbd2_descriptor_block_csum_set(journal_t *, struct buffer_head *);
1278 int jbd2_journal_next_log_block(journal_t *, unsigned long long *);
1279 int jbd2_journal_get_log_tail(journal_t *journal, tid_t *tid,
1280 unsigned long *block);
1281 int __jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
1282 void jbd2_update_log_tail(journal_t *journal, tid_t tid, unsigned long block);
1283
1284
1285 extern void jbd2_journal_commit_transaction(journal_t *);
1286
1287
1288 void __jbd2_journal_clean_checkpoint_list(journal_t *journal, bool destroy);
1289 int __jbd2_journal_remove_checkpoint(struct journal_head *);
1290 void jbd2_journal_destroy_checkpoint(journal_t *journal);
1291 void __jbd2_journal_insert_checkpoint(struct journal_head *, transaction_t *);
1292
1293
1294
1295
1296
1297
1298 struct jbd2_buffer_trigger_type {
1299
1300
1301
1302
1303
1304
1305 void (*t_frozen)(struct jbd2_buffer_trigger_type *type,
1306 struct buffer_head *bh, void *mapped_data,
1307 size_t size);
1308
1309
1310
1311
1312
1313 void (*t_abort)(struct jbd2_buffer_trigger_type *type,
1314 struct buffer_head *bh);
1315 };
1316
1317 extern void jbd2_buffer_frozen_trigger(struct journal_head *jh,
1318 void *mapped_data,
1319 struct jbd2_buffer_trigger_type *triggers);
1320 extern void jbd2_buffer_abort_trigger(struct journal_head *jh,
1321 struct jbd2_buffer_trigger_type *triggers);
1322
1323
1324 extern int jbd2_journal_write_metadata_buffer(transaction_t *transaction,
1325 struct journal_head *jh_in,
1326 struct buffer_head **bh_out,
1327 sector_t blocknr);
1328
1329
1330 extern void __wait_on_journal (journal_t *);
1331
1332
1333 extern void jbd2_journal_destroy_transaction_cache(void);
1334 extern int __init jbd2_journal_init_transaction_cache(void);
1335 extern void jbd2_journal_free_transaction(transaction_t *);
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348 static inline handle_t *journal_current_handle(void)
1349 {
1350 return current->journal_info;
1351 }
1352
1353
1354
1355
1356
1357
1358
1359 extern handle_t *jbd2_journal_start(journal_t *, int nblocks);
1360 extern handle_t *jbd2__journal_start(journal_t *, int blocks, int rsv_blocks,
1361 gfp_t gfp_mask, unsigned int type,
1362 unsigned int line_no);
1363 extern int jbd2_journal_restart(handle_t *, int nblocks);
1364 extern int jbd2__journal_restart(handle_t *, int nblocks, gfp_t gfp_mask);
1365 extern int jbd2_journal_start_reserved(handle_t *handle,
1366 unsigned int type, unsigned int line_no);
1367 extern void jbd2_journal_free_reserved(handle_t *handle);
1368 extern int jbd2_journal_extend (handle_t *, int nblocks);
1369 extern int jbd2_journal_get_write_access(handle_t *, struct buffer_head *);
1370 extern int jbd2_journal_get_create_access (handle_t *, struct buffer_head *);
1371 extern int jbd2_journal_get_undo_access(handle_t *, struct buffer_head *);
1372 void jbd2_journal_set_triggers(struct buffer_head *,
1373 struct jbd2_buffer_trigger_type *type);
1374 extern int jbd2_journal_dirty_metadata (handle_t *, struct buffer_head *);
1375 extern int jbd2_journal_forget (handle_t *, struct buffer_head *);
1376 extern int jbd2_journal_invalidatepage(journal_t *,
1377 struct page *, unsigned int, unsigned int);
1378 extern int jbd2_journal_try_to_free_buffers(journal_t *, struct page *, gfp_t);
1379 extern int jbd2_journal_stop(handle_t *);
1380 extern int jbd2_journal_flush (journal_t *);
1381 extern void jbd2_journal_lock_updates (journal_t *);
1382 extern void jbd2_journal_unlock_updates (journal_t *);
1383
1384 extern journal_t * jbd2_journal_init_dev(struct block_device *bdev,
1385 struct block_device *fs_dev,
1386 unsigned long long start, int len, int bsize);
1387 extern journal_t * jbd2_journal_init_inode (struct inode *);
1388 extern int jbd2_journal_update_format (journal_t *);
1389 extern int jbd2_journal_check_used_features
1390 (journal_t *, unsigned long, unsigned long, unsigned long);
1391 extern int jbd2_journal_check_available_features
1392 (journal_t *, unsigned long, unsigned long, unsigned long);
1393 extern int jbd2_journal_set_features
1394 (journal_t *, unsigned long, unsigned long, unsigned long);
1395 extern void jbd2_journal_clear_features
1396 (journal_t *, unsigned long, unsigned long, unsigned long);
1397 extern int jbd2_journal_load (journal_t *journal);
1398 extern int jbd2_journal_destroy (journal_t *);
1399 extern int jbd2_journal_recover (journal_t *journal);
1400 extern int jbd2_journal_wipe (journal_t *, int);
1401 extern int jbd2_journal_skip_recovery (journal_t *);
1402 extern void jbd2_journal_update_sb_errno(journal_t *);
1403 extern int jbd2_journal_update_sb_log_tail (journal_t *, tid_t,
1404 unsigned long, int);
1405 extern void __jbd2_journal_abort_hard (journal_t *);
1406 extern void jbd2_journal_abort (journal_t *, int);
1407 extern int jbd2_journal_errno (journal_t *);
1408 extern void jbd2_journal_ack_err (journal_t *);
1409 extern int jbd2_journal_clear_err (journal_t *);
1410 extern int jbd2_journal_bmap(journal_t *, unsigned long, unsigned long long *);
1411 extern int jbd2_journal_force_commit(journal_t *);
1412 extern int jbd2_journal_force_commit_nested(journal_t *);
1413 extern int jbd2_journal_inode_ranged_write(handle_t *handle,
1414 struct jbd2_inode *inode, loff_t start_byte,
1415 loff_t length);
1416 extern int jbd2_journal_inode_ranged_wait(handle_t *handle,
1417 struct jbd2_inode *inode, loff_t start_byte,
1418 loff_t length);
1419 extern int jbd2_journal_begin_ordered_truncate(journal_t *journal,
1420 struct jbd2_inode *inode, loff_t new_size);
1421 extern void jbd2_journal_init_jbd_inode(struct jbd2_inode *jinode, struct inode *inode);
1422 extern void jbd2_journal_release_jbd_inode(journal_t *journal, struct jbd2_inode *jinode);
1423
1424
1425
1426
1427 struct journal_head *jbd2_journal_add_journal_head(struct buffer_head *bh);
1428 struct journal_head *jbd2_journal_grab_journal_head(struct buffer_head *bh);
1429 void jbd2_journal_put_journal_head(struct journal_head *jh);
1430
1431
1432
1433
1434 extern struct kmem_cache *jbd2_handle_cache;
1435
1436 static inline handle_t *jbd2_alloc_handle(gfp_t gfp_flags)
1437 {
1438 return kmem_cache_zalloc(jbd2_handle_cache, gfp_flags);
1439 }
1440
1441 static inline void jbd2_free_handle(handle_t *handle)
1442 {
1443 kmem_cache_free(jbd2_handle_cache, handle);
1444 }
1445
1446
1447
1448
1449
1450 extern struct kmem_cache *jbd2_inode_cache;
1451
1452 static inline struct jbd2_inode *jbd2_alloc_inode(gfp_t gfp_flags)
1453 {
1454 return kmem_cache_alloc(jbd2_inode_cache, gfp_flags);
1455 }
1456
1457 static inline void jbd2_free_inode(struct jbd2_inode *jinode)
1458 {
1459 kmem_cache_free(jbd2_inode_cache, jinode);
1460 }
1461
1462
1463 #define JOURNAL_REVOKE_DEFAULT_HASH 256
1464 extern int jbd2_journal_init_revoke(journal_t *, int);
1465 extern void jbd2_journal_destroy_revoke_record_cache(void);
1466 extern void jbd2_journal_destroy_revoke_table_cache(void);
1467 extern int __init jbd2_journal_init_revoke_record_cache(void);
1468 extern int __init jbd2_journal_init_revoke_table_cache(void);
1469
1470 extern void jbd2_journal_destroy_revoke(journal_t *);
1471 extern int jbd2_journal_revoke (handle_t *, unsigned long long, struct buffer_head *);
1472 extern int jbd2_journal_cancel_revoke(handle_t *, struct journal_head *);
1473 extern void jbd2_journal_write_revoke_records(transaction_t *transaction,
1474 struct list_head *log_bufs);
1475
1476
1477 extern int jbd2_journal_set_revoke(journal_t *, unsigned long long, tid_t);
1478 extern int jbd2_journal_test_revoke(journal_t *, unsigned long long, tid_t);
1479 extern void jbd2_journal_clear_revoke(journal_t *);
1480 extern void jbd2_journal_switch_revoke_table(journal_t *journal);
1481 extern void jbd2_clear_buffer_revoked_flags(journal_t *journal);
1482
1483
1484
1485
1486
1487
1488
1489
1490 int jbd2_log_start_commit(journal_t *journal, tid_t tid);
1491 int __jbd2_log_start_commit(journal_t *journal, tid_t tid);
1492 int jbd2_journal_start_commit(journal_t *journal, tid_t *tid);
1493 int jbd2_log_wait_commit(journal_t *journal, tid_t tid);
1494 int jbd2_transaction_committed(journal_t *journal, tid_t tid);
1495 int jbd2_complete_transaction(journal_t *journal, tid_t tid);
1496 int jbd2_log_do_checkpoint(journal_t *journal);
1497 int jbd2_trans_will_send_data_barrier(journal_t *journal, tid_t tid);
1498
1499 void __jbd2_log_wait_for_space(journal_t *journal);
1500 extern void __jbd2_journal_drop_transaction(journal_t *, transaction_t *);
1501 extern int jbd2_cleanup_journal_tail(journal_t *);
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513 static inline int is_journal_aborted(journal_t *journal)
1514 {
1515 return journal->j_flags & JBD2_ABORT;
1516 }
1517
1518 static inline int is_handle_aborted(handle_t *handle)
1519 {
1520 if (handle->h_aborted || !handle->h_transaction)
1521 return 1;
1522 return is_journal_aborted(handle->h_transaction->t_journal);
1523 }
1524
1525 static inline void jbd2_journal_abort_handle(handle_t *handle)
1526 {
1527 handle->h_aborted = 1;
1528 }
1529
1530 #endif
1531
1532
1533
1534
1535 static inline int tid_gt(tid_t x, tid_t y)
1536 {
1537 int difference = (x - y);
1538 return (difference > 0);
1539 }
1540
1541 static inline int tid_geq(tid_t x, tid_t y)
1542 {
1543 int difference = (x - y);
1544 return (difference >= 0);
1545 }
1546
1547 extern int jbd2_journal_blocks_per_page(struct inode *inode);
1548 extern size_t journal_tag_bytes(journal_t *journal);
1549
1550 static inline bool jbd2_journal_has_csum_v2or3_feature(journal_t *j)
1551 {
1552 return jbd2_has_feature_csum2(j) || jbd2_has_feature_csum3(j);
1553 }
1554
1555 static inline int jbd2_journal_has_csum_v2or3(journal_t *journal)
1556 {
1557 WARN_ON_ONCE(jbd2_journal_has_csum_v2or3_feature(journal) &&
1558 journal->j_chksum_driver == NULL);
1559
1560 return journal->j_chksum_driver != NULL;
1561 }
1562
1563
1564
1565
1566
1567 #define JBD2_CONTROL_BLOCKS_SHIFT 5
1568
1569
1570
1571
1572
1573 static inline int jbd2_space_needed(journal_t *journal)
1574 {
1575 int nblocks = journal->j_max_transaction_buffers;
1576 return nblocks + (nblocks >> JBD2_CONTROL_BLOCKS_SHIFT);
1577 }
1578
1579
1580
1581
1582 static inline unsigned long jbd2_log_space_left(journal_t *journal)
1583 {
1584
1585 long free = journal->j_free - 32;
1586
1587 if (journal->j_committing_transaction) {
1588 unsigned long committing = atomic_read(&journal->
1589 j_committing_transaction->t_outstanding_credits);
1590
1591
1592 free -= committing + (committing >> JBD2_CONTROL_BLOCKS_SHIFT);
1593 }
1594 return max_t(long, free, 0);
1595 }
1596
1597
1598
1599
1600
1601
1602 #define BJ_None 0
1603 #define BJ_Metadata 1
1604 #define BJ_Forget 2
1605 #define BJ_Shadow 3
1606 #define BJ_Reserved 4
1607 #define BJ_Types 5
1608
1609 extern int jbd_blocks_per_page(struct inode *inode);
1610
1611
1612 #define JBD_MAX_CHECKSUM_SIZE 4
1613
1614 static inline u32 jbd2_chksum(journal_t *journal, u32 crc,
1615 const void *address, unsigned int length)
1616 {
1617 struct {
1618 struct shash_desc shash;
1619 char ctx[JBD_MAX_CHECKSUM_SIZE];
1620 } desc;
1621 int err;
1622
1623 BUG_ON(crypto_shash_descsize(journal->j_chksum_driver) >
1624 JBD_MAX_CHECKSUM_SIZE);
1625
1626 desc.shash.tfm = journal->j_chksum_driver;
1627 *(u32 *)desc.ctx = crc;
1628
1629 err = crypto_shash_update(&desc.shash, address, length);
1630 BUG_ON(err);
1631
1632 return *(u32 *)desc.ctx;
1633 }
1634
1635
1636 static inline tid_t jbd2_get_latest_transaction(journal_t *journal)
1637 {
1638 tid_t tid;
1639
1640 read_lock(&journal->j_state_lock);
1641 tid = journal->j_commit_request;
1642 if (journal->j_running_transaction)
1643 tid = journal->j_running_transaction->t_tid;
1644 read_unlock(&journal->j_state_lock);
1645 return tid;
1646 }
1647
1648 #ifdef __KERNEL__
1649
1650 #define buffer_trace_init(bh) do {} while (0)
1651 #define print_buffer_fields(bh) do {} while (0)
1652 #define print_buffer_trace(bh) do {} while (0)
1653 #define BUFFER_TRACE(bh, info) do {} while (0)
1654 #define BUFFER_TRACE2(bh, bh2, info) do {} while (0)
1655 #define JBUFFER_TRACE(jh, info) do {} while (0)
1656
1657 #endif
1658
1659 #define EFSBADCRC EBADMSG
1660 #define EFSCORRUPTED EUCLEAN
1661
1662 #endif