Commit Graph

9 Commits

Author SHA1 Message Date
Khem Raj
7da4103d4a iscsitarget: Fix kernel with new 4.12+ kernel
Fix patch to be able to work kernel < 4.12.0

Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2017-09-12 10:55:06 -04:00
Jagadeesh Krishnanjanappa
0994337c9f iscsitarget: update patch to contain changes required to build with only linux v4.8 and above
1. Removes lines related "LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0)",
   as they are included in recent
   build_with_updated_bio_struct_of_linux_v4.3_and_above.patch.

2. Updated incorrect "#if 0//LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0)" line.

3. Updated patch to have in compliance with recent
   build_with_updated_bio_struct_of_linux_v4.3_and_above.patch.

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2017-02-22 08:31:58 -05:00
Jagadeesh Krishnanjanappa
8e068c2022 iscsitarget: use upstream to build with linux kernel >= 4.3
1. The original patch is at
   http://launchpadlibrarian.net/227478885/iscsitarget_1.4.20.3+svn502-2ubuntu2_1.4.20.3+svn502-2ubuntu3.diff.gz,
   those changes were taken using #ifs to allow compilation of iscsitarget
   package with kernel versions < 4.3.

2. It helps to maintain the patches in future, when iscsitarget is updated.

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2017-02-22 08:31:58 -05:00
Jagadeesh Krishnanjanappa
67acc01098 iscsitarget: fix inconsistent crash while login to iscsi target from initiator
This patch fixes below inconsistent crash when trying to login to iSCSI target
server, observed with linux kernel v4.1.

-- snip --
CPU: 1 PID: 29883 Comm: istd1 Tainted: G           O    4.1.35-rt40-yocto-standard #1
Hardware 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
task: ffff88020f1f30c0 ti: ffff8800d7f3c000 task.ti: ffff8800d7f3c000
RIP: 0010:[<ffffffff8140d1ae>]  [<ffffffff8140d1ae>] copy_to_iter+0x3e/0x280
RSP: 0018:ffff8800d7f3f728  EFLAGS: 00010246
RAX: 00000000d7f3f928 RBX: 0000000000000030 RCX: 0000000000000030
RDX: ffff8800d7f3f900 RSI: 0000000000000030 RDI: ffff8800d1501e82
RBP: ffff8800d7f3f768 R08: 00000000c127d467 R09: 0000000000000000
R10: ffff88020f29e118 R11: 0000000000000004 R12: ffff8800d7f3f900
R13: 0000000000000030 R14: 0000000000000001 R15: 0000000000000246
FS:  00007f86f9c4c700(0000) GS:ffff88021ec80000(0000) knlGS:00000000f7733700
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 000000000000024e CR3: 00000000d38b0000 CR4: 00000000000406e0
Stack:
ffff880214f14ec0 ffff8800d1501e82 ffff8800d7f3f748 0000000000000030
ffff88020f122500 0000000000000030 0000000000000000 0000000000000030
ffff8800d7f3f7c8 ffffffff81806981 ffff8800d7f3f798 ffffffff8105d72a
Call Trace:
[<ffffffff81806981>] skb_copy_datagram_iter+0x71/0x2b0
[<ffffffff8105d72a>] ? __local_bh_enable_ip+0x4a/0xb0
[<ffffffff8186c9c0>] tcp_recvmsg+0x5e0/0xbb0
[<ffffffff81898ded>] inet_recvmsg+0x8d/0xb0
[<ffffffff817f49f3>] sock_recvmsg+0x13/0x20
[<ffffffffa01655c3>] do_recv+0xe3/0x1f0 [iscsi_trgt]
[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
[<ffffffff81153097>] ? __mod_zone_page_state+0x77/0xb0
[<ffffffff8140fed5>] ? find_next_bit+0x15/0x30
[<ffffffff813fa8e0>] ? cpumask_next_and+0x30/0x50
[<ffffffff8113f785>] ? __alloc_pages_nodemask+0x165/0x980
[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
[<ffffffff8195da8b>] ? _raw_spin_lock+0x1b/0x60
[<ffffffff8109cfa8>] ? cpuacct_charge+0x58/0x70
[<ffffffff81089039>] ? update_curr+0xb9/0x190
[<ffffffff81417613>] ? __this_cpu_preempt_check+0x13/0x20
[<ffffffff8112b43f>] ? __perf_event_task_sched_in+0x4f/0x90
[<ffffffff8195dbbd>] ? _raw_spin_unlock_irq+0x1d/0x40
[<ffffffff8107e223>] ? finish_task_switch+0x63/0xe0
[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
[<ffffffff8107e370>] ? preempt_count_add+0xd0/0xf0
[<ffffffffa0165c65>] istd+0x4d5/0x1390 [iscsi_trgt]
[<ffffffff81959e3b>] ? __schedule+0x38b/0x980
[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
[<ffffffffa0165790>] ? nthread_wakeup+0x40/0x40 [iscsi_trgt]
[<ffffffff8107748b>] kthread+0xbb/0xe0
[<ffffffff81950000>] ? wireless_dev_seq_show+0x100/0x180
[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
[<ffffffff8195e7a2>] ret_from_fork+0x42/0x70
[<ffffffff810773d0>] ? kthread_worker_fn+0x170/0x170
Code: 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
d4 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
RSP <ffff8800d7f3f728>
CR2: 000000000000024e
------------[ cut here ]------------
-- snip --

The original patch is at
http://launchpadlibrarian.net/218100509/iscsitarget_1.4.20.3+svn499-0ubuntu2_1.4.20.3+svn499-0ubuntu2.1.diff.gz,
those changes were taken using #ifs, inorder to allow compilation of
iscsitarget package with linux kernels < 3.19.

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2017-02-22 08:31:58 -05:00
He Zhe
c48160ed07 iscsitarget: Fix call trace of ahash API calling
The previous build_with_updated_interfaces_of_linux_v4.8_and_above.patch
does not alloc struct ahash_request before using it. This will cause the
kernel call trace below when calling gen_scsiid on kernel 4.8 or later
version.

This patch normalizes the calling of ahash API according to the example
in kernel doc Documentation/crypto/api-intro.txt.

BUG: unable to handle kernel NULL pointer dereference at 0000000000000020
IP: [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
PGD dd77067 PUD dd7c067 PMD 0
Oops: 0000 [#1] PREEMPT SMP
Modules linked in: iscsi_trgt(O)
CPU: 0 PID: 350 Comm: ietd Tainted: G           O    4.8.12-yocto-standard #1
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
task: ffff88000dfe2c00 task.stack: ffff88000de88000
RIP: 0010:[<ffffffffa0008d45>]  [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
RSP: 0018:ffff88000de8bd90  EFLAGS: 00000206
RAX: 000000000000ddfa RBX: ffff88000ddd1d78 RCX: ffffea0000000000
RDX: 0000000000000600 RSI: 0000000000000000 RDI: ffff88000ddd1c14
RBP: ffff88000de8be38 R08: ffff88000de44180 R09: ffff88000de8bdd0
R10: 000000000000002c R11: 0000000000000000 R12: ffff88000ddfa600
R13: 0000000000000000 R14: 0000000000000000 R15: ffff88000de92200
FS:  00007f767548b700(0000) GS:ffff88000fc00000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000000000000020 CR3: 000000000dd2d000 CR4: 00000000000006f0
Stack:
 ffff88000de8bdd0 ffff88000dc1b3d0 ffff88000ddfa650 ffff88000ddfa660
 ffff88000df8f000 ffff88000ddd1c00 ffff88000de44180 0000000000000000
 ffffea0000377440 0000000f00000c14 0000000000000000 0000000000000000
Call Trace:
 [<ffffffffa0006547>] ioctl+0x217/0x390 [iscsi_trgt]
 [<ffffffff81192574>] do_vfs_ioctl+0x94/0x5c0
 [<ffffffff8117ff73>] ? vfs_read+0xf3/0x120
 [<ffffffff81192b19>] SyS_ioctl+0x79/0x90
 [<ffffffff8191a45b>] entry_SYSCALL_64_fastpath+0x13/0x8f
Code: 4c 01 e0 0f 82 a2 01 00 00 48 b9 00 00 00 80 ff 77 00 00 48 01
c8 45 31 f6 48 b9 00 00 00 00 00 ea ff ff 89 54 24 68 48 c1 e8 0c <49>
8b 56 20 4c 89 44 24 20 4c 89 f7 48 c1 e0 06 c7 44 24 6c 04
RIP  [<ffffffffa0008d45>] volume_add+0x625/0x7f0 [iscsi_trgt]
 RSP <ffff88000de8bd90>
CR2: 0000000000000020
end trace cd2016297df21635 ]
ietd_response_recv 200 0 -5
Input/output error.

Signed-off-by: He Zhe <zhe.he@windriver.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2017-02-22 08:31:58 -05:00
Jagadeesh Krishnanjanappa
93b0d65793 iscsitarget: resolve build error with linux kernel 4.8
The below changes in kernel source, triggered iscsitarget
build fail with linux kernel v4.8.

1. An extra 'flags' argument has been passed to vfs_readv/vfs_writev
   syscalls in v4.8. So, set this argument to "0" for now
   (as there is no real need for that).
   Ref: 793b80ef14
   Solves:
   -- snip --
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c: In function 'write_data':
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c:350:9: error: too few arguments to function 'vfs_writev'
   res = vfs_writev(file, (struct iovec __user *) iop, count, &off);
         ^~~~~~~~~~
   -- snip --

2. Redefine dropped PAGE_CACHE_* and page_cache_{get,release} definitions,
   as they have been dropped with v4.8
   Ref: 1fa64f198b
   Solves:
   -- snip --
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/param.c: In function 'sess_param_check':
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/param.c:48:41: error: 'PAGE_CACHE_SIZE' undeclared (first use in this function)
       (u32) ((ISCSI_CONN_IOV_MAX - 1) * PAGE_CACHE_SIZE));
                                         ^
   -- snip --

3. Replace crypto_hash interfaces with crypto_ahash interfaces,
   Ref: 8965450987
   Ref: https://www.redhat.com/archives/dm-devel/2016-January/msg00244.html
   Solves:
   -- snip --
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c: In function 'digest_init':
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c:42:23: error: implicit declaration of function 'crypto_alloc_hash' [-Werror=implicit-function-declaration]
   conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0,
                       ^~~~~~~~~~~~~~~~~
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c: In function 'digest_cleanup':
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/digest.c:77:3: error: implicit declaration of function 'crypto_free_hash' [-Werror=implicit-function-declaration]
   crypto_free_hash(conn->tx_hash.tfm);
   ^~~~~~~~~~~~~~~~
   -- snip --

4. The earlier "rw" parameter has been set in "bi_rw" within
   bio structure, hence remove "rw" argument.
   Ref: 4e49ea4a3d
   Solves:
-- snip --
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/block-io.c:140:14: warning: passing argument 1 of 'submit_bio' makes pointer from integer without a cast [-Wint-conversion]
   submit_bio(rw, bio);
              ^~
-- snip --

5. The 'len' argument from sk_data_ready() callback has been removed in
   linux kernel v4.3 and above.
   Ref: 676d23690f
   Solves:
-- snip --
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c: In function 'iet_socket_bind':
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c:143:38: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
  target->nthread_info.old_data_ready = conn->sock->sk->sk_data_ready;
                                      ^
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/conn.c:144:32: error: assignment from incompatible pointer type [-Werror=incompatible-pointer-types]
  conn->sock->sk->sk_data_ready = iet_data_ready;
                                ^
-- snip --

6.
   A. The "size" argument has been dropped from sock_recvmsg syscall in v4.8,
      as all callers have it equal to msg_data_left(msg).
   B. 'struct user_msghdr' is being used for userland-side msghdr instead
      of 'struct msghdr', which is used for kernel-side msghdr in linux v3.19
      and above, so typecase it while calling sock_recvmsg syscall.
   Ref: 2da62906b1
        666547ff59
   Solves:
   -- snip --
TOPDIR/tmp-glibc/work-shared/qemux86/kernel-source/include/linux/net.h:222:5: note: expected 'struct msghdr *' but argument is of type 'struct user_msghdr *'
 int sock_recvmsg(struct socket *sock, struct msghdr *msg, int flags);
     ^~~~~~~~~~~~
TOPDIR/tmp-glibc/work/qemux86-oe-linux/iscsitarget/1.4.20.3+svn502-r0/iscsitarget-1.4.20.3+svn502/kernel/nthread.c:129:8: error: too many arguments to function 'sock_recvmsg'
  res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL);
        ^~~~~~~~~~~~
   -- snip --

Detailed error log is at: http://errors.yoctoproject.org/Errors/Details/83334/

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2016-10-20 11:16:55 -04:00
Jagadeesh Krishnanjanappa
ee61becc5b iscsitarget: resolve build error with linux kernel 4.3 and above
1. test_bit was used to return true boolean value, if
   BIO_UPTODATE bit of bio->bi_flags is set. But the same
   job can be done by checking bio->bi_error, implemented in
   linux kernel 4.3 and above. If bio->bi_error is set, then
   it denotes error.

Ref: 4246a0b63b

It solves below build error:
-- snip --
iscsitarget-1.4.20.3+svn502/kernel/block-io.c:40:19: error: 'BIO_UPTODATE' undeclared (first use in this function)
   error = test_bit(BIO_UPTODATE, &bio->bi_flags) ? error : -EIO;
-- CUT --

2. bio can always be filled to a maximum value of BIO_MAX_PAGES,
   so no need to check for min value for linux kernel 4.3 and above.

Ref: b54ffb73ca

It solves below build error:
-- snip --
iscsitarget-1.4.20.3+svn502/kernel/block-io.c:80:15: error: implicit declaration of function 'bio_get_nr_vecs' [-Werror=implicit-function-declaration]
    max_pages = bio_get_nr_vecs(bio_data->bdev);
-- CUT --

3. Remove unwanted explicit setting of CFLAGS and CC flags. Setting them in
   oe_runmake command, will override CFLAGS mentioned in iscsitarget Makefile
   and resulting in a below error:

-- snip --
 In file included from iscsid.c:38:0:
 iscsid.h:38:19: fatal error: iet_u.h: No such file or directory
 compilation terminated.
 In file included from conn.c:15:0:
 iscsid.h:38:19: fatal error: iet_u.h: No such file or directory
 compilation terminated.
-- CUT --

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2016-04-20 15:10:45 -04:00
Jagadeesh Krishnanjanappa
2f2418bb40 iscsitarget: resolve build error if CONFIG_IPV6 config is not enabled
The element skc_v6_daddr (in struct sock_common) is defined in
kernel source only when CONFIG_IPV6 is enabled. Hence, access
sk_v6_daddr element (i.e __sk_common.skc_v6_daddr) only when CONFIG_IPV6
is defined; to fix below error in world build:

-- snip --
/home/jenkins/oe/world/shr-core/tmp-glibc/work-shared/qemux86/kernel-source/include/net/sock.h:330:33: error: 'struct sock_common' has no member named 'skc_v6_daddr'
-- CUT --

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2016-01-05 12:43:33 -05:00
Jagadeesh Krishnanjanappa
fa855df1a0 iscsitarget: add new recipe
iSCSI Enterprise Target is aimed to develop an
open source iSCSI target with professional features,
that works well in enterprise environment under real
workload, and is scalable and versatile enough to meet the
challenge of future storage needs and developments.

Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com>
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Joe MacDonald <joe_macdonald@mentor.com>
2015-09-14 16:14:04 -04:00