]>
Commit | Line | Data |
---|---|---|
997e051e JR |
1 | diff -ur lin_tape-3.0.18/intercept.c lin_tape-3.0.18-4.11/intercept.c |
2 | --- lin_tape-3.0.18/intercept.c 2017-02-23 19:14:41.000000000 +0100 | |
3 | +++ lin_tape-3.0.18-4.11/intercept.c 2017-05-10 00:35:27.637366919 +0200 | |
4 | @@ -37,6 +37,9 @@ | |
5 | #include <linux/init.h> | |
6 | #include <linux/idr.h> | |
7 | #include <scsi/scsi_driver.h> | |
8 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
9 | +#include <scsi/scsi_transport.h> | |
10 | +#endif | |
11 | ||
12 | #include "scsi.h" | |
13 | #include "pfo.h" | |
14 | @@ -1362,7 +1365,12 @@ | |
15 | if (pdev->fdev_num != -1) { | |
16 | /* Only for fo devices */ | |
17 | /* This 'if' must match the one above in create unique */ | |
18 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
19 | + sdev->request_queue = blk_alloc_queue_node(GFP_KERNEL, NUMA_NO_NODE); | |
20 | + __scsi_init_queue(sdev->host, sdev->request_queue); | |
300a759d | 21 | +#else |
997e051e | 22 | sdev->request_queue = __scsi_alloc_queue(sdev->host, NULL); |
300a759d | 23 | +#endif |
997e051e | 24 | } |
300a759d | 25 | |
997e051e JR |
26 | /* set device hierachy so the new dummy dev |
27 | diff -ur lin_tape-3.0.18/lin_tape_ioctl_tape.c lin_tape-3.0.18-4.11/lin_tape_ioctl_tape.c | |
28 | --- lin_tape-3.0.18/lin_tape_ioctl_tape.c 2017-05-10 00:36:01.952285733 +0200 | |
29 | +++ lin_tape-3.0.18-4.11/lin_tape_ioctl_tape.c 2017-05-09 21:45:14.236233622 +0200 | |
300a759d JR |
30 | @@ -6464,7 +6464,11 @@ |
31 | } /* if */ | |
32 | ||
33 | tmp_rq = (void*)sdev->request_queue; | |
34 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
35 | + scsi_req_init(req); | |
36 | +#else | |
37 | req->cmd_type = REQ_TYPE_BLOCK_PC; | |
38 | +#endif | |
39 | #if LINUX_VERSION_CODE < KERNEL_VERSION(4,10,0) | |
40 | req->cmd_flags |= REQ_QUIET; | |
41 | #else | |
997e051e | 42 | @@ -6536,17 +6540,29 @@ |
300a759d JR |
43 | bio = req->bio; |
44 | } /* if */ | |
45 | ||
46 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
47 | + scsi_req(req)->cmd_len = COMMAND_SIZE(cdb[0]); | |
48 | + memset(scsi_req(req)->cmd, '\0', MAX_CDB_SIZE); | |
49 | + memcpy(scsi_req(req)->cmd, cdb, scsi_req(req)->cmd_len); | |
50 | + scsi_req(req)->sense = sense_data; | |
51 | + scsi_req(req)->sense_len = 0; | |
52 | +#else | |
53 | req->cmd_len = COMMAND_SIZE(cdb[0]); | |
54 | memset(req->cmd, '\0', MAX_CDB_SIZE); | |
55 | memcpy(req->cmd, cdb, req->cmd_len); | |
56 | req->sense = sense_data; | |
57 | req->sense_len = 0; | |
58 | +#endif | |
59 | req->timeout = timeout; | |
60 | req->retries = 0; | |
61 | ||
62 | blk_execute_rq(req->q, NULL, req, 1); | |
63 | ||
64 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
65 | + *resid = scsi_req(req)->resid_len; | |
66 | +#else | |
67 | *resid = req->resid_len; | |
68 | +#endif | |
69 | status_code = req->errors; | |
70 | ||
71 | if(buf_len && !use_sg) { | |
997e051e JR |
72 | diff -ur lin_tape-3.0.18/lin_tape_tape.h lin_tape-3.0.18-4.11/lin_tape_tape.h |
73 | --- lin_tape-3.0.18/lin_tape_tape.h 2017-02-23 19:14:41.000000000 +0100 | |
74 | +++ lin_tape-3.0.18-4.11/lin_tape_tape.h 2017-05-09 21:45:14.236233622 +0200 | |
75 | @@ -85,7 +85,11 @@ | |
76 | #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,9) | |
77 | #define KOBJ_CT(kobj) ((kobj) ? atomic_read(&(kobj)->refcount) : 0) | |
78 | #else | |
79 | +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0) | |
80 | #define KOBJ_CT(kobj) ((kobj) ? atomic_read(&(kobj)->kref.refcount) : 0) | |
81 | +#else | |
82 | +#define KOBJ_CT(kobj) ((kobj) ? kref_read(&(kobj)->kref) : 0) | |
83 | +#endif | |
84 | #endif | |
85 | ||
86 | /* global definitions */ | |
87 | diff -ur lin_tape-3.0.18/lower.c lin_tape-3.0.18-4.11/lower.c | |
88 | --- lin_tape-3.0.18/lower.c 2017-02-23 19:14:41.000000000 +0100 | |
89 | +++ lin_tape-3.0.18-4.11/lower.c 2017-05-10 00:21:19.106042388 +0200 | |
90 | @@ -69,7 +69,11 @@ | |
91 | /* Local function prototypes */ | |
92 | static int lower_scsi_execute(struct scsi_device *sdev, | |
93 | struct apfo_scsi_command *pfo_cmd, | |
94 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
95 | + unsigned char *local_raw_sense, struct scsi_sense_hdr *sshdr); | |
96 | +#else | |
97 | unsigned char *local_raw_sense); | |
98 | +#endif | |
99 | ||
100 | /** Look at the errors from the SCSI command, | |
101 | * translate them to OS independent values. | |
102 | @@ -267,11 +271,20 @@ | |
103 | /* SCSI Command from decide code */ | |
104 | result = scsi_execute(sdev, pfo_cmd->scsi_cmd, | |
105 | pfo_cmd->data_direction, pfo_cmd->buffer, | |
106 | +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0) | |
107 | pfo_cmd->bufflen, local_raw_sense, pfo_cmd->timeout, | |
108 | pfo_cmd->retries, pfo_cmd->flags, &pfo_cmd->resid_len); | |
109 | +#else | |
110 | + pfo_cmd->bufflen, local_raw_sense, &local_sense_data, pfo_cmd->timeout, | |
111 | + pfo_cmd->retries, pfo_cmd->flags, 0, &pfo_cmd->resid_len); | |
112 | +#endif | |
113 | } else { | |
114 | /* SCSI Command from user space */ | |
115 | +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,11,0) | |
116 | result = lower_scsi_execute(sdev, pfo_cmd, local_raw_sense); | |
117 | +#else | |
118 | + result = lower_scsi_execute(sdev, pfo_cmd, local_raw_sense, &local_sense_data); | |
119 | +#endif | |
120 | } | |
121 | /* Release this path */ | |
122 | scsi_device_put(sdev); | |
123 | @@ -440,7 +453,11 @@ | |
124 | */ | |
125 | static int lower_scsi_execute(struct scsi_device *sdev, | |
126 | struct apfo_scsi_command *pfo_cmd, | |
127 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
128 | + unsigned char *local_raw_sense, struct scsi_sense_hdr *sshdr) { | |
129 | +#else | |
130 | unsigned char *local_raw_sense) { | |
131 | +#endif | |
132 | ||
133 | int err = 0; | |
134 | struct request *rq; | |
135 | @@ -452,7 +469,11 @@ | |
136 | return DRIVER_ERROR << 24; | |
137 | } | |
138 | ||
139 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
140 | + scsi_req_init(rq); | |
141 | +#else | |
142 | rq->cmd_type = REQ_TYPE_BLOCK_PC; | |
143 | +#endif | |
144 | rq->cmd_flags |= pfo_cmd->flags; | |
145 | ||
146 | if ((pfo_cmd->bufflen > 0) && (pfo_cmd->data_direction != DMA_NONE)) { | |
147 | @@ -533,11 +554,19 @@ | |
148 | } | |
149 | } | |
150 | ||
151 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
152 | + scsi_req(rq)->cmd_len = pfo_cmd->cmd_len; | |
153 | + memset(scsi_req(rq)->cmd, 0, BLK_MAX_CDB); | |
154 | + memcpy(scsi_req(rq)->cmd, pfo_cmd->scsi_cmd, pfo_cmd->cmd_len); | |
155 | + scsi_req(rq)->sense = local_raw_sense; | |
156 | + scsi_req(rq)->sense_len = 0; | |
157 | +#else | |
158 | rq->cmd_len = pfo_cmd->cmd_len; | |
159 | memset(rq->cmd, 0, BLK_MAX_CDB); | |
160 | memcpy(rq->cmd, pfo_cmd->scsi_cmd, pfo_cmd->cmd_len); | |
161 | rq->sense = local_raw_sense; | |
162 | rq->sense_len = 0; | |
163 | +#endif | |
164 | rq->timeout = pfo_cmd->timeout; | |
165 | rq->retries = pfo_cmd->retries; | |
166 | rq->end_io_data = pfo_cmd; | |
167 | @@ -551,8 +580,15 @@ | |
168 | DBG_ERROR("unmap returns: %d\n", err); | |
169 | } | |
170 | } | |
171 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,11,0) | |
172 | + pfo_cmd->resid_len = scsi_req(rq)->resid_len; | |
173 | + pfo_cmd->sense_len = scsi_req(rq)->sense_len; | |
174 | + if (sshdr) | |
175 | + scsi_normalize_sense(scsi_req(rq)->sense, scsi_req(rq)->sense_len, sshdr); | |
176 | +#else | |
177 | pfo_cmd->resid_len = rq->resid_len; | |
178 | pfo_cmd->sense_len = rq->sense_len; | |
179 | +#endif | |
180 | pfo_cmd->errors = rq->errors; | |
181 | ||
182 | blk_put_request(rq); |