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>
This commit is contained in:
parent
89a86be0ce
commit
f3dea7edd3
|
@ -498,13 +498,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);
|
||||||
|
|
|
@ -838,6 +838,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);
|
||||||
|
|
Loading…
Reference in New Issue