libceph: abstract out ceph_osd_request enqueue logic
authorIlya Dryomov <ilya.dryomov@inktank.com>
Tue, 2 Sep 2014 09:40:33 +0000 (13:40 +0400)
committerIlya Dryomov <idryomov@redhat.com>
Tue, 14 Oct 2014 17:03:18 +0000 (21:03 +0400)
Introduce __enqueue_request() and switch to it.

Signed-off-by: Ilya Dryomov <ilya.dryomov@inktank.com>
Reviewed-by: Alex Elder <elder@linaro.org>
net/ceph/osd_client.c

index 30f6faf..648a215 100644 (file)
@@ -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: