libceph: flush msgr queue during mon_client shutdown
We need to flush the msgr workqueue during mon_client shutdown to
ensure that any work affecting our embedded ceph_connection is
finished so that we can be safely destroyed.
Previously, we were flushing the work queue after osd_client
shutdown and before mon_client shutdown to ensure that any osd
connection refs to authorizers are flushed. Remove the redundant
flush, and document in the comment that the mon_client flush is
needed to cover that case as well.
Signed-off-by: Sage Weil <sage@inktank.com>
Reviewed-by: Alex Elder <elder@inktank.com>
(cherry picked from commit f3dea7edd3
)
This commit is contained in:
@@ -504,13 +504,6 @@ void ceph_destroy_client(struct ceph_client *client)
|
|||||||
/* unmount */
|
/* unmount */
|
||||||
ceph_osdc_stop(&client->osdc);
|
ceph_osdc_stop(&client->osdc);
|
||||||
|
|
||||||
/*
|
|
||||||
* make sure osd connections close out before destroying the
|
|
||||||
* auth module, which is needed to free those connections'
|
|
||||||
* ceph_authorizers.
|
|
||||||
*/
|
|
||||||
ceph_msgr_flush();
|
|
||||||
|
|
||||||
ceph_monc_stop(&client->monc);
|
ceph_monc_stop(&client->monc);
|
||||||
|
|
||||||
ceph_debugfs_client_cleanup(client);
|
ceph_debugfs_client_cleanup(client);
|
||||||
|
@@ -847,6 +847,14 @@ void ceph_monc_stop(struct ceph_mon_client *monc)
|
|||||||
|
|
||||||
mutex_unlock(&monc->mutex);
|
mutex_unlock(&monc->mutex);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* flush msgr queue before we destroy ourselves to ensure that:
|
||||||
|
* - any work that references our embedded con is finished.
|
||||||
|
* - any osd_client or other work that may reference an authorizer
|
||||||
|
* finishes before we shut down the auth subsystem.
|
||||||
|
*/
|
||||||
|
ceph_msgr_flush();
|
||||||
|
|
||||||
ceph_auth_destroy(monc->auth);
|
ceph_auth_destroy(monc->auth);
|
||||||
|
|
||||||
ceph_msg_put(monc->m_auth);
|
ceph_msg_put(monc->m_auth);
|
||||||
|
Reference in New Issue
Block a user