示例#1
0
/*
 * ctl_scsi_sense_sbuf() returns 0 for success and -1 for failure.
 */
int
ctl_scsi_sense_sbuf(struct ctl_scsiio *ctsio,
		    struct scsi_inquiry_data *inq_data, struct sbuf *sb,
		    scsi_sense_string_flags flags)
{
	char	  path_str[64];

	if ((ctsio == NULL) || (sb == NULL))
		return(-1);

	ctl_scsi_path_string((union ctl_io *)ctsio, path_str, sizeof(path_str));

	if (flags & SSS_FLAG_PRINT_COMMAND) {

		sbuf_cat(sb, path_str);

		ctl_scsi_command_string(ctsio, inq_data, sb);

		sbuf_printf(sb, "\n");
	}

	scsi_sense_only_sbuf(&ctsio->sense_data, ctsio->sense_len, sb,
			     path_str, inq_data, ctsio->cdb, ctsio->cdb_len);

	return(0);
}
示例#2
0
void
ctl_io_sbuf(union ctl_io *io, struct sbuf *sb)
{
	const char *task_desc;
	char path_str[64];

	ctl_scsi_path_string(io, path_str, sizeof(path_str));

	switch (io->io_hdr.io_type) {
	case CTL_IO_SCSI:
		sbuf_cat(sb, path_str);
		ctl_scsi_command_string(&io->scsiio, NULL, sb);
		sbuf_printf(sb, " Tag: %#x/%d\n",
			    io->scsiio.tag_num, io->scsiio.tag_type);
		break;
	case CTL_IO_TASK:
		sbuf_cat(sb, path_str);
		task_desc = ctl_scsi_task_string(&io->taskio);
		if (task_desc == NULL)
			sbuf_printf(sb, "Unknown Task Action %d (%#x)",
			    io->taskio.task_action, io->taskio.task_action);
		else
			sbuf_printf(sb, "Task Action: %s", task_desc);
		switch (io->taskio.task_action) {
		case CTL_TASK_ABORT_TASK:
			sbuf_printf(sb, " Tag: %#x/%d\n",
			    io->taskio.tag_num, io->taskio.tag_type);
			break;
		default:
			sbuf_printf(sb, "\n");
			break;
		}
		break;
	default:
		break;
	}
}