Subject: Re: linux-next: manual merge of the tip tree with the ext4 tree

From: Stephen Rothwell <[email-masked]>
Date: Thu, 28 Nov 2019 10:57:05 +1100

Hi all,

On Thu, 7 Nov 2019 13:21:38 +1100 Stephen Rothwell <[email-masked]> wrote:
>
> Hi all,
> 
> Today's linux-next merge of the tip tree got a conflict in:
> 
>   fs/jbd2/transaction.c
> 
> between commit:
> 
>   ec8b6f600e49 ("jbd2: Factor out common parts of stopping and restarting a handle")
> 
> from the ext4 tree and commit:
> 
>   5facae4f3549 ("locking/lockdep: Remove unused @nested argument from lock_release()")
> 
> from the tip tree.
> 
> I fixed it up (see below) and can carry the fix as necessary. This
> is now fixed as far as linux-next is concerned, but any non trivial
> conflicts should be mentioned to your upstream maintainer when your tree
> is submitted for merging.  You may also want to consider cooperating
> with the maintainer of the conflicting tree to minimise any particularly
> complex conflicts.
> 
> -- 
> Cheers,
> Stephen Rothwell
> 
> diff --cc fs/jbd2/transaction.c
> index c068912408dd,b25ebdcabfa3..000000000000
> --- a/fs/jbd2/transaction.c
> +++ b/fs/jbd2/transaction.c
> @@@ -690,49 -655,6 +690,49 @@@ error_out
>   	return result;
>   }
>   
>  +static void stop_this_handle(handle_t *handle)
>  +{
>  +	transaction_t *transaction = handle->h_transaction;
>  +	journal_t *journal = transaction->t_journal;
>  +	int revokes;
>  +
>  +	J_ASSERT(journal_current_handle() == handle);
>  +	J_ASSERT(atomic_read(&transaction->t_updates) > 0);
>  +	current->journal_info = NULL;
>  +	/*
>  +	 * Subtract necessary revoke descriptor blocks from handle credits. We
>  +	 * take care to account only for revoke descriptor blocks the
>  +	 * transaction will really need as large sequences of transactions with
>  +	 * small numbers of revokes are relatively common.
>  +	 */
>  +	revokes = handle->h_revoke_credits_requested - handle->h_revoke_credits;
>  +	if (revokes) {
>  +		int t_revokes, revoke_descriptors;
>  +		int rr_per_blk = journal->j_revoke_records_per_block;
>  +
>  +		WARN_ON_ONCE(DIV_ROUND_UP(revokes, rr_per_blk)
>  +				> handle->h_total_credits);
>  +		t_revokes = atomic_add_return(revokes,
>  +				&transaction->t_outstanding_revokes);
>  +		revoke_descriptors =
>  +			DIV_ROUND_UP(t_revokes, rr_per_blk) -
>  +			DIV_ROUND_UP(t_revokes - revokes, rr_per_blk);
>  +		handle->h_total_credits -= revoke_descriptors;
>  +	}
>  +	atomic_sub(handle->h_total_credits,
>  +		   &transaction->t_outstanding_credits);
>  +	if (handle->h_rsv_handle)
>  +		__jbd2_journal_unreserve_handle(handle->h_rsv_handle);
>  +	if (atomic_dec_and_test(&transaction->t_updates))
>  +		wake_up(&journal->j_wait_updates);
>  +
> - 	rwsem_release(&journal->j_trans_commit_map, 1, _THIS_IP_);
> ++	rwsem_release(&journal->j_trans_commit_map, _THIS_IP_);
>  +	/*
>  +	 * Scope of the GFP_NOFS context is over here and so we can restore the
>  +	 * original alloc context.
>  +	 */
>  +	memalloc_nofs_restore(handle->saved_alloc_context);
>  +}
>   
>   /**
>    * int jbd2_journal_restart() - restart a handle .

This is now a conflict between the ext4 tree and Linus' tree.

-- 
Cheers,
Stephen Rothwell