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..?  ;)

--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