----- Original Message -----
> From: "Nicholas A. Bellinger" <[email protected]>
> To: "CAI Qian" <[email protected]>
> Cc: [email protected], [email protected], 
> [email protected], "target-devel"
> <[email protected]>
> Sent: Friday, January 18, 2013 5:30:08 AM
> Subject: Re: FAILED: patch "[PATCH] target: Add link_magic for fabric 
> allow_link destination" failed to apply to
> 3.7-stable tree
> 
> Hi CAI,
> 
> On Wed, 2013-01-16 at 02:57 -0500, CAI Qian wrote:
> > Hi, I am unsure if this is the right back-port patch but it is
> > applied and built
> > fine on both the 3.7.x and 3.4.x stable (looks like the 3.0.x needs
> > something else).
> > The patch is under some HBA regression testing at the moment. Once
> > it passed, I'll
> > post it formally here, but feel free to review it (below) now. The
> > change here is
> > only in the first hunk due to target_alloc_device() is not present
> > in the code base
> > here, so make change in core_dev_setup_virtual_lun0() directly.
> > 
> 
> So this backport patch is missing the dev->dev_link_magic =
> SE_DEV_LINK_MAGIC assignment for normal se_device setup, eg: not just
> the special core_dev_setup_virtual_lun0() case.
> 
> See below..
> 
> > Regards,
> > CAI Qian
> > 
> > diff --git a/drivers/target/target_core_device.c
> > b/drivers/target/target_core_device.c
> > index 9abef9f..0943ff0 100644
> > --- a/drivers/target/target_core_device.c
> > +++ b/drivers/target/target_core_device.c
> > @@ -1624,6 +1624,7 @@ int core_dev_setup_virtual_lun0(void)
> >             ret = PTR_ERR(dev);
> >             goto out;
> >     }
> > +   dev->dev_link_magic = SE_DEV_LINK_MAGIC;
> >     se_dev->se_dev_ptr = dev;
> >     g_lun0_dev = dev;
> >  
> 
> So this ->dev_link_magic assignment will need to happen after the
> *dev
> kzalloc() in transport_add_device_to_core_hba() here:
> 
> http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=drivers/target/target_core_transport.c;hb=refs/heads/linux-3.7.y#l1052
> 
> and here:
> 
> http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=drivers/target/target_core_transport.c;hb=refs/heads/linux-3.4.y#l1318
> 
> Other than this missing bit, your backport of this patch looks fine.
> 
> Care to re-post for stable..?  ;)
Sure, thanks for pointing out.
> 
> --nab
> 
> > diff --git a/drivers/target/target_core_fabric_configfs.c
> > b/drivers/target/target_core_fabric_configfs.c
> > index bca737b..a55f91a 100644
> > --- a/drivers/target/target_core_fabric_configfs.c
> > +++ b/drivers/target/target_core_fabric_configfs.c
> > @@ -71,6 +71,12 @@ static int target_fabric_mappedlun_link(
> >     struct se_portal_group *se_tpg;
> >     struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci,
> >     *wwn_ci_s;
> >     int ret = 0, lun_access;
> > +
> > +   if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) {
> > +           pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:"
> > +                   " %p to struct lun: %p\n", lun_ci, lun);
> > +           return -EFAULT;
> > +   }
> >     /*
> >      * Ensure that the source port exists
> >      */
> > @@ -745,6 +751,12 @@ static int target_fabric_port_link(
> >     struct target_fabric_configfs *tf;
> >     int ret;
> >  
> > +   if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) {
> > +           pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci pointer:"
> > +                   " %p to struct se_device: %p\n", se_dev_ci, dev);
> > +           return -EFAULT;
> > +   }
> > +
> >     tpg_ci = &lun_ci->ci_parent->ci_group->cg_item;
> >     se_tpg = container_of(to_config_group(tpg_ci),
> >                             struct se_portal_group, tpg_group);
> > diff --git a/drivers/target/target_core_tpg.c
> > b/drivers/target/target_core_tpg.c
> > index a531fe2..4c34665 100644
> > --- a/drivers/target/target_core_tpg.c
> > +++ b/drivers/target/target_core_tpg.c
> > @@ -672,6 +672,7 @@ int core_tpg_register(
> >     for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) {
> >             lun = se_tpg->tpg_lun_list[i];
> >             lun->unpacked_lun = i;
> > +           lun->lun_link_magic = SE_LUN_LINK_MAGIC;
> >             lun->lun_status = TRANSPORT_LUN_STATUS_FREE;
> >             atomic_set(&lun->lun_acl_count, 0);
> >             init_completion(&lun->lun_shutdown_comp);
> > diff --git a/include/target/target_core_base.h
> > b/include/target/target_core_base.h
> > index 5be8937..fca8bbe 100644
> > --- a/include/target/target_core_base.h
> > +++ b/include/target/target_core_base.h
> > @@ -734,6 +734,8 @@ struct se_subsystem_dev {
> >  };
> >  
> >  struct se_device {
> > +#define SE_DEV_LINK_MAGIC                  0xfeeddeef
> > +   u32                     dev_link_magic;
> >     /* RELATIVE TARGET PORT IDENTIFER Counter */
> >     u16                     dev_rpti_counter;
> >     /* Used for SAM Task Attribute ordering */
> > @@ -820,6 +822,8 @@ struct se_port_stat_grps {
> >  };
> >  
> >  struct se_lun {
> > +#define SE_LUN_LINK_MAGIC                  0xffff7771
> > +   u32                     lun_link_magic;
> >     /* See transport_lun_status_table */
> >     enum transport_lun_status_table lun_status;
> >     u32                     lun_access;
> > 
> > ----- Original Message -----
> > > From: [email protected]
> > > To: [email protected], [email protected]
> > > Cc: [email protected]
> > > Sent: Tuesday, January 15, 2013 1:24:22 AM
> > > Subject: FAILED: patch "[PATCH] target: Add link_magic for fabric
> > > allow_link destination" failed to apply to
> > > 3.7-stable tree
> > > 
> > > 
> > > The patch below does not apply to the 3.7-stable tree.
> > > If someone wants it applied there, or to any other stable or
> > > longterm
> > > tree, then please email the backport, including the original git
> > > commit
> > > id to <[email protected]>.
> > > 
> > > thanks,
> > > 
> > > greg k-h
> > > 
> > > ------------------ original commit in Linus's tree
> > > ------------------
> > > 
> > > From 0ff8754981261a80f4b77db2536dfea92c2d4539 Mon Sep 17 00:00:00
> > > 2001
> > > From: Nicholas Bellinger <[email protected]>
> > > Date: Tue, 4 Dec 2012 23:43:57 -0800
> > > Subject: [PATCH] target: Add link_magic for fabric allow_link
> > > destination
> > >  target_items
> > > 
> > > This patch adds [dev,lun]_link_magic value assignment + checks
> > > within
> > > generic
> > > target_fabric_port_link() and target_fabric_mappedlun_link() code
> > > to
> > > ensure
> > > destination config_item *target_item sent from configfs_symlink()
> > > ->
> > > config_item_operations->allow_link() is the underlying
> > > se_device->dev_group
> > > and se_lun->lun_group that we expect to symlink.
> > > 
> > > Reported-by: Sebastian Andrzej Siewior <[email protected]>
> > > Cc: Sebastian Andrzej Siewior <[email protected]>
> > > Cc: [email protected]
> > > Signed-off-by: Nicholas Bellinger <[email protected]>
> > > 
> > > diff --git a/drivers/target/target_core_device.c
> > > b/drivers/target/target_core_device.c
> > > index 3f60439..e269510 100644
> > > --- a/drivers/target/target_core_device.c
> > > +++ b/drivers/target/target_core_device.c
> > > @@ -1352,6 +1352,7 @@ struct se_device
> > > *target_alloc_device(struct
> > > se_hba *hba, const char *name)
> > >   if (!dev)
> > >           return NULL;
> > >  
> > > + dev->dev_link_magic = SE_DEV_LINK_MAGIC;
> > >   dev->se_hba = hba;
> > >   dev->transport = hba->transport;
> > >  
> > > diff --git a/drivers/target/target_core_fabric_configfs.c
> > > b/drivers/target/target_core_fabric_configfs.c
> > > index 9c67917..810263d 100644
> > > --- a/drivers/target/target_core_fabric_configfs.c
> > > +++ b/drivers/target/target_core_fabric_configfs.c
> > > @@ -70,6 +70,12 @@ static int target_fabric_mappedlun_link(
> > >   struct se_portal_group *se_tpg;
> > >   struct config_item *nacl_ci, *tpg_ci, *tpg_ci_s, *wwn_ci,
> > >   *wwn_ci_s;
> > >   int ret = 0, lun_access;
> > > +
> > > + if (lun->lun_link_magic != SE_LUN_LINK_MAGIC) {
> > > +         pr_err("Bad lun->lun_link_magic, not a valid lun_ci pointer:"
> > > +                 " %p to struct lun: %p\n", lun_ci, lun);
> > > +         return -EFAULT;
> > > + }
> > >   /*
> > >    * Ensure that the source port exists
> > >    */
> > > @@ -742,6 +748,12 @@ static int target_fabric_port_link(
> > >   struct target_fabric_configfs *tf;
> > >   int ret;
> > >  
> > > + if (dev->dev_link_magic != SE_DEV_LINK_MAGIC) {
> > > +         pr_err("Bad dev->dev_link_magic, not a valid se_dev_ci
> > > pointer:"
> > > +                 " %p to struct se_device: %p\n", se_dev_ci, dev);
> > > +         return -EFAULT;
> > > + }
> > > +
> > >   tpg_ci = &lun_ci->ci_parent->ci_group->cg_item;
> > >   se_tpg = container_of(to_config_group(tpg_ci),
> > >                           struct se_portal_group, tpg_group);
> > > diff --git a/drivers/target/target_core_tpg.c
> > > b/drivers/target/target_core_tpg.c
> > > index d84cc0a..0163309 100644
> > > --- a/drivers/target/target_core_tpg.c
> > > +++ b/drivers/target/target_core_tpg.c
> > > @@ -669,6 +669,7 @@ int core_tpg_register(
> > >   for (i = 0; i < TRANSPORT_MAX_LUNS_PER_TPG; i++) {
> > >           lun = se_tpg->tpg_lun_list[i];
> > >           lun->unpacked_lun = i;
> > > +         lun->lun_link_magic = SE_LUN_LINK_MAGIC;
> > >           lun->lun_status = TRANSPORT_LUN_STATUS_FREE;
> > >           atomic_set(&lun->lun_acl_count, 0);
> > >           init_completion(&lun->lun_shutdown_comp);
> > > diff --git a/include/target/target_core_base.h
> > > b/include/target/target_core_base.h
> > > index 645d90a..1346ee0 100644
> > > --- a/include/target/target_core_base.h
> > > +++ b/include/target/target_core_base.h
> > > @@ -624,6 +624,8 @@ struct se_dev_stat_grps {
> > >  };
> > >  
> > >  struct se_device {
> > > +#define SE_DEV_LINK_MAGIC                        0xfeeddeef
> > > + u32                     dev_link_magic;
> > >   /* RELATIVE TARGET PORT IDENTIFER Counter */
> > >   u16                     dev_rpti_counter;
> > >   /* Used for SAM Task Attribute ordering */
> > > @@ -722,6 +724,8 @@ struct se_port_stat_grps {
> > >  };
> > >  
> > >  struct se_lun {
> > > +#define SE_LUN_LINK_MAGIC                        0xffff7771
> > > + u32                     lun_link_magic;
> > >   /* See transport_lun_status_table */
> > >   enum transport_lun_status_table lun_status;
> > >   u32                     lun_access;
> > > 
> > > --
> > > To unsubscribe from this list: send the line "unsubscribe stable"
> > > in
> > > the body of a message to [email protected]
> > > More majordomo info at
> > >  http://vger.kernel.org/majordomo-info.html
> > > 
> 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to