Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3dea7ed authored by Sage Weil's avatar Sage Weil
Browse files

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: default avatarSage Weil <sage@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@inktank.com>
parent 89a86be0
Loading
Loading
Loading
Loading
+0 −7
Original line number Original line Diff line number Diff line
@@ -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);
+8 −0
Original line number Original line Diff line number Diff line
@@ -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);