Subject: Re: linux-next: manual merge of the scsi tree with the rcu tree

From: "Paul E. McKenney" <[email-masked]>
Date: Sat, 2 Nov 2019 06:45:55 -0700

On Fri, Nov 01, 2019 at 07:28:22PM -0500, Ryan Attard wrote:
> I can't quite tell if it's just the diff, but it looks like the paired
> kfree_rcu(vpd_pg89, rcu) from the original patch got lopped off. Is there
> somewhere I can see the full resultant file?

I see all four instances of kfree() in origin/master in -next:

git://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git

But please do double-check.

							Thanx, Paul

> Thanks,
> Ryan
> 
> On Mon, Oct 28, 2019, 11:08 PM Stephen Rothwell <[email-masked]>
> wrote:
> 
> > Hi all,
> >
> > Today's linux-next merge of the scsi tree got a conflict in:
> >
> >   drivers/scsi/scsi_sysfs.c
> >
> > between commit:
> >
> >   81db81f82993 ("drivers/scsi: Replace rcu_swap_protected() with
> > rcu_replace()")
> >
> > from the rcu tree and commit:
> >
> >   d188b0675b21 ("scsi: core: Add sysfs attributes for VPD pages 0h and
> > 89h")
> >
> > from the scsi 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 drivers/scsi/scsi_sysfs.c
> > index cc51f4756077,0fa2ed343c7f..000000000000
> > --- a/drivers/scsi/scsi_sysfs.c
> > +++ b/drivers/scsi/scsi_sysfs.c
> > @@@ -466,12 -467,18 +467,18 @@@ static void scsi_device_dev_release_use
> >         sdev->request_queue = NULL;
> >
> >         mutex_lock(&sdev->inquiry_mutex);
> >  -      rcu_swap_protected(sdev->vpd_pg0, vpd_pg0,
> >  -                         lockdep_is_held(&sdev->inquiry_mutex));
> >  -      rcu_swap_protected(sdev->vpd_pg80, vpd_pg80,
> >  -                         lockdep_is_held(&sdev->inquiry_mutex));
> >  -      rcu_swap_protected(sdev->vpd_pg83, vpd_pg83,
> >  -                         lockdep_is_held(&sdev->inquiry_mutex));
> >  -      rcu_swap_protected(sdev->vpd_pg89, vpd_pg89,
> >  -                         lockdep_is_held(&sdev->inquiry_mutex));
> > ++      vpd_pg0 = rcu_replace_pointer(sdev->vpd_pg0, vpd_pg0,
> > ++
> > lockdep_is_held(&sdev->inquiry_mutex));
> >  +      vpd_pg80 = rcu_replace_pointer(sdev->vpd_pg80, vpd_pg80,
> >  +
> >  lockdep_is_held(&sdev->inquiry_mutex));
> >  +      vpd_pg83 = rcu_replace_pointer(sdev->vpd_pg83, vpd_pg83,
> >  +
> >  lockdep_is_held(&sdev->inquiry_mutex));
> > ++      vpd_pg89 = rcu_replace_pointer(sdev->vpd_pg89, vpd_pg89,
> > ++
> >  lockdep_is_held(&sdev->inquiry_mutex));
> >         mutex_unlock(&sdev->inquiry_mutex);
> >
> > +       if (vpd_pg0)
> > +               kfree_rcu(vpd_pg0, rcu);
> >         if (vpd_pg83)
> >                 kfree_rcu(vpd_pg83, rcu);
> >         if (vpd_pg80)
> >