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 JOURNAL_HEAD_H_INCLUDED 11 #define JOURNAL_HEAD_H_INCLUDED 12 13 typedef unsigned int tid_t; /* Unique transaction ID */ 14 typedef struct transaction_s transaction_t; /* Compound transaction type */ 15 struct buffer_head; 16 17 struct journal_head { 18 /* 19 * Points back to our buffer_head. [jbd_lock_bh_journal_head()] 20 */ 21 struct buffer_head *b_bh; 22 23 /* 24 * Reference count - see description in journal.c 25 * [jbd_lock_bh_journal_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 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 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 journal_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 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 journal_head *b_cpnext, *b_cpprev; 90 }; 91 92 #endif /* JOURNAL_HEAD_H_INCLUDED */ 93