Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (3 months ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.18/drivers/target/target_core_pscsi.c

    r27334 r31885  
    158158        buf = kzalloc(12, GFP_KERNEL);
    159159        if (!buf)
    160                 return;
     160                goto out_free;
    161161
    162162        memset(cdb, 0, MAX_COMMAND_SIZE);
     
    173173         */
    174174        sdev->sector_size = (buf[9] << 16) | (buf[10] << 8) | (buf[11]);
     175out_free:
    175176        if (!sdev->sector_size)
    176177                sdev->sector_size = 1024;
    177 out_free:
     178
    178179        kfree(buf);
    179180}
     
    318319        }
    319320
    320         dev->dev_attrib.hw_block_size = sd->sector_size;
     321        dev->dev_attrib.hw_block_size =
     322                min_not_zero((int)sd->sector_size, 512);
    321323        dev->dev_attrib.hw_max_sectors =
    322                 min_t(int, sd->host->max_sectors, queue_max_hw_sectors(q));
     324                min_not_zero(sd->host->max_sectors, queue_max_hw_sectors(q));
    323325        dev->dev_attrib.hw_queue_depth = sd->queue_depth;
    324326
     
    343345         * For TYPE_TAPE, attempt to determine blocksize with MODE_SENSE.
    344346         */
    345         if (sd->type == TYPE_TAPE)
     347        if (sd->type == TYPE_TAPE) {
    346348                pscsi_tape_read_blocksize(dev, sd);
     349                dev->dev_attrib.hw_block_size = sd->sector_size;
     350        }
    347351        return 0;
    348352}
     
    410414 * Called with struct Scsi_Host->host_lock called.
    411415 */
    412 static int pscsi_create_type_rom(struct se_device *dev, struct scsi_device *sd)
     416static int pscsi_create_type_nondisk(struct se_device *dev, struct scsi_device *sd)
    413417        __releases(sh->host_lock)
    414418{
     
    434438                sd->channel, sd->id, sd->lun);
    435439
    436         return 0;
    437 }
    438 
    439 /*
    440  * Called with struct Scsi_Host->host_lock called.
    441  */
    442 static int pscsi_create_type_other(struct se_device *dev,
    443                 struct scsi_device *sd)
    444         __releases(sh->host_lock)
    445 {
    446         struct pscsi_hba_virt *phv = dev->se_hba->hba_ptr;
    447         struct Scsi_Host *sh = sd->host;
    448         int ret;
    449 
    450         spin_unlock_irq(sh->host_lock);
    451         ret = pscsi_add_device_to_list(dev, sd);
    452         if (ret)
    453                 return ret;
    454 
    455         pr_debug("CORE_PSCSI[%d] - Added Type: %s for %d:%d:%d:%llu\n",
    456                 phv->phv_host_id, scsi_device_type(sd->type), sh->host_no,
    457                 sd->channel, sd->id, sd->lun);
    458440        return 0;
    459441}
     
    546528                        ret = pscsi_create_type_disk(dev, sd);
    547529                        break;
    548                 case TYPE_ROM:
    549                         ret = pscsi_create_type_rom(dev, sd);
    550                         break;
    551530                default:
    552                         ret = pscsi_create_type_other(dev, sd);
     531                        ret = pscsi_create_type_nondisk(dev, sd);
    553532                        break;
    554533                }
     
    607586                        scsi_host_put(pdv->pdv_lld_host);
    608587
    609                 if ((sd->type == TYPE_DISK) || (sd->type == TYPE_ROM))
    610                         scsi_device_put(sd);
     588                scsi_device_put(sd);
    611589
    612590                pdv->pdv_sd = NULL;
     
    11341112                return pdv->pdv_bd->bd_part->nr_sects;
    11351113
    1136         dump_stack();
    11371114        return 0;
    11381115}
Note: See TracChangeset for help on using the changeset viewer.