diff options
Diffstat (limited to 'meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch')
-rw-r--r-- | meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch | 475 |
1 files changed, 0 insertions, 475 deletions
diff --git a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch b/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch deleted file mode 100644 index e508a5e6c..000000000 --- a/meta-openembedded/meta-networking/recipes-extended/iscsitarget/files/build_with_updated_interfaces_of_linux_v4.8_and_above.patch +++ /dev/null @@ -1,475 +0,0 @@ -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: https://github.com/torvalds/linux/commit/793b80ef14af56d20c998265287648ad34239b6f - 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: https://github.com/torvalds/linux/commit/1fa64f198b9f8d6ec0f7aec7c18dc94684391140 - 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: https://github.com/torvalds/linux/commit/896545098777564212b9e91af4c973f094649aa7 - 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: https://github.com/torvalds/linux/commit/4e49ea4a3d276365bf7396c9b77b4d1d5923835a - 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: https://github.com/torvalds/linux/commit/676d23690fb62b5d51ba5d659935e9f7d9da9f8e - 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: https://github.com/torvalds/linux/commit/2da62906b1e298695e1bb725927041cd59942c98 - https://github.com/torvalds/linux/commit/666547ff591cebdedc4679bf6b1b3f3383a8dea3 - 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/ - -Upstream-Status: Pending - -Signed-off-by: Jagadeesh Krishnanjanappa <jkrishnanjanappa@mvista.com> - -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c iscsitarget-1.4.20.3+svn502/kernel/block-io.c ---- iscsitarget-1.4.20.3+svn502_org/kernel/block-io.c 2017-01-19 20:19:27.400507354 -0800 -+++ iscsitarget-1.4.20.3+svn502/kernel/block-io.c 2017-01-19 20:32:22.977988593 -0800 -@@ -104,7 +104,11 @@ blockio_make_request(struct iet_volume * - /* bi_sector is ALWAYS in units of 512 bytes */ - bio->bi_iter.bi_sector = ppos >> 9; - bio->bi_bdev = bio_data->bdev; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ bio->bi_end_io = (bio_end_io_t *) blockio_bio_endio; -+#else - bio->bi_end_io = blockio_bio_endio; -+#endif - bio->bi_private = tio_work; - - if (tio_bio) -@@ -139,7 +143,12 @@ blockio_make_request(struct iet_volume * - tio_bio = tio_bio->bi_next; - bio->bi_next = NULL; - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ bio_set_op_attrs(bio, REQ_OP_WRITE, 0); -+ submit_bio(bio); -+#else - submit_bio(rw, bio); -+#endif - } - - blk_finish_plug(&plug); -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/conn.c iscsitarget-1.4.20.3+svn502/kernel/conn.c ---- iscsitarget-1.4.20.3+svn502_org/kernel/conn.c 2017-01-19 20:19:27.400507354 -0800 -+++ iscsitarget-1.4.20.3+svn502/kernel/conn.c 2017-01-19 20:32:22.978988614 -0800 -@@ -148,8 +148,14 @@ static void iet_socket_bind(struct iscsi - target->nthread_info.old_state_change = conn->sock->sk->sk_state_change; - conn->sock->sk->sk_state_change = iet_state_change; - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ target->nthread_info.old_data_ready = (void (*) (struct sock *)) \ -+ conn->sock->sk->sk_data_ready; -+ conn->sock->sk->sk_data_ready = (void (*) (struct sock *)) iet_data_ready; -+#else - target->nthread_info.old_data_ready = conn->sock->sk->sk_data_ready; - conn->sock->sk->sk_data_ready = iet_data_ready; -+#endif - - target->nthread_info.old_write_space = conn->sock->sk->sk_write_space; - conn->sock->sk->sk_write_space = iet_write_space; -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/digest.c iscsitarget-1.4.20.3+svn502/kernel/digest.c ---- iscsitarget-1.4.20.3+svn502_org/kernel/digest.c 2014-05-06 13:59:55.000000000 -0700 -+++ iscsitarget-1.4.20.3+svn502/kernel/digest.c 2017-01-19 20:32:22.978988614 -0800 -@@ -30,6 +30,9 @@ void digest_alg_available(unsigned int * - int digest_init(struct iscsi_conn *conn) - { - int err = 0; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct crypto_ahash *tfm; -+#endif - - if (!(conn->hdigest_type & DIGEST_ALL)) - conn->hdigest_type = DIGEST_NONE; -@@ -39,15 +42,40 @@ int digest_init(struct iscsi_conn *conn) - - if (conn->hdigest_type & DIGEST_CRC32C || - conn->ddigest_type & DIGEST_CRC32C) { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ tfm = crypto_alloc_ahash("crc32c", 0, CRYPTO_ALG_ASYNC); -+ if (IS_ERR(tfm)) { -+ tfm = NULL; -+#else - conn->rx_hash.tfm = crypto_alloc_hash("crc32c", 0, - CRYPTO_ALG_ASYNC); - conn->rx_hash.flags = 0; - if (IS_ERR(conn->rx_hash.tfm)) { - conn->rx_hash.tfm = NULL; -+#endif - err = -ENOMEM; - goto out; - } -- -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ conn->rx_hash = ahash_request_alloc(tfm, GFP_KERNEL); -+ if (!conn->rx_hash) { -+ pr_err("ahash_request_alloc() failed for conn->rx_hash\n"); -+ crypto_free_ahash(tfm); -+ err = -ENOMEM; -+ goto out; -+ } -+ ahash_request_set_callback(conn->rx_hash, 0, NULL, NULL); -+ conn->tx_hash = ahash_request_alloc(tfm, GFP_KERNEL); -+ if(!conn->tx_hash) { -+ pr_err("ahash_request_alloc() failed for conn->tx_hash\n"); -+ ahash_request_free(conn->rx_hash); -+ conn->rx_hash = NULL; -+ crypto_free_ahash(tfm); -+ err = -ENOMEM; -+ goto out; -+ } -+ ahash_request_set_callback(conn->tx_hash, 0, NULL, NULL); -+#else - conn->tx_hash.tfm = crypto_alloc_hash("crc32c", 0, - CRYPTO_ALG_ASYNC); - conn->tx_hash.flags = 0; -@@ -56,6 +84,7 @@ int digest_init(struct iscsi_conn *conn) - err = -ENOMEM; - goto out; - } -+#endif - } - - out: -@@ -73,10 +102,21 @@ out: - */ - void digest_cleanup(struct iscsi_conn *conn) - { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ ahash_request_free(conn->tx_hash); -+ if (conn->rx_hash) { -+ struct crypto_ahash *tfm; -+ tfm = crypto_ahash_reqtfm(conn->rx_hash); -+ ahash_request_free(conn->rx_hash); -+ crypto_free_ahash(tfm); -+ } -+ -+#else - if (conn->tx_hash.tfm) - crypto_free_hash(conn->tx_hash.tfm); - if (conn->rx_hash.tfm) - crypto_free_hash(conn->rx_hash.tfm); -+#endif - } - - /** -@@ -160,8 +200,13 @@ static inline void __dbg_simulate_data_d - } - } - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+static void digest_header(struct ahash_request *hash, struct iscsi_pdu *pdu, -+ u8 *crc) -+#else - static void digest_header(struct hash_desc *hash, struct iscsi_pdu *pdu, - u8 *crc) -+#endif - { - struct scatterlist sg[2]; - unsigned int nbytes = sizeof(struct iscsi_hdr); -@@ -174,16 +219,27 @@ static void digest_header(struct hash_de - nbytes += pdu->ahssize; - } - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ crypto_ahash_init(hash); -+ ahash_request_set_crypt(hash, sg, crc, nbytes); -+ crypto_ahash_update(hash); -+ crypto_ahash_digest(hash); -+#else - crypto_hash_init(hash); - crypto_hash_update(hash, sg, nbytes); - crypto_hash_final(hash, crc); -+#endif - } - - int digest_rx_header(struct iscsi_cmnd *cmnd) - { - u32 crc; - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ digest_header(cmnd->conn->rx_hash, &cmnd->pdu, (u8 *) &crc); -+#else - digest_header(&cmnd->conn->rx_hash, &cmnd->pdu, (u8 *) &crc); -+#endif - if (crc != cmnd->hdigest) - return -EIO; - -@@ -192,11 +248,20 @@ int digest_rx_header(struct iscsi_cmnd * - - void digest_tx_header(struct iscsi_cmnd *cmnd) - { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ digest_header(cmnd->conn->tx_hash, &cmnd->pdu, (u8 *) &cmnd->hdigest); -+#else - digest_header(&cmnd->conn->tx_hash, &cmnd->pdu, (u8 *) &cmnd->hdigest); -+#endif - } - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+static void digest_data(struct ahash_request *hash, struct iscsi_cmnd *cmnd, -+ struct tio *tio, u32 offset, u8 *crc) -+#else - static void digest_data(struct hash_desc *hash, struct iscsi_cmnd *cmnd, - struct tio *tio, u32 offset, u8 *crc) -+#endif - { - struct scatterlist *sg = cmnd->conn->hash_sg; - u32 size, length, npages; -@@ -214,7 +279,11 @@ static void digest_data(struct hash_desc - BUG_ON(npages > ISCSI_CONN_IOV_MAX); - - sg_init_table(sg, ARRAY_SIZE(cmnd->conn->hash_sg)); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ crypto_ahash_init(hash); -+#else - crypto_hash_init(hash); -+#endif - - for (i = 0; size > 0; i++) { - length = min_t(u32, PAGE_CACHE_SIZE - offset, size); -@@ -225,8 +294,14 @@ static void digest_data(struct hash_desc - - sg_mark_end(&sg[i - 1]); - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ ahash_request_set_crypt(hash, sg, crc, nbytes); -+ crypto_ahash_update(hash); -+ crypto_ahash_digest(hash); -+#else - crypto_hash_update(hash, sg, nbytes); - crypto_hash_final(hash, crc); -+#endif - } - - int digest_rx_data(struct iscsi_cmnd *cmnd) -@@ -251,8 +326,11 @@ int digest_rx_data(struct iscsi_cmnd *cm - tio = cmnd->tio; - offset = 0; - } -- -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ digest_data(cmnd->conn->rx_hash, cmnd, tio, offset, (u8 *) &crc); -+#else - digest_data(&cmnd->conn->rx_hash, cmnd, tio, offset, (u8 *) &crc); -+#endif - - if (!cmnd->conn->read_overflow && - (cmnd_opcode(cmnd) != ISCSI_OP_PDU_REJECT)) { -@@ -269,6 +347,11 @@ void digest_tx_data(struct iscsi_cmnd *c - struct iscsi_data_out_hdr *req = (struct iscsi_data_out_hdr *)&cmnd->pdu.bhs; - - assert(tio); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ digest_data(cmnd->conn->tx_hash, cmnd, tio, -+ be32_to_cpu(req->buffer_offset), (u8 *) &cmnd->ddigest); -+#else - digest_data(&cmnd->conn->tx_hash, cmnd, tio, - be32_to_cpu(req->buffer_offset), (u8 *) &cmnd->ddigest); -+#endif - } -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h iscsitarget-1.4.20.3+svn502/kernel/iscsi.h ---- iscsitarget-1.4.20.3+svn502_org/kernel/iscsi.h 2017-01-19 20:19:27.400507354 -0800 -+++ iscsitarget-1.4.20.3+svn502/kernel/iscsi.h 2017-01-19 20:32:22.979988634 -0800 -@@ -14,6 +14,7 @@ - #include <linux/pagemap.h> - #include <linux/seq_file.h> - #include <linux/mm.h> -+#include <crypto/hash.h> - #include <linux/crypto.h> - #include <linux/scatterlist.h> - #include <net/sock.h> -@@ -275,8 +276,13 @@ struct iscsi_conn { - u32 write_offset; - int write_state; - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct ahash_request *rx_hash; -+ struct ahash_request *tx_hash; -+#else - struct hash_desc rx_hash; - struct hash_desc tx_hash; -+#endif - struct scatterlist hash_sg[ISCSI_CONN_IOV_MAX]; - }; - -@@ -552,4 +558,10 @@ enum cmnd_flags { - #define PRODUCT_ID "VIRTUAL-DISK" - #define PRODUCT_REV "0" - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+#define PAGE_CACHE_SHIFT PAGE_SHIFT -+#define PAGE_CACHE_SIZE PAGE_SIZE -+#define PAGE_CACHE_MASK PAGE_MASK -+#endif -+ - #endif /* __ISCSI_H__ */ -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c iscsitarget-1.4.20.3+svn502/kernel/nthread.c ---- iscsitarget-1.4.20.3+svn502_org/kernel/nthread.c 2017-01-19 20:19:27.276504928 -0800 -+++ iscsitarget-1.4.20.3+svn502/kernel/nthread.c 2017-01-19 20:32:22.979988634 -0800 -@@ -155,7 +155,12 @@ static int do_recv(struct iscsi_conn *co - - oldfs = get_fs(); - set_fs(get_ds()); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ res = sock_recvmsg(conn->sock, (struct msghdr *) &msg, \ -+ MSG_DONTWAIT | MSG_NOSIGNAL); -+#else - res = sock_recvmsg(conn->sock, &msg, len, MSG_DONTWAIT | MSG_NOSIGNAL); -+#endif - set_fs(oldfs); - - if (res <= 0) { -@@ -376,7 +381,11 @@ static int write_data(struct iscsi_conn - ; - oldfs = get_fs(); - set_fs(KERNEL_DS); -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ res = vfs_writev(file, (struct iovec __user *) iop, count, &off, 0); -+#else - res = vfs_writev(file, (struct iovec __user *) iop, count, &off); -+#endif - set_fs(oldfs); - dprintk(D_DATA, "%#Lx:%u: %d(%ld)\n", - (unsigned long long) conn->session->sid, conn->cid, -@@ -503,7 +512,11 @@ static int tx_ddigest(struct iscsi_cmnd - iov.iov_base = (char *) (&cmnd->ddigest) + (sizeof(u32) - rest); - iov.iov_len = rest; - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ res = kernel_sendmsg(cmnd->conn->sock, (struct msghdr *) &msg, &iov, 1, rest); -+#else - res = kernel_sendmsg(cmnd->conn->sock, &msg, &iov, 1, rest); -+#endif - - if (res > 0) { - cmnd->conn->write_size -= res; -@@ -702,7 +715,12 @@ static void close_conn(struct iscsi_conn - - write_lock_bh(&conn->sock->sk->sk_callback_lock); - conn->sock->sk->sk_state_change = target->nthread_info.old_state_change; -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ conn->sock->sk->sk_data_ready = (void (*) (struct sock *)) \ -+ target->nthread_info.old_data_ready; -+#else - conn->sock->sk->sk_data_ready = target->nthread_info.old_data_ready; -+#endif - conn->sock->sk->sk_write_space = target->nthread_info.old_write_space; - write_unlock_bh(&conn->sock->sk->sk_callback_lock); - -diff -Naurp iscsitarget-1.4.20.3+svn502_org/kernel/volume.c iscsitarget-1.4.20.3+svn502/kernel/volume.c ---- iscsitarget-1.4.20.3+svn502_org/kernel/volume.c 2017-01-19 20:19:27.276504928 -0800 -+++ iscsitarget-1.4.20.3+svn502/kernel/volume.c 2017-01-19 20:32:22.979988634 -0800 -@@ -84,12 +84,25 @@ static int set_scsisn(struct iet_volume - /* Generate a MD5 hash of the target IQN and LUN number */ - static void gen_scsiid(struct iet_volume *volume) - { -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ struct ahash_request *hash; -+ struct crypto_ahash *tfm; -+#else - struct hash_desc hash; -+#endif - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ tfm = crypto_alloc_ahash("md5", 0, CRYPTO_ALG_ASYNC); -+#else - hash.tfm = crypto_alloc_hash("md5", 0, CRYPTO_ALG_ASYNC); - hash.flags = 0; -+#endif - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ if (!IS_ERR(tfm)) { -+#else - if (!IS_ERR(hash.tfm)) { -+#endif - struct scatterlist sg[2]; - unsigned int nbytes = 0; - -@@ -102,11 +115,19 @@ static void gen_scsiid(struct iet_volume - sg_set_buf(&sg[1], &volume->lun, sizeof(volume->lun)); - nbytes += sizeof(volume->lun); - -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0) -+ crypto_ahash_init(hash); -+ ahash_request_set_crypt(hash, sg, volume->scsi_id, nbytes); -+ crypto_ahash_update(hash); -+ crypto_ahash_digest(hash); -+ crypto_free_ahash(tfm); -+#else - crypto_hash_init(&hash); - crypto_hash_update(&hash, sg, nbytes); - crypto_hash_final(&hash, volume->scsi_id); - - crypto_free_hash(hash.tfm); -+#endif - } else { - /* If no MD5 available set ID to TID and LUN */ - memcpy(volume->scsi_id, &volume->target->tid, |