ib_srpt, iscsi-scst: Port to Linux kernel v5.8

git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@9060 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
Bart Van Assche
2020-07-25 14:09:23 +00:00
parent 64276e3dfb
commit 8a22ef6289
7 changed files with 75 additions and 10 deletions

View File

@@ -290,6 +290,12 @@ conftest/rdma_create_id_net/result-$(KVER).txt: \
echo "$(call run_conftest_bool,rdma_create_id_net, \
RDMA_CREATE_ID_TAKES_NET_ARG)" >"$@"
conftest/rdma_reject/result-$(KVER).txt: \
conftest/rdma_reject/rdma_reject.c \
conftest/rdma_reject/Makefile
echo "$(call run_conftest_bool,rdma_reject, \
RDMA_REJECT_HAS_FOUR_ARGS)" >"$@"
conftest/register_mad_agent/result-$(KVER).txt: \
conftest/register_mad_agent/register_mad_agent.c \
conftest/register_mad_agent/Makefile

View File

@@ -41,6 +41,7 @@
#ifndef INSIDE_KERNEL_TREE
#include <linux/version.h>
#endif
#include <rdma/ib_cm.h>
#include "isert_dbg.h"
#include "iser.h"
@@ -1571,7 +1572,11 @@ fail_conn_create:
isert_deref_device(isert_dev);
mutex_unlock(&dev_list_mutex);
fail_dev_create:
rdma_reject(cm_id, NULL, 0);
rdma_reject(cm_id, NULL, 0
#if RDMA_REJECT_HAS_FOUR_ARGS
, IB_CM_REJ_CONSUMER_DEFINED
#endif
);
module_put(THIS_MODULE);
goto out;
}

View File

@@ -90,6 +90,9 @@ function evaluate(stmnt, pattern, arg, op, result) {
"(LINUX_VERSION_CODE < KERNEL_VERSION(4, 3, 0) \\&\\& " \
"RHEL_RELEASE_CODE -0 < 7 * 256 + 5)", stmnt)
gsub("IB_CLIENT_ADD_ONE_RETURNS_INT",
"(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0))", stmnt)
gsub("defined\\(IB_CLIENT_REMOVE_TAKES_TWO_ARGS\\)",
"(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 3, 0) || " \
"RHEL_RELEASE_CODE -0 >= 7 * 256 + 5)", stmnt)
@@ -156,6 +159,9 @@ function evaluate(stmnt, pattern, arg, op, result) {
"(LINUX_VERSION_CODE < KERNEL_VERSION(5, 1, 0) \\&\\& " \
"RHEL_RELEASE_CODE -0 < 8 * 256 + 2)", stmnt)
gsub("RDMA_REJECT_HAS_FOUR_ARGS",
"(LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0))", stmnt)
gsub("defined(ENABLE_NPIV)", 0, stmnt)
gsub("defined(FC_VPORT_CREATE_DEFINED)", 0, stmnt)
@@ -411,6 +417,7 @@ function handle_if(evaluated)
|| $0 ~ "HAVE_RDMA_QUERY_GID" \
|| $0 ~ "HAVE_SRP_DATA_DESC_IMM" \
|| $0 ~ "HAVE_STRUCT_SRP_LOGIN_REQ_RDMA" \
|| $0 ~ "IB_CLIENT_ADD_ONE_RETURNS_INT" \
|| $0 ~ "IB_CLIENT_REMOVE_TAKES_TWO_ARGS" \
|| $0 ~ "IB_CM_LISTEN_TAKES_FOURTH_ARG" \
|| $0 ~ "IB_CREATE_CQ_HAS_INIT_ATTR" \
@@ -421,6 +428,7 @@ function handle_if(evaluated)
|| $0 ~ "MOFED_MAJOR" \
|| $0 ~ "MOFED_MINOR" \
|| $0 ~ "RDMA_CREATE_ID_TAKES_NET_ARG" \
|| $0 ~ "RDMA_REJECT_HAS_FOUR_ARGS" \
|| $0 ~ "REGISTER_MAD_AGENT_HAS_FLAGS_ARG" \
|| $0 ~ "RHEL_MAJOR" \
|| $0 ~ "RHEL_MINOR" \

View File

@@ -1262,10 +1262,17 @@ static int dev_user_map_buf(struct scst_user_cmd *ucmd, unsigned long ubuff,
ucmd->num_data_pages, (int)(ubuff & ~PAGE_MASK),
(ucmd->cmd != NULL) ? ucmd->cmd->bufflen : -1);
#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
down_read(&tsk->mm->mmap_sem);
rc = get_user_pages(ubuff, ucmd->num_data_pages, FOLL_WRITE,
ucmd->data_pages, NULL);
up_read(&tsk->mm->mmap_sem);
#else
mmap_read_lock(tsk->mm);
rc = get_user_pages(ubuff, ucmd->num_data_pages, FOLL_WRITE,
ucmd->data_pages, NULL);
mmap_read_unlock(tsk->mm);
#endif
/* get_user_pages() flushes dcache */

View File

@@ -485,8 +485,10 @@ static int vdisk_blockio_flush(struct block_device *bdev, gfp_t gfp_mask,
res = blkdev_issue_flush(bdev, NULL);
#elif LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 37)
res = blkdev_issue_flush(bdev, gfp_mask, NULL, BLKDEV_IFL_WAIT);
#else
#elif LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
res = blkdev_issue_flush(bdev, gfp_mask, NULL);
#else
res = blkdev_issue_flush(bdev, gfp_mask);
#endif
}

View File

@@ -202,6 +202,12 @@ conftest/gid_change/result-$(KVER).txt: \
conftest/gid_change/Makefile
echo "$(call run_conftest,gid_change,-DHAVE_IB_EVENT_GID_CHANGE)" >"$@"
conftest/ib_client_add_one/result-$(KVER).txt: \
conftest/ib_client_add_one/add_one.c \
conftest/ib_client_add_one/Makefile
echo "$(call run_conftest_bool,ib_client_add_one, \
IB_CLIENT_ADD_ONE_RETURNS_INT)" >"$@"
conftest/ib_client_remove/result-$(KVER).txt: \
conftest/ib_client_remove/ib_client_remove.c \
conftest/ib_client_remove/Makefile
@@ -275,6 +281,12 @@ conftest/rdma_query_gid/result-$(KVER).txt: \
conftest/rdma_query_gid/Makefile
echo "$(call run_conftest_bool,rdma_query_gid,HAVE_RDMA_QUERY_GID)" >"$@"
conftest/rdma_reject/result-$(KVER).txt: \
conftest/rdma_reject/rdma_reject.c \
conftest/rdma_reject/Makefile
echo "$(call run_conftest_bool,rdma_reject, \
RDMA_REJECT_HAS_FOUR_ARGS)" >"$@"
conftest/register_mad_agent/result-$(KVER).txt: \
conftest/register_mad_agent/register_mad_agent.c \
conftest/register_mad_agent/Makefile

View File

@@ -2946,7 +2946,11 @@ reject:
SRP_BUF_FORMAT_INDIRECT);
if (rdma_cm_id)
rdma_reject(rdma_cm_id, rej, sizeof(*rej));
rdma_reject(rdma_cm_id, rej, sizeof(*rej)
#if RDMA_REJECT_HAS_FOUR_ARGS
, IB_CM_REJ_CONSUMER_DEFINED
#endif
);
else
ib_send_cm_rej(ib_cm_id, IB_CM_REJ_CONSUMER_DEFINED, NULL, 0,
rej, sizeof(*rej));
@@ -4369,7 +4373,7 @@ static void srpt_init_sport(struct srpt_port *sport, struct ib_device *ib_dev)
/*
* srpt_add_one() - Infiniband device addition callback function.
*/
static void srpt_add_one(struct ib_device *device)
static int srpt_add_one(struct ib_device *device)
{
struct ib_cm_id *cm_id;
struct srpt_device *sdev;
@@ -4380,8 +4384,10 @@ static void srpt_add_one(struct ib_device *device)
pr_debug("device = %p\n", device);
sdev = kzalloc(sizeof(*sdev), GFP_KERNEL);
if (!sdev)
if (!sdev) {
ret = -ENOMEM;
goto err;
}
sdev->device = device;
@@ -4397,13 +4403,15 @@ static void srpt_add_one(struct ib_device *device)
sdev->pd = ib_alloc_pd(device, 0);
if (IS_ERR(sdev->pd)) {
pr_err("ib_alloc_pd() failed: %ld\n", PTR_ERR(sdev->pd));
ret = PTR_ERR(sdev->pd);
pr_err("ib_alloc_pd() failed: %d\n", ret);
goto free_dev;
}
#ifndef IB_PD_HAS_LOCAL_DMA_LKEY
sdev->mr = ib_get_dma_mr(sdev->pd, IB_ACCESS_LOCAL_WRITE);
if (IS_ERR(sdev->mr)) {
ret = PTR_ERR(sdev->mr);
pr_err("ib_get_dma_mr() failed: %ld\n", PTR_ERR(sdev->mr));
goto err_pd;
}
@@ -4441,8 +4449,10 @@ static void srpt_add_one(struct ib_device *device)
sdev->req_buf_cache = kmem_cache_create("srpt-srq-req-buf",
srp_max_req_size, 0, 0, NULL);
if (!sdev->req_buf_cache)
if (!sdev->req_buf_cache) {
ret = -ENOMEM;
goto free_srq;
}
sdev->ioctx_ring = (struct srpt_recv_ioctx **)
srpt_alloc_ioctx_ring(sdev, sdev->srq_size,
@@ -4450,6 +4460,7 @@ static void srpt_add_one(struct ib_device *device)
sdev->req_buf_cache,
0, DMA_FROM_DEVICE);
if (!sdev->ioctx_ring) {
ret = -ENOMEM;
pr_err("srpt_alloc_ioctx_ring() failed\n");
goto free_cache;
}
@@ -4478,7 +4489,8 @@ static void srpt_add_one(struct ib_device *device)
#else
INIT_WORK(&sport->work, srpt_refresh_port_work);
#endif
if (srpt_refresh_port(sport)) {
ret = srpt_refresh_port(sport);
if (ret) {
pr_err("MAD registration failed for %s-%d.\n",
dev_name(&sdev->device->dev), i);
goto err_ring;
@@ -4491,7 +4503,8 @@ static void srpt_add_one(struct ib_device *device)
cm_id = ib_create_cm_id(device, srpt_cm_handler, sdev);
if (IS_ERR(cm_id)) {
pr_err("ib_create_cm_id() failed: %ld\n", PTR_ERR(cm_id));
ret = PTR_ERR(cm_id);
pr_err("ib_create_cm_id() failed: %d\n", ret);
goto err_ring;
}
sdev->cm_id = cm_id;
@@ -4521,10 +4534,11 @@ static void srpt_add_one(struct ib_device *device)
srpt_event_handler);
ib_register_event_handler(&sdev->event_handler);
atomic_inc(&srpt_device_count);
ret = 0;
out:
ib_set_client_data(device, &srpt_client, sdev);
return;
return ret;
err_cm:
ib_destroy_cm_id(sdev->cm_id);
@@ -4552,6 +4566,13 @@ err:
goto out;
}
#if !IB_CLIENT_ADD_ONE_RETURNS_INT
static void srpt_add_one_void(struct ib_device *device)
{
srpt_add_one(device);
}
#endif
/*
* srpt_remove_one() - InfiniBand device removal callback function.
*/
@@ -4624,7 +4645,11 @@ static void srpt_remove_one(struct ib_device *device, void *client_data)
static struct ib_client srpt_client = {
.name = DRV_NAME,
#if IB_CLIENT_ADD_ONE_RETURNS_INT
.add = srpt_add_one,
#else
.add = srpt_add_one_void,
#endif
.remove = srpt_remove_one
};