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