From ef8e59a24d03742310a2aaba8e33c14f1aaec5d1 Mon Sep 17 00:00:00 2001 From: David Disseldorp Date: Thu, 24 Sep 2015 16:10:57 +0200 Subject: [PATCH] lib/scsi: fix PRin REPORT CAPS allow_cmds unmarshalling The Persistent Reserve In REPORT CAPABILITIES response carries the ALLOW COMMANDS field in bits 4-6 at byte offset 3. Bit 7 (TMV) should be masked out during ALLOW COMMANDS unmarshalling. Signed-off-by: David Disseldorp --- lib/scsi-lowlevel.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index f39b0fb..42d2106 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -947,7 +947,7 @@ scsi_persistentreservein_datain_unmarshall(struct scsi_task *task) rc->atp_c = !!(task_get_uint8(task, 2) & 0x04); rc->ptpl_c = !!(task_get_uint8(task, 2) & 0x01); rc->tmv = !!(task_get_uint8(task, 3) & 0x80); - rc->allow_commands = task_get_uint8(task, 3) >> 4; + rc->allow_commands = (task_get_uint8(task, 3) & 0x70) >> 4; rc->persistent_reservation_type_mask = task_get_uint16(task, 4); return rc; @@ -3396,7 +3396,7 @@ scsi_datain_getfullsize(struct scsi_task *task) case SCSI_OPCODE_INQUIRY: return scsi_inquiry_datain_getfullsize(task); case SCSI_OPCODE_MODESENSE6: - return scsi_modesense_datain_getfullsize(task, 1); + return scsi_modesense_datain_getfullsize(task, 1); case SCSI_OPCODE_READCAPACITY10: return scsi_readcapacity10_datain_getfullsize(task); case SCSI_OPCODE_SYNCHRONIZECACHE10: @@ -3425,7 +3425,7 @@ scsi_datain_unmarshall(struct scsi_task *task) case SCSI_OPCODE_MODESENSE6: return scsi_modesense_datain_unmarshall(task, 1); case SCSI_OPCODE_MODESENSE10: - return scsi_modesense_datain_unmarshall(task, 0); + return scsi_modesense_datain_unmarshall(task, 0); case SCSI_OPCODE_READCAPACITY10: return scsi_readcapacity10_datain_unmarshall(task); case SCSI_OPCODE_READTOC: