mirror of
https://github.com/torvalds/linux.git
synced 2026-05-26 08:02:27 +02:00
RDMA/bnxt_re: Fix lifetimes in bnxt_re_task
A work queue cannot just rely on the ib_device not being freed, it must
hold a kref on the memory so that the BNXT_RE_FLAG_IBDEV_REGISTERED check
works.
Fixes: 1ac5a40479 ("RDMA/bnxt_re: Add bnxt_re RoCE driver")
Link: https://lore.kernel.org/r/1584117207-2664-3-git-send-email-selvin.xavier@broadcom.com
Signed-off-by: Selvin Xavier <selvin.xavier@broadcom.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
This commit is contained in:
parent
3cae58047c
commit
8a6c617047
|
|
@ -1670,6 +1670,7 @@ static void bnxt_re_task(struct work_struct *work)
|
|||
smp_mb__before_atomic();
|
||||
atomic_dec(&rdev->sched_count);
|
||||
exit:
|
||||
put_device(&rdev->ibdev.dev);
|
||||
kfree(re_work);
|
||||
}
|
||||
|
||||
|
|
@ -1735,6 +1736,7 @@ static int bnxt_re_netdev_event(struct notifier_block *notifier,
|
|||
/* Allocate for the deferred task */
|
||||
re_work = kzalloc(sizeof(*re_work), GFP_ATOMIC);
|
||||
if (re_work) {
|
||||
get_device(&rdev->ibdev.dev);
|
||||
re_work->rdev = rdev;
|
||||
re_work->event = event;
|
||||
re_work->vlan_dev = (real_dev == netdev ?
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user