3.16.42-rc1 review patch.  If anyone has any objections, please let me know.

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

From: Mark Bloch <ma...@mellanox.com>

commit 8ecc7985b4b15f1f14bce31d8ab45dc426df7da3 upstream.

When we create flow steering rule, we need to save the related QP in the
ib_flow struct. this QP is used in destroy flow.

Move the QP assignment from ib_uverbs_ex_create_flow into ib_create_flow,
this would allow both kernel and userspace consumers to use it.

This bug wasn't seen in the wild because there are no kernel consumers
currently in the kernel.

Fixes: 319a441d1361 ("IB/core: Add receive flow steering support")
Signed-off-by: Mark Bloch <ma...@mellanox.com>
Signed-off-by: Maor Gottlieb <ma...@mellanox.com>
Signed-off-by: Leon Romanovsky <l...@kernel.org>
Signed-off-by: Doug Ledford <dledf...@redhat.com>
Signed-off-by: Ben Hutchings <b...@decadent.org.uk>
---
 drivers/infiniband/core/uverbs_cmd.c | 1 -
 drivers/infiniband/core/verbs.c      | 4 +++-
 2 files changed, 3 insertions(+), 2 deletions(-)

--- a/drivers/infiniband/core/uverbs_cmd.c
+++ b/drivers/infiniband/core/uverbs_cmd.c
@@ -2764,7 +2764,6 @@ int ib_uverbs_ex_create_flow(struct ib_u
                err = PTR_ERR(flow_id);
                goto err_free;
        }
-       flow_id->qp = qp;
        flow_id->uobject = uobj;
        uobj->object = flow_id;
 
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -1420,8 +1420,10 @@ struct ib_flow *ib_create_flow(struct ib
                return ERR_PTR(-ENOSYS);
 
        flow_id = qp->device->create_flow(qp, flow_attr, domain);
-       if (!IS_ERR(flow_id))
+       if (!IS_ERR(flow_id)) {
                atomic_inc(&qp->usecnt);
+               flow_id->qp = qp;
+       }
        return flow_id;
 }
 EXPORT_SYMBOL(ib_create_flow);

Reply via email to