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

Commit 153a008b authored by Sage Weil's avatar Sage Weil
Browse files

ceph: reset osd connections after fault



A single osd connection fault (e.g. tcp disconnect) wasn't
reopening the connection, which causes all current and future
requests for that osd to hang.

Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 6c5d1a49
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -369,7 +369,6 @@ static void osd_reset(struct ceph_connection *con)
		return;
	dout("osd_reset osd%d\n", osd->o_osd);
	osdc = osd->o_osdc;
	osd->o_incarnation++;
	down_read(&osdc->map_sem);
	kick_requests(osdc, osd);
	up_read(&osdc->map_sem);
@@ -921,7 +920,9 @@ static void kick_requests(struct ceph_osd_client *osdc,

	dout("kick_requests osd%d\n", kickosd ? kickosd->o_osd : -1);
	mutex_lock(&osdc->request_mutex);
	if (!kickosd) {
	if (kickosd) {
		__reset_osd(osdc, kickosd);
	} else {
		for (p = rb_first(&osdc->osds); p; p = n) {
			struct ceph_osd *osd =
				rb_entry(p, struct ceph_osd, o_node);