Line data Source code
1 : /*
2 : * include/linux/journal-head.h
3 : *
4 : * buffer_head fields for JBD
5 : *
6 : * 27 May 2001 Andrew Morton
7 : * Created - pulled out of fs.h
8 : */
9 :
10 : #ifndef JOURNAL_HEAD_H_INCLUDED
11 : #define JOURNAL_HEAD_H_INCLUDED
12 :
13 1 : typedef unsigned int tid_t; /* Unique transaction ID */
14 2 : typedef struct transaction_s transaction_t; /* Compound transaction type */
15 2 :
16 :
17 : struct buffer_head;
18 :
19 : struct journal_head {
20 : /*
21 : * Points back to our buffer_head. [jbd_lock_bh_journal_head()]
22 : */
23 : struct buffer_head *b_bh;
24 :
25 : /*
26 : * Reference count - see description in journal.c
27 : * [jbd_lock_bh_journal_head()]
28 : */
29 : int b_jcount;
30 :
31 : /*
32 : * Journalling list for this buffer [jbd_lock_bh_state()]
33 : */
34 : unsigned b_jlist;
35 :
36 : /*
37 : * This flag signals the buffer has been modified by
38 : * the currently running transaction
39 : * [jbd_lock_bh_state()]
40 : */
41 : unsigned b_modified;
42 :
43 : /*
44 : * Copy of the buffer data frozen for writing to the log.
45 : * [jbd_lock_bh_state()]
46 : */
47 : char *b_frozen_data;
48 :
49 : /*
50 : * Pointer to a saved copy of the buffer containing no uncommitted
51 : * deallocation references, so that allocations can avoid overwriting
52 : * uncommitted deletes. [jbd_lock_bh_state()]
53 : */
54 : char *b_committed_data;
55 :
56 : /*
57 : * Pointer to the compound transaction which owns this buffer's
58 : * metadata: either the running transaction or the committing
59 : * transaction (if there is one). Only applies to buffers on a
60 : * transaction's data or metadata journaling list.
61 : * [j_list_lock] [jbd_lock_bh_state()]
62 : */
63 : transaction_t *b_transaction;
64 :
65 : /*
66 : * Pointer to the running compound transaction which is currently
67 : * modifying the buffer's metadata, if there was already a transaction
68 : * committing it when the new transaction touched it.
69 : * [t_list_lock] [jbd_lock_bh_state()]
70 : */
71 : transaction_t *b_next_transaction;
72 :
73 : /*
74 : * Doubly-linked list of buffers on a transaction's data, metadata or
75 : * forget queue. [t_list_lock] [jbd_lock_bh_state()]
76 : */
77 : struct journal_head *b_tnext, *b_tprev;
78 :
79 : /*
80 : * Pointer to the compound transaction against which this buffer
81 : * is checkpointed. Only dirty buffers can be checkpointed.
82 : * [j_list_lock]
83 : */
84 : transaction_t *b_cp_transaction;
85 :
86 : /*
87 : * Doubly-linked list of buffers still remaining to be flushed
88 : * before an old transaction can be checkpointed.
89 : * [j_list_lock]
90 : */
91 : struct journal_head *b_cpnext, *b_cpprev;
92 :
93 : /* Trigger type */
94 : struct jbd2_buffer_trigger_type *b_triggers;
95 :
96 : /* Trigger type for the committing transaction's frozen data */
97 : struct jbd2_buffer_trigger_type *b_frozen_triggers;
98 : };
99 :
100 : #endif /* JOURNAL_HEAD_H_INCLUDED */
|