mtip32xx: Handle NCQ commands during the security locked state
PATCH 2/6 mtip32xx: Handle NCQ commands during the security locked state
Return error for NCQ commands when the drive is in security locked state
Signed-off-by Asai Thambi S P <[email protected]>
Signed-off-by Selvan Mani <[email protected]>
--- drivers/block/mtip32xx/mtip32xx.c | 10 +++++++++- drivers/block/mtip32xx/mtip32xx.h | 2 ++ 2 files changed, 11 insertions(+), 1 deletions(-)
drivers/block/mtip32xx/mtip32xx.c +9 -1
@@ -1148,11 +1148,15 @@ static bool mtip_pause_ncq(struct mtip_port *port, reply = port->rxfis +RX_FIS_D2H_REG ; task_file_data =readl (port->mmio+PORT_TFDATA ); -if ((task_file_data &1 ) || (fis->command ==ATA_CMD_SEC_ERASE_UNIT )) +if (fis->command ==ATA_CMD_SEC_ERASE_UNIT ) +clear_bit (MTIP_DDF_SEC_LOCK_BIT , &port->dd->dd_flag); + +if ((task_file_data &1 ))return false;if (fis->command ==ATA_CMD_SEC_ERASE_PREP ) {set_bit (MTIP_PF_SE_ACTIVE_BIT , &port->flags); +set_bit (MTIP_DDF_SEC_LOCK_BIT , &port->dd->dd_flag); port->ic_pause_timer = jiffies;return true; } else if ((fis->command == ATA_CMD_DOWNLOAD_MICRO) &&
@@ -3619,6 +3623,10 @@ static void mtip_make_request(struct request_queue *queue, struct bio *bio)bio_endio (bio, -ENODATA );return ; } +if (unlikely (test_bit (MTIP_DDF_SEC_LOCK_BIT , &dd->dd_flag))) { +bio_endio (bio, -ENODATA ); +return ; + } }if (unlikely (!bio_has_data (bio))) {
drivers/block/mtip32xx/mtip32xx.h +2 -0
@@ -137,10 +137,12 @@ enum {MTIP_PF_SVC_THD_STOP_BIT =8 ,/* below are bit numbers in 'dd_flag' defined in driver_data */ +MTIP_DDF_SEC_LOCK_BIT =0 ,MTIP_DDF_REMOVE_PENDING_BIT =1 ,MTIP_DDF_OVER_TEMP_BIT =2 ,MTIP_DDF_WRITE_PROTECT_BIT =3 ,MTIP_DDF_STOP_IO = ((1 <<MTIP_DDF_REMOVE_PENDING_BIT ) | \ + (1 <<MTIP_DDF_SEC_LOCK_BIT ) | \ (1 <<MTIP_DDF_OVER_TEMP_BIT ) | \ (1 << MTIP_DDF_WRITE_PROTECT_BIT)),
Signature · 1 line
1.7.1