From 4522658254bb15db2f25b1979bf54053b6fce3a9 Mon Sep 17 00:00:00 2001 From: Ronnie Sahlberg Date: Tue, 18 Dec 2012 21:10:26 -0800 Subject: [PATCH] Add unmarshalling og READ_RESERVATION data --- include/scsi-lowlevel.h | 5 +++++ lib/scsi-lowlevel.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/include/scsi-lowlevel.h b/include/scsi-lowlevel.h index 2192d5a..e4744fa 100644 --- a/include/scsi-lowlevel.h +++ b/include/scsi-lowlevel.h @@ -722,6 +722,11 @@ struct scsi_persistent_reserve_in_read_keys { uint64_t keys[0]; }; +struct scsi_persistent_reserve_in_read_reservation { + uint32_t prgeneration; + uint32_t additional_length; +}; + struct scsi_read10_cdb { enum scsi_opcode opcode; uint8_t rdprotect; diff --git a/lib/scsi-lowlevel.c b/lib/scsi-lowlevel.c index 7602e87..0611b67 100644 --- a/lib/scsi-lowlevel.c +++ b/lib/scsi-lowlevel.c @@ -633,6 +633,8 @@ scsi_persistentreservein_datain_getfullsize(struct scsi_task *task) switch (scsi_persistentreservein_sa(task)) { case SCSI_PERSISTENT_RESERVE_READ_KEYS: return scsi_get_uint32(&task->datain.data[4]) + 8; + case SCSI_PERSISTENT_RESERVE_READ_RESERVATION: + return 8; default: return -1; } @@ -642,6 +644,7 @@ static void * scsi_persistentreservein_datain_unmarshall(struct scsi_task *task) { struct scsi_persistent_reserve_in_read_keys *rk; + struct scsi_persistent_reserve_in_read_reservation *rr; int i; switch (scsi_persistentreservein_sa(task)) { @@ -660,6 +663,15 @@ scsi_persistentreservein_datain_unmarshall(struct scsi_task *task) rk->keys[i] = scsi_get_uint64(&task->datain.data[8 + i * 8]); } return rk; + case SCSI_PERSISTENT_RESERVE_READ_RESERVATION: + rr = scsi_malloc(task, sizeof(struct scsi_persistent_reserve_in_read_reservation)); + if (rr == NULL) { + return NULL; + } + rr->prgeneration = scsi_get_uint32(&task->datain.data[0]); + rr->additional_length = scsi_get_uint32(&task->datain.data[4]); + + return rr; default: return NULL; }