Re: FAILED: patch "[PATCH] target: Add link_magic for fabric allow_link destination" failed to apply to 3.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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: gregkh@xxxxxxxxxxxxxxxxxxx
> > To: nab@xxxxxxxxxxxxxxx, bigeasy@xxxxxxxxxxxxx
> > Cc: stable@xxxxxxxxxxxxxxx
> > 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 <stable@xxxxxxxxxxxxxxx>.
> > 
> > thanks,
> > 
> > greg k-h
> > 
> > ------------------ original commit in Linus's tree ------------------
> > 
> > From 0ff8754981261a80f4b77db2536dfea92c2d4539 Mon Sep 17 00:00:00
> > 2001
> > From: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
> > 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 <bigeasy@xxxxxxxxxxxxx>
> > Cc: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> > Cc: stable@xxxxxxxxxxxxxxx
> > Signed-off-by: Nicholas Bellinger <nab@xxxxxxxxxxxxxxx>
> > 
> > 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 majordomo@xxxxxxxxxxxxxxx
> > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > 


--
To unsubscribe from this list: send the line "unsubscribe target-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux