View | Details | Raw Unified | Return to bug 162909
Collapse All | Expand All

(-)/usr/ports/sysutils/udfclient/files/patch-uscsi_subr.c (+45 lines)
Line 0 Link Here
1
--- uscsi_subr.c.orig	2011-11-15 19:51:44.387439246 +0200
2
+++ uscsi_subr.c	2011-11-27 16:41:07.706327140 +0200
3
@@ -412,6 +412,7 @@ uscsi_command(int flags, struct uscsi_de
4
 	struct scsi_sense_data *cam_sense_data;
5
 	union ccb ccb;
6
 	uint32_t cam_sense;
7
+	u_int sense_len;
8
 	uint8_t *keypos;
9
 	int camflags;
10
 
11
@@ -468,17 +469,33 @@ uscsi_command(int flags, struct uscsi_de
12
 
13
 	/* print sense info */
14
 	cam_sense_data = &ccb.csio.sense_data;
15
+	sense_len = ccb.csio.sense_len - ccb.csio.sense_resid;
16
 	if (uscsi_sense) {
17
+#if __FreeBSD_version > 900043
18
+		int error_code, sense_key;
19
+		uint8_t sks[3];
20
+
21
+		scsi_extract_sense_len(cam_sense_data, sense_len,
22
+		    &error_code, &sense_key,
23
+		    &uscsi_sense->asc, &uscsi_sense->ascq, /*show_errors*/ 0);
24
+
25
+		if ((scsi_get_sks(cam_sense_data, sense_len, sks) == 0)) {
26
+			uscsi_sense->skey_valid = 1;
27
+			uscsi_sense->sense_key  = (sks[1] << 8) | sks[2];
28
+		} else
29
+			uscsi_sense->skey_valid = 0;
30
+#else
31
 		uscsi_sense->asc  = cam_sense_data->add_sense_code;
32
 		uscsi_sense->ascq = cam_sense_data->add_sense_code_qual;
33
 		keypos  = cam_sense_data->sense_key_spec;
34
 		uscsi_sense->skey_valid =  keypos[0] & 128;
35
 		uscsi_sense->sense_key  = (keypos[1] << 8) | (keypos[2]);
36
+#endif
37
 	}
38
 
39
 	uscsi_print_sense((char *) disc->dev_name,
40
 		cmd, cmdlen,
41
-		(uint8_t *) cam_sense_data, 8 + cam_sense_data->extra_len, 1);
42
+		(uint8_t *) cam_sense_data, sense_len, 1);
43
 
44
 	return EFAULT;
45
 }

Return to bug 162909