mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 00:50:54 +07:00
RDS/IB: wait for IB dev freeing work to finish during rmmod
The RDS IB client removal callback can queue work to drop the final reference to an IB device. We have to make sure that this function has returned before we complete rmmod or the work threads can try to execute freed code. Signed-off-by: Zach Brown <zach.brown@oracle.com>
This commit is contained in:
parent
b6fb0df12d
commit
24fa163a4b
11
net/rds/ib.c
11
net/rds/ib.c
@ -336,11 +336,18 @@ static int rds_ib_laddr_check(__be32 addr)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void rds_ib_unregister_client(void)
|
||||||
|
{
|
||||||
|
ib_unregister_client(&rds_ib_client);
|
||||||
|
/* wait for rds_ib_dev_free() to complete */
|
||||||
|
flush_workqueue(rds_wq);
|
||||||
|
}
|
||||||
|
|
||||||
void rds_ib_exit(void)
|
void rds_ib_exit(void)
|
||||||
{
|
{
|
||||||
rds_info_deregister_func(RDS_INFO_IB_CONNECTIONS, rds_ib_ic_info);
|
rds_info_deregister_func(RDS_INFO_IB_CONNECTIONS, rds_ib_ic_info);
|
||||||
rds_ib_destroy_nodev_conns();
|
rds_ib_destroy_nodev_conns();
|
||||||
ib_unregister_client(&rds_ib_client);
|
rds_ib_unregister_client();
|
||||||
rds_ib_sysctl_exit();
|
rds_ib_sysctl_exit();
|
||||||
rds_ib_recv_exit();
|
rds_ib_recv_exit();
|
||||||
rds_trans_unregister(&rds_ib_transport);
|
rds_trans_unregister(&rds_ib_transport);
|
||||||
@ -404,7 +411,7 @@ int __init rds_ib_init(void)
|
|||||||
out_sysctl:
|
out_sysctl:
|
||||||
rds_ib_sysctl_exit();
|
rds_ib_sysctl_exit();
|
||||||
out_ibreg:
|
out_ibreg:
|
||||||
ib_unregister_client(&rds_ib_client);
|
rds_ib_unregister_client();
|
||||||
out:
|
out:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user