mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-29 18:00:18 +00:00
scst, iscsi-scst: Port to RHEL / CentOS 8.2
Apparently the Linux kernel v4.20 iov_iter_kvec() function has been backported to RHEL / CentOS 8.2. This patch fixes the following kernel warning: WARNING: CPU: 26 PID: 21141 at lib/iov_iter.c:1083 iov_iter_kvec+0x25/0x30 Call Trace: fileio_exec_async+0x216/0x3a0 [scst_vdisk] fileio_exec_write+0x3b9/0x450 [scst_vdisk] vdev_do_job+0x34/0xc0 [scst_vdisk] scst_do_real_exec+0x54/0x100 [scst] scst_exec_check_blocking+0xbb/0x210 [scst] scst_process_active_cmd+0x64d/0x1550 [scst] scst_cmd_thread+0x170/0x5a0 [scst] kthread+0x112/0x130 ret_from_fork+0x35/0x40 See also https://github.com/bvanassche/scst/issues/26. git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9026 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1505,11 +1505,8 @@ static void cmnd_prepare_get_rejected_immed_data(struct iscsi_cmnd *cmnd)
|
||||
e = min_t(u32, s, PAGE_SIZE);
|
||||
conn->read_iov[i].iov_len = e;
|
||||
}
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ, conn->read_iov, i, size);
|
||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ | ITER_KVEC,
|
||||
conn->read_iov, i, size);
|
||||
#else
|
||||
conn->read_msg.msg_iov = conn->read_iov;
|
||||
conn->read_msg.msg_iovlen = i;
|
||||
@@ -1659,12 +1656,9 @@ static int cmnd_prepare_recv_pdu(struct iscsi_conn *conn,
|
||||
}
|
||||
|
||||
i++;
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ, conn->read_iov, i,
|
||||
read_size);
|
||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ | ITER_KVEC,
|
||||
conn->read_iov, i, read_size);
|
||||
#else
|
||||
conn->read_msg.msg_iov = conn->read_iov;
|
||||
conn->read_msg.msg_iovlen = i;
|
||||
@@ -1855,12 +1849,9 @@ static int nop_out_start(struct iscsi_cmnd *cmnd)
|
||||
sBUG_ON(size != 0);
|
||||
}
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ, conn->read_iov,
|
||||
i, cmnd->pdu.datasize);
|
||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ | ITER_KVEC,
|
||||
conn->read_iov, i, cmnd->pdu.datasize);
|
||||
#else
|
||||
conn->read_msg.msg_iov = conn->read_iov;
|
||||
conn->read_msg.msg_iovlen = i;
|
||||
|
||||
@@ -463,11 +463,8 @@ static inline void iscsi_conn_init_read(struct iscsi_conn *conn,
|
||||
{
|
||||
conn->read_iov[0].iov_base = data;
|
||||
conn->read_iov[0].iov_len = len;
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ, conn->read_iov, 1, len);
|
||||
#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
iov_iter_kvec(&conn->read_msg.msg_iter, READ | ITER_KVEC,
|
||||
conn->read_iov, 1, len);
|
||||
#else
|
||||
conn->read_msg.msg_iov = conn->read_iov;
|
||||
conn->read_msg.msg_iovlen = 1;
|
||||
|
||||
@@ -1606,6 +1606,32 @@ typedef unsigned long uintptr_t;
|
||||
char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap);
|
||||
#endif
|
||||
|
||||
/* <linux/uio.h> */
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 19, 0)
|
||||
/* See also commit abb78f875f3f ("new helper: iov_iter_kvec()") # v3.19. */
|
||||
static inline void
|
||||
iov_iter_kvec_backport(struct iov_iter *i, unsigned int direction,
|
||||
const struct kvec *kvec, unsigned long nr_segs,
|
||||
size_t count)
|
||||
{
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0) || \
|
||||
(defined(RHEL_MAJOR) && \
|
||||
(RHEL_MAJOR -0 > 8 || (RHEL_MAJOR -0 == 8 && RHEL_MINOR -0 >= 2)))
|
||||
/*
|
||||
* For iov_iter_kvec() implementations that have a WARN_ON(direction &
|
||||
* ~(READ | WRITE)) statement. See also commit aa563d7bca6e ("iov_iter:
|
||||
* Separate type from direction and use accessor functions") # v4.20.
|
||||
*/
|
||||
iov_iter_kvec(i, direction, kvec, nr_segs, count);
|
||||
#else
|
||||
iov_iter_kvec(i, ITER_KVEC | direction, kvec, nr_segs, count);
|
||||
#endif
|
||||
}
|
||||
|
||||
#define iov_iter_kvec iov_iter_kvec_backport
|
||||
#endif
|
||||
|
||||
/* <linux/unaligned.h> */
|
||||
|
||||
#if defined(RHEL_MAJOR) && RHEL_MAJOR -0 <= 5
|
||||
|
||||
@@ -3261,11 +3261,7 @@ static enum compl_status_e fileio_exec_async(struct vdisk_cmd_params *p)
|
||||
|
||||
WARN_ON_ONCE(sg_cnt != cmd->sg_cnt);
|
||||
|
||||
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 20, 0)
|
||||
iov_iter_kvec(&iter, dir, p->async.kvec, sg_cnt, total);
|
||||
#else
|
||||
iov_iter_kvec(&iter, ITER_KVEC | dir, p->async.kvec, sg_cnt, total);
|
||||
#endif
|
||||
*iocb = (struct kiocb) {
|
||||
.ki_pos = p->loff,
|
||||
.ki_filp = fd,
|
||||
|
||||
Reference in New Issue
Block a user