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

Commit f671b581 authored by Ilya Dryomov's avatar Ilya Dryomov Committed by Ilya Dryomov
Browse files

libceph: abstract out ceph_osd_request enqueue logic



Introduce __enqueue_request() and switch to it.

Signed-off-by: default avatarIlya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: default avatarAlex Elder <elder@linaro.org>
parent bfe01a5b
Loading
Loading
Loading
Loading
+17 −7
Original line number Diff line number Diff line
@@ -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: