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