Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[sfrench/cifs-2.6.git] / drivers / scsi / scsi_debug.c
index a0797101a8a05ad3352d861e246b3d8adb4843b1..cc6953809a248a2b8def1e71b567fe7f643e2244 100644 (file)
@@ -3785,7 +3785,7 @@ static int resp_write_scat(struct scsi_cmnd *scp,
                mk_sense_buffer(scp, ILLEGAL_REQUEST, INVALID_FIELD_IN_CDB, 0);
                return illegal_condition_result;
        }
-       lrdp = kzalloc(lbdof_blen, GFP_ATOMIC);
+       lrdp = kzalloc(lbdof_blen, GFP_ATOMIC | __GFP_NOWARN);
        if (lrdp == NULL)
                return SCSI_MLQUEUE_HOST_BUSY;
        if (sdebug_verbose)
@@ -4436,7 +4436,7 @@ static int resp_verify(struct scsi_cmnd *scp, struct sdebug_dev_info *devip)
        if (ret)
                return ret;
 
-       arr = kcalloc(lb_size, vnum, GFP_ATOMIC);
+       arr = kcalloc(lb_size, vnum, GFP_ATOMIC | __GFP_NOWARN);
        if (!arr) {
                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
                                INSUFF_RES_ASCQ);
@@ -4504,7 +4504,7 @@ static int resp_report_zones(struct scsi_cmnd *scp,
 
        rep_max_zones = (alloc_len - 64) >> ilog2(RZONES_DESC_HD);
 
-       arr = kzalloc(alloc_len, GFP_ATOMIC);
+       arr = kzalloc(alloc_len, GFP_ATOMIC | __GFP_NOWARN);
        if (!arr) {
                mk_sense_buffer(scp, ILLEGAL_REQUEST, INSUFF_RES_ASC,
                                INSUFF_RES_ASCQ);
@@ -7340,7 +7340,10 @@ clean:
                kfree(sdbg_devinfo->zstate);
                kfree(sdbg_devinfo);
        }
-       kfree(sdbg_host);
+       if (sdbg_host->dev.release)
+               put_device(&sdbg_host->dev);
+       else
+               kfree(sdbg_host);
        pr_warn("%s: failed, errno=%d\n", __func__, -error);
        return error;
 }