summaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
diff options
context:
space:
mode:
authorJagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>2018-07-06 23:03:25 +0530
committerKhem Raj <raj.khem@gmail.com>2018-07-09 08:34:59 -0700
commit1e7e4e91817b272b7685406f8d9ef58fe8c65e29 (patch)
treea43682b26e0dff1df725eaac72b6e0574e196896 /meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
parent8603b7643b9025bf88dd55165ec808c4cea144e3 (diff)
downloadmeta-openembedded-1e7e4e91817b272b7685406f8d9ef58fe8c65e29.tar.gz
iscsitarget: Remove recipe as it is no longer supported to build with linux kernel >= 4.14
The upstream iscsitarget source does not have support to build with Linux kernel >= 4.14, as the "struct bio" members has been updated in the linux kernel v4.14 source. Requires major code change in iscsitarget to support building later versions of Linux kernel. The Linux SCSI target framework (tgt) recipe present in meta-openstack layer, can be used as a substitute to iscsitarget recipe and works fine in our testing. Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
Diffstat (limited to 'meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch')
-rw-r--r--meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch327
1 files changed, 0 insertions, 327 deletions
diff --git a/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch b/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
deleted file mode 100644
index 1e6a1d6d3f..0000000000
--- a/meta-networking/recipes-extended/iscsitarget/files/fix-errors-observed-with-linux-3.19-and-greater.patch
+++ /dev/null
@@ -1,327 +0,0 @@
1Description: Fix source to compile on 3.19 kernels
2Author: Stefan Bader <stefan.bader@canonical.com>
3Forward: no
4
5Fixes below inconsistent crash when trying to login to iSCSI target
6server, observed with linux kernel v4.1.
7
8-- snip --
9CPU: 1 PID: 29883 Comm: istd1 Tainted: G O 4.1.35-rt40-yocto-standard #1
10Hardware name: To be filled by O.E.M. To be filled by O.E.M./Larne CRB, BIOS 4.6.5.4 09/18/2014
11task: ffff88020f1f30c0 ti: ffff8800d7f3c000 task.ti: ffff8800d7f3c000
12RIP: 0010:[<ffffffff8140d1ae>] [<ffffffff8140d1ae>] copy_to_iter+0x3e/0x280
13RSP: 0018:ffff8800d7f3f728 EFLAGS: 00010246
14RAX: 00000000d7f3f928 RBX: 0000000000000030 RCX: 0000000000000030
15RDX: ffff8800d7f3f900 RSI: 0000000000000030 RDI: ffff8800d1501e82
16RBP: ffff8800d7f3f768 R08: 00000000c127d467 R09: 0000000000000000
17R10: ffff88020f29e118 R11: 0000000000000004 R12: ffff8800d7f3f900
18R13: 0000000000000030 R14: 0000000000000001 R15: 0000000000000246
19FS: 00007f86f9c4c700(0000) GS:ffff88021ec80000(0000) knlGS:00000000f7733700
20CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
21CR2: 000000000000024e CR3: 00000000d38b0000 CR4: 00000000000406e0
22Stack:
23ffff880214f14ec0 ffff8800d1501e82 ffff8800d7f3f748 0000000000000030
24ffff88020f122500 0000000000000030 0000000000000000 0000000000000030
25ffff8800d7f3f7c8 ffffffff81806981 ffff8800d7f3f798 ffffffff8105d72a
26Call Trace:
27[<ffffffff81806981>] skb_copy_datagram_iter+0x71/0x2b0
28[<ffffffff8105d72a>] ? __local_bh_enable_ip+0x4a/0xb0
29[<ffffffff8186c9c0>] tcp_recvmsg+0x5e0/0xbb0
30[<ffffffff81898ded>] inet_recvmsg+0x8d/0xb0
31[<ffffffff817f49f3>] sock_recvmsg+0x13/0x20
32[<ffffffffa01655c3>] do_recv+0xe3/0x1f0 [iscsi_trgt]
33[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
34[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
35[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
36[<ffffffff8140fed5>] ? find_next_bit+0x15/0x30
37[<ffffffff813fa8e0>] ? cpumask_next_and+0x30/0x50
38[<ffffffff8113f785>] ? __alloc_pages_nodemask+0x165/0x980
39[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
40[<ffffffff8195da8b>] ? _raw_spin_lock+0x1b/0x60
41[<ffffffff8109cfa8>] ? cpuacct_charge+0x58/0x70
42[<ffffffff81089039>] ? update_curr+0xb9/0x190
43[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
44[<ffffffff8112b43f>] ? __perf_event_task_sched_in+0x4f/0x90
45[<ffffffff8195dbbd>] ? _raw_spin_unlock_irq+0x1d/0x40
46[<ffffffff8107e223>] ? finish_task_switch+0x63/0xe0
47[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
48[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
49[<ffffffffa0165c65>] istd+0x4d5/0x1390 [iscsi_trgt]
50[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
51[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
52[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
53[<ffffffff8107748b>] kthread+0xbb/0xe0
54[<ffffffff81950000>] ? wireless_dev_seq_show+0x100/0x180
55[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
56[<ffffffff8195e7a2>] ret_from_fork+0x42/0x70
57[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
58Code: 5a 10 48 89 7d c8 48 39 f3 48 0f 47 de 48 85 db 0f 84 6f 01 00 00 8b 02 49 89
59d4 4c 8b 72 08 4c 8b 7a 18 a8 04 0f 85 a2 00 00 00 <4d> 8b 6f 08 4d 29 f5 49 39 dd 4c 0f 47 eb a8 02 0f 85 5c 01 00
60RSP <ffff8800d7f3f728>
61CR2: 000000000000024e
62------------[ cut here ]------------
63-- snip --
64
65The original patch is at
66http://launchpadlibrarian.net/218100509/iscsitarget_1.4.20.3+svn499-0ubuntu2_1.4.20.3+svn499-0ubuntu2.1.diff.gz,
67those changes were taken using #ifs, inorder to allow compilation of
68iscsitarget package with linux kernels < 3.19.
69
70Upstream-Status: Submitted [http://launchpadlibrarian.net/218100509/iscsitarget_1.4.20.3+svn499-0ubuntu2_1.4.20.3+svn499-0ubuntu2.1.diff.gz]
71
72Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
73
74diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/conn.c iscsitarget-1.4.20.3+svn502/kernel/conn.c
75--- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2017-01-18 22:27:02.713167436 -0800
76+++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2017-01-18 23:13:11.909214379 -0800
77@@ -129,7 +129,11 @@ static void iet_socket_bind(struct iscsi
78
79 dprintk(D_GENERIC, "%llu\n", (unsigned long long) session->sid);
80
81+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
82+ conn->sock = SOCKET_I(file_inode(conn->file));
83+#else
84 conn->sock = SOCKET_I(conn->file->f_dentry->d_inode);
85+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
86 conn->sock->sk->sk_user_data = conn;
87
88 write_lock_bh(&conn->sock->sk->sk_callback_lock);
89diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/file-io.c iscsitarget-1.4.20.3+svn502/kernel/file-io.c
90--- iscsitarget-1.4.20.3+svn502_org/kernel/file-io.c 2014-05-06 13:59:55.000000000 -0700
91+++ iscsitarget-1.4.20.3+svn502/kernel/file-io.c 2017-01-18 23:54:38.505717079 -0800
92@@ -69,7 +69,11 @@ static int fileio_make_request(struct ie
93 static int fileio_sync(struct iet_volume *lu, struct tio *tio)
94 {
95 struct fileio_data *p = lu->private;
96+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
97+ struct inode *inode = file_inode(p->filp);
98+#else
99 struct inode *inode = p->filp->f_dentry->d_inode;
100+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
101 struct address_space *mapping = inode->i_mapping;
102 loff_t ppos, count;
103 int res;
104@@ -213,7 +217,11 @@ static int fileio_attach(struct iet_volu
105 eprintk("%d\n", err);
106 goto out;
107 }
108+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
109+ inode = file_inode(p->filp);
110+#else
111 inode = p->filp->f_dentry->d_inode;
112+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
113
114 if (S_ISREG(inode->i_mode))
115 ;
116diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.c iscsitarget-1.4.20.3+svn502/kernel/iscsi.c
117--- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.c 2014-05-06 13:59:55.000000000 -0700
118+++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.c 2017-01-18 23:37:36.462970326 -0800
119@@ -489,8 +489,12 @@ static void cmnd_skip_pdu(struct iscsi_c
120 }
121 conn->read_iov[i].iov_base = addr;
122 conn->read_iov[i].iov_len = size;
123+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
124+ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, ++i, conn->read_size);
125+#else
126 conn->read_msg.msg_iov = conn->read_iov;
127 conn->read_msg.msg_iovlen = ++i;
128+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
129 }
130
131 static void iscsi_cmnd_reject(struct iscsi_cmnd *req, int reason)
132@@ -718,7 +722,9 @@ static int cmnd_recv_pdu(struct iscsi_co
133 idx = offset >> PAGE_CACHE_SHIFT;
134 offset &= ~PAGE_CACHE_MASK;
135
136+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
137 conn->read_msg.msg_iov = conn->read_iov;
138+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
139 conn->read_size = size = (size + 3) & -4;
140 conn->read_overflow = 0;
141
142@@ -730,16 +736,25 @@ static int cmnd_recv_pdu(struct iscsi_co
143 conn->read_iov[i].iov_base = addr + offset;
144 if (offset + size <= PAGE_CACHE_SIZE) {
145 conn->read_iov[i].iov_len = size;
146+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
147+ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, ++i, conn->read_size);
148+#else
149 conn->read_msg.msg_iovlen = ++i;
150+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
151 break;
152 }
153 conn->read_iov[i].iov_len = PAGE_CACHE_SIZE - offset;
154 size -= conn->read_iov[i].iov_len;
155 offset = 0;
156 if (++i >= ISCSI_CONN_IOV_MAX) {
157+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
158 conn->read_msg.msg_iovlen = i;
159+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
160 conn->read_overflow = size;
161 conn->read_size -= size;
162+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
163+ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, i, conn->read_size);
164+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
165 break;
166 }
167
168@@ -918,7 +933,9 @@ static int nop_out_start(struct iscsi_co
169
170 if ((size = cmnd->pdu.datasize)) {
171 size = (size + 3) & -4;
172+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
173 conn->read_msg.msg_iov = conn->read_iov;
174+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
175 if (cmnd->pdu.bhs.itt != cpu_to_be32(ISCSI_RESERVED_TAG)) {
176 struct tio *tio;
177 int pg_cnt = get_pgcnt(size);
178@@ -946,7 +963,11 @@ static int nop_out_start(struct iscsi_co
179 }
180 assert(!size);
181 conn->read_overflow = size;
182+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
183+ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, i, conn->read_size);
184+#else
185 conn->read_msg.msg_iovlen = i;
186+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
187 }
188
189 out:
190@@ -986,7 +1007,11 @@ static void scsi_cmnd_start(struct iscsi
191 set_cmnd_lunit(req);
192
193 switch (req_hdr->scb[0]) {
194+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
195+ case SERVICE_ACTION_IN_16:
196+#else
197 case SERVICE_ACTION_IN:
198+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
199 if ((req_hdr->scb[1] & 0x1f) != 0x10)
200 goto error;
201 case INQUIRY:
202diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c iscsitarget-1.4.20.3+svn502/kernel/nthread.c
203--- iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c 2014-05-06 13:59:55.000000000 -0700
204+++ iscsitarget-1.4.20.3+svn502/kernel/nthread.c 2017-01-18 23:45:03.291033881 -0800
205@@ -42,9 +42,14 @@ static inline void iscsi_conn_init_read(
206 len = (len + 3) & -4; // XXX ???
207 conn->read_iov[0].iov_base = data;
208 conn->read_iov[0].iov_len = len;
209+#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0)
210 conn->read_msg.msg_iov = conn->read_iov;
211 conn->read_msg.msg_iovlen = 1;
212+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
213 conn->read_size = (len + 3) & -4;
214+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
215+ iov_iter_init(&conn->read_msg.msg_iter, READ, conn->read_iov, 1, conn->read_size);
216+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
217 }
218
219 static void iscsi_conn_read_ahs(struct iscsi_conn *conn, struct iscsi_cmnd *cmnd)
220@@ -83,14 +88,31 @@ static int is_data_available(struct iscs
221
222 static void forward_iov(struct msghdr *msg, int len)
223 {
224+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
225+ struct iovec *iov;
226+
227+ while (msg->msg_iter.iov->iov_len <= len) {
228+ len -= msg->msg_iter.iov->iov_len;
229+ msg->msg_iter.iov++;
230+ msg->msg_iter.nr_segs--;
231+ }
232+#else
233 while (msg->msg_iov->iov_len <= len) {
234 len -= msg->msg_iov->iov_len;
235 msg->msg_iov++;
236 msg->msg_iovlen--;
237 }
238+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
239
240+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
241+ /* XXX: discards const ... */
242+ iov = msg->msg_iter.iov;
243+ iov->iov_base = (char *) msg->msg_iter.iov->iov_base + len;
244+ iov->iov_len -= len;
245+#else
246 msg->msg_iov->iov_base = (char *) msg->msg_iov->iov_base + len;
247 msg->msg_iov->iov_len -= len;
248+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
249 }
250
251 static int do_recv(struct iscsi_conn *conn, int state)
252@@ -98,6 +120,9 @@ static int do_recv(struct iscsi_conn *co
253 mm_segment_t oldfs;
254 struct msghdr msg;
255 struct iovec iov[ISCSI_CONN_IOV_MAX];
256+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
257+ size_t iovlen = ISCSI_CONN_IOV_MAX;
258+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
259 int i, len, res;
260
261 if (!test_bit(CONN_ACTIVE, &conn->state)) {
262@@ -110,12 +135,23 @@ static int do_recv(struct iscsi_conn *co
263 goto out;
264 }
265
266+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
267+ if (conn->read_msg.msg_iter.nr_segs < iovlen)
268+ iovlen = conn->read_msg.msg_iter.nr_segs;
269+
270+ for (i = 0, len = 0; i < iovlen; i++) {
271+ iov[i] = conn->read_msg.msg_iter.iov[i];
272+ len += iov[i].iov_len;
273+ }
274+ iov_iter_init(&msg.msg_iter, READ, iov, iovlen, len);
275+#else
276 msg.msg_iov = iov;
277 msg.msg_iovlen = min_t(size_t, conn->read_msg.msg_iovlen, ISCSI_CONN_IOV_MAX);
278 for (i = 0, len = 0; i < msg.msg_iovlen; i++) {
279 iov[i] = conn->read_msg.msg_iov[i];
280 len += iov[i].iov_len;
281 }
282+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
283
284 oldfs = get_fs();
285 set_fs(get_ds());
286diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/target_disk.c iscsitarget-1.4.20.3+svn502/kernel/target_disk.c
287--- iscsitarget-1.4.20.3+svn502_org/kernel/target_disk.c 2014-05-06 13:59:55.000000000 -0700
288+++ iscsitarget-1.4.20.3+svn502/kernel/target_disk.c 2017-01-18 23:45:51.451010417 -0800
289@@ -606,7 +606,11 @@ static int disk_execute_cmnd(struct iscs
290 case REQUEST_SENSE:
291 send_data_rsp(cmnd, build_request_sense_response);
292 break;
293+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
294+ case SERVICE_ACTION_IN_16:
295+#else
296 case SERVICE_ACTION_IN:
297+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
298 send_data_rsp(cmnd, build_service_action_in_response);
299 break;
300 case READ_6:
301diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/volume.c iscsitarget-1.4.20.3+svn502/kernel/volume.c
302--- iscsitarget-1.4.20.3+svn502_org/kernel/volume.c 2014-05-06 13:59:55.000000000 -0700
303+++ iscsitarget-1.4.20.3+svn502/kernel/volume.c 2017-01-18 23:47:07.957561600 -0800
304@@ -398,7 +398,11 @@ int is_volume_reserved(struct iet_volume
305 case READ_CAPACITY:
306 /* allowed commands when reserved */
307 break;
308+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
309+ case SERVICE_ACTION_IN_16:
310+#else
311 case SERVICE_ACTION_IN:
312+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
313 if ((scb[1] & 0x1F) == 0x10)
314 break;
315 /* fall through */
316@@ -465,7 +469,11 @@ int is_volume_reserved(struct iet_volume
317 if (excl_access_ro && !registered)
318 err = -EBUSY;
319 break;
320+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
321+ case SERVICE_ACTION_IN_16:
322+#else
323 case SERVICE_ACTION_IN:
324+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0) */
325 if ((scb[1] & 0x1F) == 0x10)
326 break;
327 /* fall through */