IB/core: Save QP in ib_flow structure
authorMark Bloch <markb@mellanox.com>
Thu, 27 Oct 2016 13:36:30 +0000 (16:36 +0300)
committerDoug Ledford <dledford@redhat.com>
Thu, 17 Nov 2016 01:04:48 +0000 (20:04 -0500)
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 <markb@mellanox.com>
Signed-off-by: Maor Gottlieb <maorg@mellanox.com>
Signed-off-by: Leon Romanovsky <leon@kernel.org>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/core/uverbs_cmd.c
drivers/infiniband/core/verbs.c

index cb3f515a2285df3de9fea45cd07167a20da41483..2690c9263ee460d9a0daf9aa0c07f6bcf5975525 100644 (file)
@@ -3745,7 +3745,6 @@ int ib_uverbs_ex_create_flow(struct ib_uverbs_file *file,
                err = PTR_ERR(flow_id);
                goto err_free;
        }
-       flow_id->qp = qp;
        flow_id->uobject = uobj;
        uobj->object = flow_id;
 
index 83687646da6823457a888001ae01476f42f4ae70..b7f9f3d959752f4d406c0932d487015f2f6e825e 100644 (file)
@@ -1734,8 +1734,10 @@ struct ib_flow *ib_create_flow(struct ib_qp *qp,
                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);