]> err.no Git - linux-2.6/blobdiff - drivers/usb/storage/isd200.c
Merge commit 'v2.6.26-rc9' into x86/cpu
[linux-2.6] / drivers / usb / storage / isd200.c
index 2ae1e8673b195297aeea17e7f9333ba4fecd8c42..3addcd8f827bd3d17463dbc67395c072cfae4d81 100644 (file)
@@ -292,6 +292,7 @@ struct isd200_info {
 
        /* maximum number of LUNs supported */
        unsigned char MaxLUNs;
+       unsigned char cmnd[BLK_MAX_CDB];
        struct scsi_cmnd srb;
        struct scatterlist sg;
 };
@@ -450,6 +451,7 @@ static int isd200_action( struct us_data *us, int action,
 
        memset(&ata, 0, sizeof(ata));
        memset(&srb_dev, 0, sizeof(srb_dev));
+       srb->cmnd = info->cmnd;
        srb->device = &srb_dev;
        ++srb->serial_number;
 
@@ -1230,6 +1232,7 @@ static int isd200_get_inquiry_data( struct us_data *us )
            
                        /* Free driver structure */         
                        us->extra_destructor(info);
+                       kfree(info);
                        us->extra = NULL;
                        us->extra_destructor = NULL;
                }
@@ -1469,6 +1472,7 @@ static void isd200_free_info_ptrs(void *info_)
        if (info) {
                kfree(info->id);
                kfree(info->RegsBuf);
+               kfree(info->srb.sense_buffer);
        }
 }
 
@@ -1494,7 +1498,9 @@ static int isd200_init_info(struct us_data *us)
                                kzalloc(sizeof(struct hd_driveid), GFP_KERNEL);
                info->RegsBuf = (unsigned char *)
                                kmalloc(sizeof(info->ATARegs), GFP_KERNEL);
-               if (!info->id || !info->RegsBuf) {
+               info->srb.sense_buffer =
+                               kmalloc(SCSI_SENSE_BUFFERSIZE, GFP_KERNEL);
+               if (!info->id || !info->RegsBuf || !info->srb.sense_buffer) {
                        isd200_free_info_ptrs(info);
                        kfree(info);
                        retStatus = ISD200_ERROR;