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:
Родитель
b132cf4c73
Коммит
642c0dbde3
|
@ -504,13 +504,6 @@ void ceph_destroy_client(struct ceph_client *client)
|
|||
/* unmount */
|
||||
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_debugfs_client_cleanup(client);
|
||||
|
|
|
@ -847,6 +847,14 @@ void ceph_monc_stop(struct ceph_mon_client *monc)
|
|||
|
||||
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_msg_put(monc->m_auth);
|
||||
|
|
Загрузка…
Ссылка в новой задаче