Re: [PATCH 3/3] usb: storage: adjust module reference for scsi host

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

 



On Mon, 5 Jan 2015, Akinobu Mita wrote:

> While accessing a unusual usb storage (ums-alauda, ums-cypress, ...),
> the module reference count is not incremented.  Because these drivers
> allocate scsi hosts with usb_stor_host_template defined in usb-storage
> module.  So these drivers always can be unloaded.
> 
> This fixes it by adjusting module reference after scsi host allocation.

> diff --git a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c
> index 62c2d9d..77660d6 100644
> --- a/drivers/usb/storage/alauda.c
> +++ b/drivers/usb/storage/alauda.c
> @@ -1242,6 +1242,7 @@ static int alauda_probe(struct usb_interface *intf,
>  	us->transport = alauda_transport;
>  	us->transport_reset = usb_stor_Bulk_reset;
>  	us->max_lun = 1;
> +	us_to_host(us)->module = THIS_MODULE;
>  
>  	result = usb_stor_probe2(us);
>  	return result;

... etc.

An easier and more foolproof approach would be to change
usb_store_probe2 to take an extra argument for the owner:

int _usb_stor_probe2(struct us_data *us, struct module *owner)
...
	us_to_host(us)->module = owner;
...

Then in usb.h:

extern int _usb_stor_probe2(struct us_data *us, struct module *owner);
#define usb_stor_probe2(us)	_usb_stor_probe2(us, THIS_MODULE)

This pattern is already used in several other places in the kernel.

Alan Stern

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