Skip to content

Commit 88ed6ea

Browse files
Sage WeilAlex Elder
authored andcommitted
libceph: use con get/put ops from osd_client
There were a few direct calls to ceph_con_{get,put}() instead of the con ops from osd_client.c. This is a bug since those ops aren't defined to be ceph_con_get/put. This breaks refcounting on the ceph_osd structs that contain the ceph_connections, and could lead to all manner of strangeness. The purpose of the ->get and ->put methods in a ceph connection are to allow the connection to indicate it has a reference to something external to the messaging system, *not* to indicate something external has a reference to the connection. [[email protected]: added that last sentence] Signed-off-by: Sage Weil <[email protected]> Reviewed-by: Alex Elder <[email protected]> (cherry picked from commit 0d47766)
1 parent 680584f commit 88ed6ea

File tree

1 file changed

+4
-4
lines changed

1 file changed

+4
-4
lines changed

net/ceph/osd_client.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ void ceph_osdc_release_request(struct kref *kref)
144144
req->r_pages, req->r_con_filling_msg);
145145
ceph_con_revoke_message(req->r_con_filling_msg,
146146
req->r_reply);
147-
ceph_con_put(req->r_con_filling_msg);
147+
req->r_con_filling_msg->ops->put(req->r_con_filling_msg);
148148
}
149149
if (req->r_reply)
150150
ceph_msg_put(req->r_reply);
@@ -1216,7 +1216,7 @@ static void handle_reply(struct ceph_osd_client *osdc, struct ceph_msg *msg,
12161216
if (req->r_con_filling_msg == con && req->r_reply == msg) {
12171217
dout(" dropping con_filling_msg ref %p\n", con);
12181218
req->r_con_filling_msg = NULL;
1219-
ceph_con_put(con);
1219+
con->ops->put(con);
12201220
}
12211221

12221222
if (!req->r_got_reply) {
@@ -2028,7 +2028,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
20282028
dout("get_reply revoking msg %p from old con %p\n",
20292029
req->r_reply, req->r_con_filling_msg);
20302030
ceph_con_revoke_message(req->r_con_filling_msg, req->r_reply);
2031-
ceph_con_put(req->r_con_filling_msg);
2031+
req->r_con_filling_msg->ops->put(req->r_con_filling_msg);
20322032
req->r_con_filling_msg = NULL;
20332033
}
20342034

@@ -2063,7 +2063,7 @@ static struct ceph_msg *get_reply(struct ceph_connection *con,
20632063
#endif
20642064
}
20652065
*skip = 0;
2066-
req->r_con_filling_msg = ceph_con_get(con);
2066+
req->r_con_filling_msg = con->ops->get(con);
20672067
dout("get_reply tid %lld %p\n", tid, m);
20682068

20692069
out:

0 commit comments

Comments
 (0)