Tracing Reservation Keys
The following script can be used to trace reservation keys sent in the PERSISTENT RESERVE OUT command to any path associated with a particular LU.
#!/usr/sbin/dtrace -qs
/*
* Explanation of predicate expressions:
* * 0x5f is an opcode of PERSISTENT RESERVE OUT
* * tracing on pHCI level only, i.e. addr_path must be set
* * DATA OUT buffer must be mapped to a kernel virtual memory
* * Sanity check for the data buffer size
* * Specification of the logical unit GUID
*/
scsi:::cmd-request
/(args[1]->cdb_data[0] == 0x5f) &&
(args[0]->addr_path != "NULL") &&
args[2]->data_mapped &&
(args[2]->data_size >= 16) &&
(args[0]->addr_dev == "g600144f0ecf10e000000562915af0001")/
{
printf("%s#%d:%s\n", args[0]->addr_ctrl,
args[0]->addr_ctrl_inst, args[0]->addr_path);
printf("Service Action: %02x\n",
args[1]->cdb_data[1] & 0x1f);
printf("Reservation Key: ");
tracemem(&args[2]->data_ptr[0], 8);
printf("SA Reservation Key: ");
tracemem(&args[2]->data_ptr[8], 8);
printf("\n\n");
}