Btrfs: add a flags field to btrfs_transaction
I want to set some per transaction flags, so instead of adding yet another int lets just convert the current two int indicators to flags and add a flags field for future use. Thanks, Signed-off-by: Josef Bacik <jbacik@fb.com> Signed-off-by: Chris Mason <clm@fb.com>
This commit is contained in:
		
							parent
							
								
									0b670dc44c
								
							
						
					
					
						commit
						3204d33cda
					
				| @ -4066,7 +4066,8 @@ commit_trans: | ||||
| 			if (IS_ERR(trans)) | ||||
| 				return PTR_ERR(trans); | ||||
| 			if (have_pinned_space >= 0 || | ||||
| 			    trans->transaction->have_free_bgs || | ||||
| 			    test_bit(BTRFS_TRANS_HAVE_FREE_BGS, | ||||
| 				     &trans->transaction->flags) || | ||||
| 			    need_commit > 0) { | ||||
| 				ret = btrfs_commit_transaction(trans, root); | ||||
| 				if (ret) | ||||
| @ -8938,7 +8939,7 @@ again: | ||||
| 	 * back off and let this transaction commit | ||||
| 	 */ | ||||
| 	mutex_lock(&root->fs_info->ro_block_group_mutex); | ||||
| 	if (trans->transaction->dirty_bg_run) { | ||||
| 	if (test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &trans->transaction->flags)) { | ||||
| 		u64 transid = trans->transid; | ||||
| 
 | ||||
| 		mutex_unlock(&root->fs_info->ro_block_group_mutex); | ||||
|  | ||||
| @ -239,10 +239,9 @@ loop: | ||||
| 	 * commit the transaction. | ||||
| 	 */ | ||||
| 	atomic_set(&cur_trans->use_count, 2); | ||||
| 	cur_trans->have_free_bgs = 0; | ||||
| 	atomic_set(&cur_trans->pending_ordered, 0); | ||||
| 	cur_trans->flags = 0; | ||||
| 	cur_trans->start_time = get_seconds(); | ||||
| 	cur_trans->dirty_bg_run = 0; | ||||
| 
 | ||||
| 	memset(&cur_trans->delayed_refs, 0, sizeof(cur_trans->delayed_refs)); | ||||
| 
 | ||||
| @ -1837,7 +1836,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | ||||
| 		return ret; | ||||
| 	} | ||||
| 
 | ||||
| 	if (!cur_trans->dirty_bg_run) { | ||||
| 	if (!test_bit(BTRFS_TRANS_DIRTY_BG_RUN, &cur_trans->flags)) { | ||||
| 		int run_it = 0; | ||||
| 
 | ||||
| 		/* this mutex is also taken before trying to set
 | ||||
| @ -1846,18 +1845,17 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | ||||
| 		 * after a extents from that block group have been | ||||
| 		 * allocated for cache files.  btrfs_set_block_group_ro | ||||
| 		 * will wait for the transaction to commit if it | ||||
| 		 * finds dirty_bg_run = 1 | ||||
| 		 * finds BTRFS_TRANS_DIRTY_BG_RUN set. | ||||
| 		 * | ||||
| 		 * The dirty_bg_run flag is also used to make sure only | ||||
| 		 * one process starts all the block group IO.  It wouldn't | ||||
| 		 * The BTRFS_TRANS_DIRTY_BG_RUN flag is also used to make sure | ||||
| 		 * only one process starts all the block group IO.  It wouldn't | ||||
| 		 * hurt to have more than one go through, but there's no | ||||
| 		 * real advantage to it either. | ||||
| 		 */ | ||||
| 		mutex_lock(&root->fs_info->ro_block_group_mutex); | ||||
| 		if (!cur_trans->dirty_bg_run) { | ||||
| 		if (!test_and_set_bit(BTRFS_TRANS_DIRTY_BG_RUN, | ||||
| 				      &cur_trans->flags)) | ||||
| 			run_it = 1; | ||||
| 			cur_trans->dirty_bg_run = 1; | ||||
| 		} | ||||
| 		mutex_unlock(&root->fs_info->ro_block_group_mutex); | ||||
| 
 | ||||
| 		if (run_it) | ||||
| @ -2127,7 +2125,7 @@ int btrfs_commit_transaction(struct btrfs_trans_handle *trans, | ||||
| 
 | ||||
| 	btrfs_finish_extent_commit(trans, root); | ||||
| 
 | ||||
| 	if (cur_trans->have_free_bgs) | ||||
| 	if (test_bit(BTRFS_TRANS_HAVE_FREE_BGS, &cur_trans->flags)) | ||||
| 		btrfs_clear_space_info_full(root->fs_info); | ||||
| 
 | ||||
| 	root->fs_info->last_trans_committed = cur_trans->transid; | ||||
|  | ||||
| @ -32,6 +32,9 @@ enum btrfs_trans_state { | ||||
| 	TRANS_STATE_MAX			= 6, | ||||
| }; | ||||
| 
 | ||||
| #define BTRFS_TRANS_HAVE_FREE_BGS	0 | ||||
| #define BTRFS_TRANS_DIRTY_BG_RUN	1 | ||||
| 
 | ||||
| struct btrfs_transaction { | ||||
| 	u64 transid; | ||||
| 	/*
 | ||||
| @ -48,10 +51,7 @@ struct btrfs_transaction { | ||||
| 	atomic_t use_count; | ||||
| 	atomic_t pending_ordered; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * true if there is free bgs operations in this transaction | ||||
| 	 */ | ||||
| 	int have_free_bgs; | ||||
| 	unsigned long flags; | ||||
| 
 | ||||
| 	/* Be protected by fs_info->trans_lock when we want to change it. */ | ||||
| 	enum btrfs_trans_state state; | ||||
| @ -81,7 +81,6 @@ struct btrfs_transaction { | ||||
| 	spinlock_t dropped_roots_lock; | ||||
| 	struct btrfs_delayed_ref_root delayed_refs; | ||||
| 	int aborted; | ||||
| 	int dirty_bg_run; | ||||
| }; | ||||
| 
 | ||||
| #define __TRANS_FREEZABLE	(1U << 0) | ||||
|  | ||||
| @ -1462,7 +1462,7 @@ again: | ||||
| 		btrfs_std_error(root->fs_info, ret, | ||||
| 			    "Failed to remove dev extent item"); | ||||
| 	} else { | ||||
| 		trans->transaction->have_free_bgs = 1; | ||||
| 		set_bit(BTRFS_TRANS_HAVE_FREE_BGS, &trans->transaction->flags); | ||||
| 	} | ||||
| out: | ||||
| 	btrfs_free_path(path); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user