⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jbd.h

📁 可以在不启动LINUX的情况下直接访问EXT2和EXT3格式的磁盘
💻 H
📖 第 1 页 / 共 3 页
字号:
 * @h_jdata: flag to force data journaling * @h_aborted: flag indicating fatal error on handle * @h_lockdep_map: lockdep info for debugging lock problems **//* Docbook can't yet cope with the bit fields, but will leave the documentation * in so it can be fixed later. */struct handle_s{	/* Which compound transaction is this update a part of? */	transaction_t		*h_transaction;	/* Number of remaining buffers we are allowed to dirty: */	int			h_buffer_credits;	/* Reference count on this handle */	int			h_ref;	/* Field for caller's use to track errors through large fs */	/* operations */	int			h_err;	/* Flags [no locking] */	unsigned int	h_sync:		1;	/* sync-on-close */	unsigned int	h_jdata:	1;	/* force data journaling */	unsigned int	h_aborted:	1;	/* fatal error on handle */#ifdef CONFIG_DEBUG_LOCK_ALLOC	struct lockdep_map	h_lockdep_map;#endif};/* The transaction_t type is the guts of the journaling mechanism.  It * tracks a compound transaction through its various states: * * RUNNING:	accepting new updates * LOCKED:	Updates still running but we don't accept new ones * RUNDOWN:	Updates are tidying up but have finished requesting *		new buffers to modify (state not used for now) * FLUSH:       All updates complete, but we are still writing to disk * COMMIT:      All data on disk, writing commit record * FINISHED:	We still have to keep the transaction for checkpointing. * * The transaction keeps track of all of the buffers modified by a * running transaction, and all of the buffers committed but not yet * flushed to home for finished transactions. *//* * Lock ranking: * *    j_list_lock *      ->jbd_lock_bh_journal_head()	(This is "innermost") * *    j_state_lock *    ->jbd_lock_bh_state() * *    jbd_lock_bh_state() *    ->j_list_lock * *    j_state_lock *    ->t_handle_lock * *    j_state_lock *    ->j_list_lock			(journal_unmap_buffer) * */struct transaction_s{	/* Pointer to the journal for this transaction. [no locking] */	journal_t		*t_journal;	/* Sequence number for this transaction [no locking] */	tid_t			t_tid;	/*	 * Transaction's current state	 * [no locking - only kjournald alters this]	 * [j_list_lock] guards transition of a transaction into T_FINISHED	 * state and subsequent call of __journal_drop_transaction()	 * FIXME: needs barriers	 * KLUDGE: [use j_state_lock]	 */	enum {		T_RUNNING,		T_LOCKED,		T_RUNDOWN,		T_FLUSH,		T_COMMIT,		T_FINISHED	}			t_state;	/*	 * Where in the log does this transaction's commit start? [no locking]	 */	unsigned long		t_log_start;	/* Number of buffers on the t_buffers list [j_list_lock] */	int			t_nr_buffers;	/*	 * Doubly-linked circular list of all buffers reserved but not yet	 * modified by this transaction [j_list_lock]	 */	struct journal_head	*t_reserved_list;	/*	 * Doubly-linked circular list of all buffers under writeout during	 * commit [j_list_lock]	 */	struct journal_head	*t_locked_list;	/*	 * Doubly-linked circular list of all metadata buffers owned by this	 * transaction [j_list_lock]	 */	struct journal_head	*t_buffers;	/*	 * Doubly-linked circular list of all data buffers still to be	 * flushed before this transaction can be committed [j_list_lock]	 */	struct journal_head	*t_sync_datalist;	/*	 * Doubly-linked circular list of all forget buffers (superseded	 * buffers which we can un-checkpoint once this transaction commits)	 * [j_list_lock]	 */	struct journal_head	*t_forget;	/*	 * Doubly-linked circular list of all buffers still to be flushed before	 * this transaction can be checkpointed. [j_list_lock]	 */	struct journal_head	*t_checkpoint_list;	/*	 * Doubly-linked circular list of all buffers submitted for IO while	 * checkpointing. [j_list_lock]	 */	struct journal_head	*t_checkpoint_io_list;	/*	 * Doubly-linked circular list of temporary buffers currently undergoing	 * IO in the log [j_list_lock]	 */	struct journal_head	*t_iobuf_list;	/*	 * Doubly-linked circular list of metadata buffers being shadowed by log	 * IO.  The IO buffers on the iobuf list and the shadow buffers on this	 * list match each other one for one at all times. [j_list_lock]	 */	struct journal_head	*t_shadow_list;	/*	 * Doubly-linked circular list of control buffers being written to the	 * log. [j_list_lock]	 */	struct journal_head	*t_log_list;	/*	 * Protects info related to handles	 */	spinlock_t		t_handle_lock;	/*	 * Number of outstanding updates running on this transaction	 * [t_handle_lock]	 */	int			t_updates;	/*	 * Number of buffers reserved for use by all handles in this transaction	 * handle but not yet modified. [t_handle_lock]	 */	int			t_outstanding_credits;	/*	 * Forward and backward links for the circular list of all transactions	 * awaiting checkpoint. [j_list_lock]	 */	transaction_t		*t_cpnext, *t_cpprev;	/*	 * When will the transaction expire (become due for commit), in jiffies?	 * [no locking]	 */	unsigned long		t_expires;	/*	 * How many handles used this transaction? [t_handle_lock]	 */	int t_handle_count;};/** * struct journal_s - The journal_s type is the concrete type associated with *     journal_t. * @j_flags:  General journaling state flags * @j_errno:  Is there an outstanding uncleared error on the journal (from a *     prior abort)? * @j_sb_buffer: First part of superblock buffer * @j_superblock: Second part of superblock buffer * @j_format_version: Version of the superblock format * @j_state_lock: Protect the various scalars in the journal * @j_barrier_count:  Number of processes waiting to create a barrier lock * @j_barrier: The barrier lock itself * @j_running_transaction: The current running transaction.. * @j_committing_transaction: the transaction we are pushing to disk * @j_checkpoint_transactions: a linked circular list of all transactions *  waiting for checkpointing * @j_wait_transaction_locked: Wait queue for waiting for a locked transaction *  to start committing, or for a barrier lock to be released * @j_wait_logspace: Wait queue for waiting for checkpointing to complete * @j_wait_done_commit: Wait queue for waiting for commit to complete * @j_wait_checkpoint:  Wait queue to trigger checkpointing * @j_wait_commit: Wait queue to trigger commit * @j_wait_updates: Wait queue to wait for updates to complete * @j_checkpoint_mutex: Mutex for locking against concurrent checkpoints * @j_head: Journal head - identifies the first unused block in the journal * @j_tail: Journal tail - identifies the oldest still-used block in the *  journal. * @j_free: Journal free - how many free blocks are there in the journal? * @j_first: The block number of the first usable block * @j_last: The block number one beyond the last usable block * @j_dev: Device where we store the journal * @j_blocksize: blocksize for the location where we store the journal. * @j_blk_offset: starting block offset for into the device where we store the *     journal * @j_fs_dev: Device which holds the client fs.  For internal journal this will *     be equal to j_dev * @j_maxlen: Total maximum capacity of the journal region on disk. * @j_list_lock: Protects the buffer lists and internal buffer state. * @j_inode: Optional inode where we store the journal.  If present, all journal *     block numbers are mapped into this inode via bmap(). * @j_tail_sequence:  Sequence number of the oldest transaction in the log * @j_transaction_sequence: Sequence number of the next transaction to grant * @j_commit_sequence: Sequence number of the most recently committed *  transaction * @j_commit_request: Sequence number of the most recent transaction wanting *     commit * @j_uuid: Uuid of client object. * @j_task: Pointer to the current commit thread for this journal * @j_max_transaction_buffers:  Maximum number of metadata buffers to allow in a *     single compound commit transaction * @j_commit_interval: What is the maximum transaction lifetime before we begin *  a commit? * @j_commit_timer:  The timer used to wakeup the commit thread * @j_revoke_lock: Protect the revoke table * @j_revoke: The revoke table - maintains the list of revoked blocks in the *     current transaction. * @j_revoke_table: alternate revoke tables for j_revoke * @j_wbuf: array of buffer_heads for journal_commit_transaction * @j_wbufsize: maximum number of buffer_heads allowed in j_wbuf, the *	number that will fit in j_blocksize * @j_last_sync_writer: most recent pid which did a synchronous write * @j_private: An opaque pointer to fs-private information. */struct journal_s{	/* General journaling state flags [j_state_lock] */	unsigned long		j_flags;	/*	 * Is there an outstanding uncleared error on the journal (from a prior	 * abort)? [j_state_lock]	 */	int			j_errno;	/* The superblock buffer */	struct buffer_head	*j_sb_buffer;	journal_superblock_t	*j_superblock;	/* Version of the superblock format */	int			j_format_version;	/*	 * Protect the various scalars in the journal	 */	spinlock_t		j_state_lock;	/*	 * Number of processes waiting to create a barrier lock [j_state_lock]	 */	int			j_barrier_count;	/* The barrier lock itself */	struct mutex		j_barrier;	/*	 * Transactions: The current running transaction...	 * [j_state_lock] [caller holding open handle]	 */	transaction_t		*j_running_transaction;	/*	 * the transaction we are pushing to disk	 * [j_state_lock] [caller holding open handle]	 */	transaction_t		*j_committing_transaction;	/*	 * ... and a linked circular list of all transactions waiting for	 * checkpointing. [j_list_lock]	 */	transaction_t		*j_checkpoint_transactions;	/*	 * Wait queue for waiting for a locked transaction to start committing,	 * or for a barrier lock to be released	 */	wait_queue_head_t	j_wait_transaction_locked;	/* Wait queue for waiting for checkpointing to complete */	wait_queue_head_t	j_wait_logspace;	/* Wait queue for waiting for commit to complete */	wait_queue_head_t	j_wait_done_commit;	/* Wait queue to trigger checkpointing */	wait_queue_head_t	j_wait_checkpoint;	/* Wait queue to trigger commit */	wait_queue_head_t	j_wait_commit;	/* Wait queue to wait for updates to complete */	wait_queue_head_t	j_wait_updates;	/* Semaphore for locking against concurrent checkpoints */	struct mutex		j_checkpoint_mutex;	/*	 * Journal head: identifies the first unused block in the journal.	 * [j_state_lock]	 */	unsigned long		j_head;	/*	 * Journal tail: identifies the oldest still-used block in the journal.	 * [j_state_lock]	 */	unsigned long		j_tail;	/*	 * Journal free: how many free blocks are there in the journal?	 * [j_state_lock]	 */	unsigned long		j_free;	/*	 * Journal start and end: the block numbers of the first usable block	 * and one beyond the last usable block in the journal. [j_state_lock]	 */	unsigned long		j_first;	unsigned long		j_last;	/*	 * Device, blocksize and starting block offset for the location where we	 * store the journal.	 */	struct block_device	*j_dev;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -