Add unmarshalling og READ_RESERVATION data
This commit is contained in:
@@ -722,6 +722,11 @@ struct scsi_persistent_reserve_in_read_keys {
|
|||||||
uint64_t keys[0];
|
uint64_t keys[0];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct scsi_persistent_reserve_in_read_reservation {
|
||||||
|
uint32_t prgeneration;
|
||||||
|
uint32_t additional_length;
|
||||||
|
};
|
||||||
|
|
||||||
struct scsi_read10_cdb {
|
struct scsi_read10_cdb {
|
||||||
enum scsi_opcode opcode;
|
enum scsi_opcode opcode;
|
||||||
uint8_t rdprotect;
|
uint8_t rdprotect;
|
||||||
|
|||||||
@@ -633,6 +633,8 @@ scsi_persistentreservein_datain_getfullsize(struct scsi_task *task)
|
|||||||
switch (scsi_persistentreservein_sa(task)) {
|
switch (scsi_persistentreservein_sa(task)) {
|
||||||
case SCSI_PERSISTENT_RESERVE_READ_KEYS:
|
case SCSI_PERSISTENT_RESERVE_READ_KEYS:
|
||||||
return scsi_get_uint32(&task->datain.data[4]) + 8;
|
return scsi_get_uint32(&task->datain.data[4]) + 8;
|
||||||
|
case SCSI_PERSISTENT_RESERVE_READ_RESERVATION:
|
||||||
|
return 8;
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
@@ -642,6 +644,7 @@ static void *
|
|||||||
scsi_persistentreservein_datain_unmarshall(struct scsi_task *task)
|
scsi_persistentreservein_datain_unmarshall(struct scsi_task *task)
|
||||||
{
|
{
|
||||||
struct scsi_persistent_reserve_in_read_keys *rk;
|
struct scsi_persistent_reserve_in_read_keys *rk;
|
||||||
|
struct scsi_persistent_reserve_in_read_reservation *rr;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
switch (scsi_persistentreservein_sa(task)) {
|
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]);
|
rk->keys[i] = scsi_get_uint64(&task->datain.data[8 + i * 8]);
|
||||||
}
|
}
|
||||||
return rk;
|
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:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user