lkml.org 
[lkml]   [2015]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 079/183] iscsi,iser-target: Expose supported protection ops according to t10_pi
    Date
    3.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Sagi Grimberg <sagig@mellanox.com>

    commit 23a548ee656c8ba6da8cb2412070edcd62e2ac5d upstream.

    iSER will report supported protection operations based on
    the tpg attribute t10_pi settings and HCA PI offload capabilities.
    If the HCA does not support PI offload or tpg attribute t10_pi is
    not set, we fall to SW PI mode.

    In order to do that, we move iscsit_get_sup_prot_ops after connection
    tpg assignment.

    Signed-off-by: Sagi Grimberg <sagig@mellanox.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/infiniband/ulp/isert/ib_isert.c | 14 +++++++++++---
    drivers/infiniband/ulp/isert/ib_isert.h | 1 +
    drivers/target/iscsi/iscsi_target_login.c | 7 ++++---
    3 files changed, 16 insertions(+), 6 deletions(-)

    --- a/drivers/infiniband/ulp/isert/ib_isert.c
    +++ b/drivers/infiniband/ulp/isert/ib_isert.c
    @@ -64,7 +64,7 @@ struct rdma_cm_id *isert_setup_id(struct
    static inline bool
    isert_prot_cmd(struct isert_conn *conn, struct se_cmd *cmd)
    {
    - return (conn->conn_device->pi_capable &&
    + return (conn->pi_support &&
    cmd->prot_op != TARGET_PROT_NORMAL);
    }

    @@ -2324,8 +2324,16 @@ isert_get_sup_prot_ops(struct iscsi_conn
    struct isert_conn *isert_conn = (struct isert_conn *)conn->context;
    struct isert_device *device = isert_conn->conn_device;

    - if (device->pi_capable)
    - return TARGET_PROT_ALL;
    + if (conn->tpg->tpg_attrib.t10_pi) {
    + if (device->pi_capable) {
    + pr_info("conn %p PI offload enabled\n", isert_conn);
    + isert_conn->pi_support = true;
    + return TARGET_PROT_ALL;
    + }
    + }
    +
    + pr_info("conn %p PI offload disabled\n", isert_conn);
    + isert_conn->pi_support = false;

    return TARGET_PROT_NORMAL;
    }
    --- a/drivers/infiniband/ulp/isert/ib_isert.h
    +++ b/drivers/infiniband/ulp/isert/ib_isert.h
    @@ -128,6 +128,7 @@ struct isert_conn {
    atomic_t post_send_buf_count;
    u32 responder_resources;
    u32 initiator_depth;
    + bool pi_support;
    u32 max_sge;
    char *login_buf;
    char *login_req_buf;
    --- a/drivers/target/iscsi/iscsi_target_login.c
    +++ b/drivers/target/iscsi/iscsi_target_login.c
    @@ -281,7 +281,6 @@ static int iscsi_login_zero_tsih_s1(
    {
    struct iscsi_session *sess = NULL;
    struct iscsi_login_req *pdu = (struct iscsi_login_req *)buf;
    - enum target_prot_op sup_pro_ops;
    int ret;

    sess = kzalloc(sizeof(struct iscsi_session), GFP_KERNEL);
    @@ -343,9 +342,8 @@ static int iscsi_login_zero_tsih_s1(
    kfree(sess);
    return -ENOMEM;
    }
    - sup_pro_ops = conn->conn_transport->iscsit_get_sup_prot_ops(conn);

    - sess->se_sess = transport_init_session(sup_pro_ops);
    + sess->se_sess = transport_init_session(TARGET_PROT_NORMAL);
    if (IS_ERR(sess->se_sess)) {
    iscsit_tx_login_rsp(conn, ISCSI_STATUS_CLS_TARGET_ERR,
    ISCSI_LOGIN_STATUS_NO_RESOURCES);
    @@ -1367,6 +1365,9 @@ static int __iscsi_target_login_thread(s
    }
    login->zero_tsih = zero_tsih;

    + conn->sess->se_sess->sup_prot_ops =
    + conn->conn_transport->iscsit_get_sup_prot_ops(conn);
    +
    tpg = conn->tpg;
    if (!tpg) {
    pr_err("Unable to locate struct iscsi_conn->tpg\n");



    \
     
     \ /
      Last update: 2015-01-25 20:01    [W:3.531 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site