ceph: close out mds, osd connections before stopping auth
The auth module (part of the mon_client) is needed to free any ceph_authorizer(s) used by the mds and osd connections. Flush the msgr workqueue before stopping monc to ensure that the destroy_authorizer auth op is available when those connections are closed out. Signed-off-by: Sage Weil <sage@newdream.net>
This commit is contained in:
Родитель
dd1c905736
Коммит
a922d38fd1
|
@ -120,6 +120,12 @@ void ceph_msgr_exit(void)
|
|||
destroy_workqueue(ceph_msgr_wq);
|
||||
}
|
||||
|
||||
void ceph_msgr_flush()
|
||||
{
|
||||
flush_workqueue(ceph_msgr_wq);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* socket callback functions
|
||||
*/
|
||||
|
|
|
@ -213,6 +213,7 @@ extern int ceph_parse_ips(const char *c, const char *end,
|
|||
|
||||
extern int ceph_msgr_init(void);
|
||||
extern void ceph_msgr_exit(void);
|
||||
extern void ceph_msgr_flush(void);
|
||||
|
||||
extern struct ceph_messenger *ceph_messenger_create(
|
||||
struct ceph_entity_addr *myaddr);
|
||||
|
|
|
@ -669,9 +669,17 @@ static void ceph_destroy_client(struct ceph_client *client)
|
|||
|
||||
/* unmount */
|
||||
ceph_mdsc_stop(&client->mdsc);
|
||||
ceph_monc_stop(&client->monc);
|
||||
ceph_osdc_stop(&client->osdc);
|
||||
|
||||
/*
|
||||
* make sure mds and 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_adjust_min_caps(-client->min_caps);
|
||||
|
||||
ceph_debugfs_client_cleanup(client);
|
||||
|
|
Загрузка…
Ссылка в новой задаче