cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

journal-head.h (2984B)


      1/* SPDX-License-Identifier: GPL-2.0 */
      2/*
      3 * include/linux/journal-head.h
      4 *
      5 * buffer_head fields for JBD
      6 *
      7 * 27 May 2001 Andrew Morton
      8 *	Created - pulled out of fs.h
      9 */
     10
     11#ifndef JOURNAL_HEAD_H_INCLUDED
     12#define JOURNAL_HEAD_H_INCLUDED
     13
     14#include <linux/spinlock.h>
     15
     16typedef unsigned int		tid_t;		/* Unique transaction ID */
     17typedef struct transaction_s	transaction_t;	/* Compound transaction type */
     18
     19
     20struct buffer_head;
     21
     22struct journal_head {
     23	/*
     24	 * Points back to our buffer_head. [jbd_lock_bh_journal_head()]
     25	 */
     26	struct buffer_head *b_bh;
     27
     28	/*
     29	 * Protect the buffer head state
     30	 */
     31	spinlock_t b_state_lock;
     32
     33	/*
     34	 * Reference count - see description in journal.c
     35	 * [jbd_lock_bh_journal_head()]
     36	 */
     37	int b_jcount;
     38
     39	/*
     40	 * Journalling list for this buffer [b_state_lock]
     41	 * NOTE: We *cannot* combine this with b_modified into a bitfield
     42	 * as gcc would then (which the C standard allows but which is
     43	 * very unuseful) make 64-bit accesses to the bitfield and clobber
     44	 * b_jcount if its update races with bitfield modification.
     45	 */
     46	unsigned b_jlist;
     47
     48	/*
     49	 * This flag signals the buffer has been modified by
     50	 * the currently running transaction
     51	 * [b_state_lock]
     52	 */
     53	unsigned b_modified;
     54
     55	/*
     56	 * Copy of the buffer data frozen for writing to the log.
     57	 * [b_state_lock]
     58	 */
     59	char *b_frozen_data;
     60
     61	/*
     62	 * Pointer to a saved copy of the buffer containing no uncommitted
     63	 * deallocation references, so that allocations can avoid overwriting
     64	 * uncommitted deletes. [b_state_lock]
     65	 */
     66	char *b_committed_data;
     67
     68	/*
     69	 * Pointer to the compound transaction which owns this buffer's
     70	 * metadata: either the running transaction or the committing
     71	 * transaction (if there is one).  Only applies to buffers on a
     72	 * transaction's data or metadata journaling list.
     73	 * [j_list_lock] [b_state_lock]
     74	 * Either of these locks is enough for reading, both are needed for
     75	 * changes.
     76	 */
     77	transaction_t *b_transaction;
     78
     79	/*
     80	 * Pointer to the running compound transaction which is currently
     81	 * modifying the buffer's metadata, if there was already a transaction
     82	 * committing it when the new transaction touched it.
     83	 * [t_list_lock] [b_state_lock]
     84	 */
     85	transaction_t *b_next_transaction;
     86
     87	/*
     88	 * Doubly-linked list of buffers on a transaction's data, metadata or
     89	 * forget queue. [t_list_lock] [b_state_lock]
     90	 */
     91	struct journal_head *b_tnext, *b_tprev;
     92
     93	/*
     94	 * Pointer to the compound transaction against which this buffer
     95	 * is checkpointed.  Only dirty buffers can be checkpointed.
     96	 * [j_list_lock]
     97	 */
     98	transaction_t *b_cp_transaction;
     99
    100	/*
    101	 * Doubly-linked list of buffers still remaining to be flushed
    102	 * before an old transaction can be checkpointed.
    103	 * [j_list_lock]
    104	 */
    105	struct journal_head *b_cpnext, *b_cpprev;
    106
    107	/* Trigger type */
    108	struct jbd2_buffer_trigger_type *b_triggers;
    109
    110	/* Trigger type for the committing transaction's frozen data */
    111	struct jbd2_buffer_trigger_type *b_frozen_triggers;
    112};
    113
    114#endif		/* JOURNAL_HEAD_H_INCLUDED */