• Miao Xie's avatar
    Btrfs: make the state of the transaction more readable · 4a9d8bde
    Miao Xie authored
    We used 3 variants to track the state of the transaction, it was complex
    and wasted the memory space. Besides that, it was hard to understand that
    which types of the transaction handles should be blocked in each transaction
    state, so the developers often made mistakes.
    
    This patch improved the above problem. In this patch, we define 6 states
    for the transaction,
      enum btrfs_trans_state {
    	TRANS_STATE_RUNNING		= 0,
    	TRANS_STATE_BLOCKED		= 1,
    	TRANS_STATE_COMMIT_START	= 2,
    	TRANS_STATE_COMMIT_DOING	= 3,
    	TRANS_STATE_UNBLOCKED		= 4,
    	TRANS_STATE_COMPLETED		= 5,
    	TRANS_STATE_MAX			= 6,
      }
    and just use 1 variant to track those state.
    
    In order to make the blocked handle types for each state more clear,
    we introduce a array:
      unsigned int btrfs_blocked_trans_types[TRANS_STATE_MAX] = {
    	[TRANS_STATE_RUNNING]		= 0U,
    	[TRANS_STATE_BLOCKED]		= (__TRANS_USERSPACE |
    					   __TRANS_START),
    	[TRANS_STATE_COMMIT_START]	= (__TRANS_USERSPACE |
    					   __TRANS_START |
    					   __TRANS_ATTACH),
    	[TRANS_STATE_COMMIT_DOING]	= (__TRANS_USERSPACE |
    					   __TRANS_START |
    					   __TRANS_ATTACH |
    					   __TRANS_JOIN),
    	[TRANS_STATE_UNBLOCKED]		= (__TRANS_USERSPACE |
    					   __TRANS_START |
    					   __TRANS_ATTACH |
    					   __TRANS_JOIN |
    					   __TRANS_JOIN_NOLOCK),
    	[TRANS_STATE_COMPLETED]		= (__TRANS_USERSPACE |
    					   __TRANS_START |
    					   __TRANS_ATTACH |
    					   __TRANS_JOIN |
    					   __TRANS_JOIN_NOLOCK),
      }
    it is very intuitionistic.
    
    Besides that, because we remove ->in_commit in transaction structure, so
    the lock ->commit_lock which was used to protect it is unnecessary, remove
    ->commit_lock.
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Signed-off-by: default avatarJosef Bacik <jbacik@fusionio.com>
    4a9d8bde
disk-io.c 109 KB