@@ -1565,103 +1565,114 @@ static int fbo_handle_cmd(struct tcmu_device *dev, struct tcmulib_cmd *cmd)
1565
1565
uint8_t * sense = cmd -> sense_buf ;
1566
1566
struct fbo_state * state = tcmu_get_dev_private (dev );
1567
1567
bool do_verify = false;
1568
+ int ret ;
1568
1569
1569
1570
/* Check for format in progress */
1570
1571
/* Certain commands can be executed even if a format is in progress */
1571
1572
if (state -> flags & FBO_FORMATTING &&
1572
1573
cdb [0 ] != INQUIRY &&
1573
1574
cdb [0 ] != REQUEST_SENSE &&
1574
1575
cdb [0 ] != GET_CONFIGURATION &&
1575
- cdb [0 ] != GPCMD_GET_EVENT_STATUS_NOTIFICATION )
1576
- return tcmu_set_sense_data (sense , NOT_READY ,
1577
- ASC_NOT_READY_FORMAT_IN_PROGRESS ,
1578
- & state -> format_progress );
1576
+ cdb [0 ] != GPCMD_GET_EVENT_STATUS_NOTIFICATION ) {
1577
+ ret = tcmu_set_sense_data (sense , NOT_READY ,
1578
+ ASC_NOT_READY_FORMAT_IN_PROGRESS ,
1579
+ & state -> format_progress );
1580
+ cmd -> done (dev , cmd , ret );
1581
+ return 0 ;
1582
+ }
1579
1583
1580
1584
switch (cdb [0 ]) {
1581
1585
case TEST_UNIT_READY :
1582
- return tcmu_emulate_test_unit_ready (cdb , iovec , iov_cnt , sense );
1586
+ ret = tcmu_emulate_test_unit_ready (cdb , iovec , iov_cnt , sense );
1583
1587
break ;
1584
1588
case REQUEST_SENSE :
1585
- return fbo_emulate_request_sense (dev , cdb , iovec , iov_cnt , sense );
1589
+ ret = fbo_emulate_request_sense (dev , cdb , iovec , iov_cnt , sense );
1590
+ break ;
1586
1591
case FORMAT_UNIT :
1587
- return fbo_emulate_format_unit (dev , cdb , iovec , iov_cnt , sense );
1592
+ ret = fbo_emulate_format_unit (dev , cdb , iovec , iov_cnt , sense );
1593
+ break ;
1588
1594
case READ_6 :
1589
1595
case READ_10 :
1590
1596
case READ_12 :
1591
- return fbo_read (dev , cdb , iovec , iov_cnt , sense );
1597
+ ret = fbo_read (dev , cdb , iovec , iov_cnt , sense );
1592
1598
break ;
1593
1599
case WRITE_VERIFY :
1594
1600
do_verify = true;
1595
1601
case WRITE_6 :
1596
1602
case WRITE_10 :
1597
1603
case WRITE_12 :
1598
- return fbo_write (dev , cdb , iovec , iov_cnt , sense , do_verify );
1604
+ ret = fbo_write (dev , cdb , iovec , iov_cnt , sense , do_verify );
1599
1605
break ;
1600
1606
case INQUIRY :
1601
- return fbo_emulate_inquiry (cdb , iovec , iov_cnt , sense );
1607
+ ret = fbo_emulate_inquiry (cdb , iovec , iov_cnt , sense );
1602
1608
break ;
1603
1609
case MODE_SELECT :
1604
1610
case MODE_SELECT_10 :
1605
- return fbo_emulate_mode_select (cdb , iovec , iov_cnt , sense );
1611
+ ret = fbo_emulate_mode_select (cdb , iovec , iov_cnt , sense );
1606
1612
break ;
1607
1613
case MODE_SENSE :
1608
1614
case MODE_SENSE_10 :
1609
- return fbo_emulate_mode_sense (cdb , iovec , iov_cnt , sense );
1615
+ ret = fbo_emulate_mode_sense (cdb , iovec , iov_cnt , sense );
1610
1616
break ;
1611
1617
case START_STOP :
1612
- return tcmu_emulate_start_stop (dev , cdb , sense );
1618
+ ret = tcmu_emulate_start_stop (dev , cdb , sense );
1613
1619
break ;
1614
1620
case ALLOW_MEDIUM_REMOVAL :
1615
- return fbo_emulate_allow_medium_removal (dev , cdb , sense );
1621
+ ret = fbo_emulate_allow_medium_removal (dev , cdb , sense );
1616
1622
break ;
1617
1623
case READ_FORMAT_CAPACITIES :
1618
- return fbo_emulate_read_format_capacities (dev , cdb , iovec ,
1619
- iov_cnt , sense );
1624
+ ret = fbo_emulate_read_format_capacities (dev , cdb , iovec ,
1625
+ iov_cnt , sense );
1626
+ break ;
1620
1627
case READ_CAPACITY :
1621
1628
if ((cdb [1 ] & 0x01 ) || (cdb [8 ] & 0x01 ))
1622
1629
/* Reserved bits for MM logical units */
1623
- return tcmu_set_sense_data (sense , ILLEGAL_REQUEST ,
1624
- ASC_INVALID_FIELD_IN_CDB ,
1625
- NULL );
1630
+ ret = tcmu_set_sense_data (sense , ILLEGAL_REQUEST ,
1631
+ ASC_INVALID_FIELD_IN_CDB ,
1632
+ NULL );
1626
1633
else
1627
- return tcmu_emulate_read_capacity_10 (state -> num_lbas ,
1628
- state -> block_size ,
1629
- cdb , iovec ,
1630
- iov_cnt , sense );
1634
+ ret = tcmu_emulate_read_capacity_10 (state -> num_lbas ,
1635
+ state -> block_size ,
1636
+ cdb , iovec ,
1637
+ iov_cnt , sense );
1638
+ break ;
1631
1639
case VERIFY :
1632
- return fbo_verify (dev , cdb , iovec , iov_cnt , sense );
1640
+ ret = fbo_verify (dev , cdb , iovec , iov_cnt , sense );
1633
1641
break ;
1634
1642
case SYNCHRONIZE_CACHE :
1635
- return fbo_synchronize_cache (dev , cdb , sense );
1643
+ ret = fbo_synchronize_cache (dev , cdb , sense );
1636
1644
break ;
1637
1645
case READ_TOC :
1638
- return fbo_emulate_read_toc (dev , cdb , iovec , iov_cnt , sense );
1646
+ ret = fbo_emulate_read_toc (dev , cdb , iovec , iov_cnt , sense );
1639
1647
break ;
1640
1648
case GET_CONFIGURATION :
1641
- return fbo_emulate_get_configuration (dev , cdb , iovec , iov_cnt ,
1642
- sense );
1649
+ ret = fbo_emulate_get_configuration (dev , cdb , iovec , iov_cnt ,
1650
+ sense );
1643
1651
break ;
1644
1652
case GPCMD_GET_EVENT_STATUS_NOTIFICATION :
1645
- return fbo_emulate_get_event_status_notification (dev , cdb ,
1646
- iovec , iov_cnt ,
1647
- sense );
1653
+ ret = fbo_emulate_get_event_status_notification (dev , cdb ,
1654
+ iovec , iov_cnt ,
1655
+ sense );
1648
1656
break ;
1649
1657
case READ_DISC_INFORMATION :
1650
- return fbo_emulate_read_disc_information (dev , cdb , iovec ,
1651
- iov_cnt , sense );
1658
+ ret = fbo_emulate_read_disc_information (dev , cdb , iovec ,
1659
+ iov_cnt , sense );
1652
1660
break ;
1653
1661
case READ_DVD_STRUCTURE :
1654
- return fbo_emulate_read_dvd_structure (dev , cdb , iovec , iov_cnt ,
1655
- sense );
1662
+ ret = fbo_emulate_read_dvd_structure (dev , cdb , iovec , iov_cnt ,
1663
+ sense );
1656
1664
break ;
1657
1665
case MECHANISM_STATUS :
1658
- return fbo_emulate_mechanism_status (dev , cdb , iovec , iov_cnt ,
1659
- sense );
1666
+ ret = fbo_emulate_mechanism_status (dev , cdb , iovec , iov_cnt ,
1667
+ sense );
1660
1668
break ;
1661
1669
default :
1662
1670
tcmu_err ("unknown command 0x%x\n" , cdb [0 ]);
1663
- return TCMU_NOT_HANDLED ;
1671
+ ret = TCMU_NOT_HANDLED ;
1664
1672
}
1673
+
1674
+ cmd -> done (dev , cmd , ret );
1675
+ return 0 ;
1665
1676
}
1666
1677
1667
1678
static const char fbo_cfg_desc [] =
0 commit comments