Revision f48a7a6e hw/esp.c

b/hw/esp.c
217 217
        s->async_len = 0;
218 218
    }
219 219

  
220
    if (target >= ESP_MAX_DEVS || !s->bus.devs[target]) {
220
    s->current_dev = scsi_device_find(&s->bus, target, 0);
221
    if (!s->current_dev) {
221 222
        // No such drive
222 223
        s->rregs[ESP_RSTAT] = 0;
223 224
        s->rregs[ESP_RINTR] = INTR_DC;
......
225 226
        esp_raise_irq(s);
226 227
        return 0;
227 228
    }
228
    s->current_dev = s->bus.devs[target];
229 229
    return dmalen;
230 230
}
231 231

  
......
233 233
{
234 234
    int32_t datalen;
235 235
    int lun;
236
    SCSIDevice *current_lun;
236 237

  
237 238
    trace_esp_do_busid_cmd(busid);
238 239
    lun = busid & 7;
239
    s->current_req = scsi_req_new(s->current_dev, 0, lun, buf, NULL);
240
    current_lun = scsi_device_find(&s->bus, s->current_dev->id, lun);
241
    s->current_req = scsi_req_new(current_lun, 0, lun, buf, NULL);
240 242
    datalen = scsi_req_enqueue(s->current_req);
241 243
    s->ti_size = datalen;
242 244
    if (datalen != 0) {

Also available in: Unified diff