Re: [PATCH] cleanup after a discovery error

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

 



On Wed, 2006-10-18 at 20:19 -0700, malahal@xxxxxxxxxx wrote:
> Domain device is freed but the port dev list is not adjusted on some
> discovery errors. Module unload will Oops if this happens.
> 
> Signed-off-by: Malahal Naineni <malahal@xxxxxxxxxx>
> 
> diff -r 4e1720b3c71b drivers/scsi/libsas/sas_discover.c
> --- a/drivers/scsi/libsas/sas_discover.c	Thu Oct 05 10:02:13 2006 -0700
> +++ b/drivers/scsi/libsas/sas_discover.c	Fri Oct 13 19:58:54 2006 -0700
> @@ -684,7 +684,23 @@ static void sas_discover_domain(void *da
>  	}
>  
>  	if (error) {
> -		kfree(port->port_dev); /* not kobject_register-ed yet */
> +		struct domain_device *dev = port->port_dev;
> +		
> +		if (dev->rphy) {
> +			sas_remove_children(&dev->rphy->dev);
> +			sas_rphy_delete(dev->rphy);
> +			dev->rphy = NULL;
> +		}
> +		if (dev->dev_type == EDGE_DEV || dev->dev_type == FANOUT_DEV) {
> +			if (dev->ex_dev.ex_phy) {
> +				kfree(dev->ex_dev.ex_phy);
> +				dev->ex_dev.ex_phy = NULL;
> +			}
> +		}
> +		spin_lock(&port->dev_list_lock);
> +		list_del_init(&dev->dev_list_node);
> +		spin_unlock(&port->dev_list_lock);
> +		kfree(dev); /* not kobject_register-ed yet */

This is a bit of a layering violation

if the various discover functions are going to return an error, I think
it's their job to clean up whatever they did before returning.

James


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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux