diff options
Diffstat (limited to 'include/linux/jbd2.h')
| -rw-r--r-- | include/linux/jbd2.h | 23 | 
1 files changed, 19 insertions, 4 deletions
| diff --git a/include/linux/jbd2.h b/include/linux/jbd2.h index efb232c5f668..dfaa1f4dcb0c 100644 --- a/include/linux/jbd2.h +++ b/include/linux/jbd2.h @@ -491,10 +491,6 @@ struct jbd2_journal_handle  	unsigned long		h_start_jiffies;  	unsigned int		h_requested_credits; - -#ifdef CONFIG_DEBUG_LOCK_ALLOC -	struct lockdep_map	h_lockdep_map; -#endif  }; @@ -793,6 +789,7 @@ jbd2_time_diff(unsigned long start, unsigned long end)   * @j_proc_entry: procfs entry for the jbd statistics directory   * @j_stats: Overall statistics   * @j_private: An opaque pointer to fs-private information. + * @j_trans_commit_map: Lockdep entity to track transaction commit dependencies   */  struct journal_s @@ -1035,8 +1032,26 @@ struct journal_s  	/* Precomputed journal UUID checksum for seeding other checksums */  	__u32 j_csum_seed; + +#ifdef CONFIG_DEBUG_LOCK_ALLOC +	/* +	 * Lockdep entity to track transaction commit dependencies. Handles +	 * hold this "lock" for read, when we wait for commit, we acquire the +	 * "lock" for writing. This matches the properties of jbd2 journalling +	 * where the running transaction has to wait for all handles to be +	 * dropped to commit that transaction and also acquiring a handle may +	 * require transaction commit to finish. +	 */ +	struct lockdep_map	j_trans_commit_map; +#endif  }; +#define jbd2_might_wait_for_commit(j) \ +	do { \ +		rwsem_acquire(&j->j_trans_commit_map, 0, 0, _THIS_IP_); \ +		rwsem_release(&j->j_trans_commit_map, 1, _THIS_IP_); \ +	} while (0) +  /* journal feature predicate functions */  #define JBD2_FEATURE_COMPAT_FUNCS(name, flagname) \  static inline bool jbd2_has_feature_##name(journal_t *j) \ |