Hi all, On Thu, 7 Nov 2019 13:21:38 +1100 Stephen Rothwell 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