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