This just allocates the structures.

Signed-off-by: Oliver Neukum <oneu...@suse.com>
---
 drivers/usb/storage/uas.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/drivers/usb/storage/uas.c b/drivers/usb/storage/uas.c
index 44b096c..13e6313 100644
--- a/drivers/usb/storage/uas.c
+++ b/drivers/usb/storage/uas.c
@@ -38,6 +38,8 @@ struct uas_dev_info {
        struct usb_anchor cmd_urbs;
        struct usb_anchor sense_urbs;
        struct usb_anchor data_urbs;
+       struct task_mgmt_iu *tmf_iu;
+       struct urb *management_urb;
        unsigned long flags;
        int qdepth, resetting;
        unsigned cmd_pipe, status_pipe, data_in_pipe, data_out_pipe;
@@ -921,6 +923,8 @@ static int uas_probe(struct usb_interface *intf, const 
struct usb_device_id *id)
        struct Scsi_Host *shost = NULL;
        struct uas_dev_info *devinfo;
        struct usb_device *udev = interface_to_usbdev(intf);
+       struct task_mgmt_iu *tmf;
+       struct urb *mu;
        unsigned long dev_flags;
 
        if (!uas_use_uas_driver(intf, id, &dev_flags))
@@ -929,6 +933,11 @@ static int uas_probe(struct usb_interface *intf, const 
struct usb_device_id *id)
        if (uas_switch_interface(udev, intf))
                return -ENODEV;
 
+       tmf = kmalloc(sizeof(*tmf), GFP_KERNEL);
+       mu = usb_alloc_urb(0, GFP_KERNEL);
+       if (!tmf && !mu)
+               goto set_alt0;
+
        shost = scsi_host_alloc(&uas_host_template,
                                sizeof(struct uas_dev_info));
        if (!shost)
@@ -946,6 +955,8 @@ static int uas_probe(struct usb_interface *intf, const 
struct usb_device_id *id)
        devinfo->resetting = 0;
        devinfo->shutdown = 0;
        devinfo->flags = dev_flags;
+       devinfo->tmf_iu = tmf;
+       devinfo->management_urb = mu;
        init_usb_anchor(&devinfo->cmd_urbs);
        init_usb_anchor(&devinfo->sense_urbs);
        init_usb_anchor(&devinfo->data_urbs);
@@ -969,6 +980,8 @@ free_streams:
        usb_set_intfdata(intf, NULL);
 set_alt0:
        usb_set_interface(udev, intf->altsetting[0].desc.bInterfaceNumber, 0);
+       kfree(tmf);
+       usb_free_urb(mu);
        if (shost)
                scsi_host_put(shost);
        return result;
@@ -1129,6 +1142,8 @@ static void uas_disconnect(struct usb_interface *intf)
        usb_kill_anchored_urbs(&devinfo->sense_urbs);
        usb_kill_anchored_urbs(&devinfo->data_urbs);
        uas_zap_pending(devinfo, DID_NO_CONNECT);
+       kfree(devinfo->tmf_iu);
+       usb_free_urb(devinfo->management_urb);
 
        scsi_remove_host(shost);
        uas_free_streams(devinfo);
-- 
2.1.4

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

Reply via email to