libceph: abstract out ceph_osd_request enqueue logic
Introduce __enqueue_request() and switch to it. Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com> Reviewed-by: Alex Elder <elder@linaro.org>
This commit is contained in:
Родитель
bfe01a5ba2
Коммит
f671b581f1
|
@ -1346,6 +1346,22 @@ static int __calc_request_pg(struct ceph_osdmap *osdmap,
|
|||
&req->r_target_oid, pg_out);
|
||||
}
|
||||
|
||||
static void __enqueue_request(struct ceph_osd_request *req)
|
||||
{
|
||||
struct ceph_osd_client *osdc = req->r_osdc;
|
||||
|
||||
dout("%s %p tid %llu to osd%d\n", __func__, req, req->r_tid,
|
||||
req->r_osd ? req->r_osd->o_osd : -1);
|
||||
|
||||
if (req->r_osd) {
|
||||
__remove_osd_from_lru(req->r_osd);
|
||||
list_add_tail(&req->r_osd_item, &req->r_osd->o_requests);
|
||||
list_move_tail(&req->r_req_lru_item, &osdc->req_unsent);
|
||||
} else {
|
||||
list_move_tail(&req->r_req_lru_item, &osdc->req_notarget);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Pick an osd (the first 'up' osd in the pg), allocate the osd struct
|
||||
* (as needed), and set the request r_osd appropriately. If there is
|
||||
|
@ -1423,13 +1439,7 @@ static int __map_request(struct ceph_osd_client *osdc,
|
|||
&osdc->osdmap->osd_addr[o]);
|
||||
}
|
||||
|
||||
if (req->r_osd) {
|
||||
__remove_osd_from_lru(req->r_osd);
|
||||
list_add_tail(&req->r_osd_item, &req->r_osd->o_requests);
|
||||
list_move_tail(&req->r_req_lru_item, &osdc->req_unsent);
|
||||
} else {
|
||||
list_move_tail(&req->r_req_lru_item, &osdc->req_notarget);
|
||||
}
|
||||
__enqueue_request(req);
|
||||
err = 1; /* osd or pg changed */
|
||||
|
||||
out:
|
||||
|
|
Загрузка…
Ссылка в новой задаче