]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/commitdiff
libceph: fold [l]req->last_force_resend into ceph_osd_request_target
authorIlya Dryomov <idryomov@gmail.com>
Mon, 5 Jun 2017 12:45:00 +0000 (14:45 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 7 Jul 2017 15:25:15 +0000 (17:25 +0200)
Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
include/linux/ceph/osd_client.h
net/ceph/osd_client.c

index 85650b415e73ff38487a6b2e6be7253466411a14..ef630ebd1169cc09537df735843e084aa0e9f71a 100644 (file)
@@ -148,6 +148,8 @@ struct ceph_osd_request_target {
        unsigned int flags;                /* CEPH_OSD_FLAG_* */
        bool paused;
 
+       u32 last_force_resend;
+
        int osd;
 };
 
@@ -193,7 +195,6 @@ struct ceph_osd_request {
        unsigned long r_stamp;                /* jiffies, send or check time */
        unsigned long r_start_stamp;          /* jiffies */
        int r_attempts;
-       u32 r_last_force_resend;
        u32 r_map_dne_bound;
 
        struct ceph_osd_req_op r_ops[];
@@ -221,7 +222,6 @@ struct ceph_osd_linger_request {
        struct list_head pending_lworks;
 
        struct ceph_osd_request_target t;
-       u32 last_force_resend;
        u32 map_dne_bound;
 
        struct timespec mtime;
index 924f07c36ddbc2864c7428723766d0a64729c7c4..aca6319b99b6ec918dd35cae8a1bcb50c2c84590 100644 (file)
@@ -384,6 +384,8 @@ static void target_copy(struct ceph_osd_request_target *dest,
        dest->flags = src->flags;
        dest->paused = src->paused;
 
+       dest->last_force_resend = src->last_force_resend;
+
        dest->osd = src->osd;
 }
 
@@ -1311,7 +1313,6 @@ enum calc_target_result {
 
 static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
                                           struct ceph_osd_request_target *t,
-                                          u32 *last_force_resend,
                                           bool any_change)
 {
        struct ceph_pg_pool_info *pi;
@@ -1332,11 +1333,10 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
        }
 
        if (osdc->osdmap->epoch == pi->last_force_request_resend) {
-               if (last_force_resend &&
-                   *last_force_resend < pi->last_force_request_resend) {
-                       *last_force_resend = pi->last_force_request_resend;
+               if (t->last_force_resend < pi->last_force_request_resend) {
+                       t->last_force_resend = pi->last_force_request_resend;
                        force_resend = true;
-               } else if (!last_force_resend) {
+               } else if (t->last_force_resend == 0) {
                        force_resend = true;
                }
        }
@@ -1645,7 +1645,7 @@ static void __submit_request(struct ceph_osd_request *req, bool wrlocked)
        dout("%s req %p wrlocked %d\n", __func__, req, wrlocked);
 
 again:
-       ct_res = calc_target(osdc, &req->r_t, &req->r_last_force_resend, false);
+       ct_res = calc_target(osdc, &req->r_t, false);
        if (ct_res == CALC_TARGET_POOL_DNE && !wrlocked)
                goto promote;
 
@@ -2441,7 +2441,7 @@ static void linger_submit(struct ceph_osd_linger_request *lreq)
        struct ceph_osd_client *osdc = lreq->osdc;
        struct ceph_osd *osd;
 
-       calc_target(osdc, &lreq->t, &lreq->last_force_resend, false);
+       calc_target(osdc, &lreq->t, false);
        osd = lookup_create_osd(osdc, lreq->t.osd, true);
        link_linger(osd, lreq);
 
@@ -3059,7 +3059,7 @@ recalc_linger_target(struct ceph_osd_linger_request *lreq)
        struct ceph_osd_client *osdc = lreq->osdc;
        enum calc_target_result ct_res;
 
-       ct_res = calc_target(osdc, &lreq->t, &lreq->last_force_resend, true);
+       ct_res = calc_target(osdc, &lreq->t, true);
        if (ct_res == CALC_TARGET_NEED_RESEND) {
                struct ceph_osd *osd;
 
@@ -3130,8 +3130,7 @@ static void scan_requests(struct ceph_osd *osd,
                n = rb_next(n); /* unlink_request(), check_pool_dne() */
 
                dout("%s req %p tid %llu\n", __func__, req, req->r_tid);
-               ct_res = calc_target(osdc, &req->r_t,
-                                    &req->r_last_force_resend, false);
+               ct_res = calc_target(osdc, &req->r_t, false);
                switch (ct_res) {
                case CALC_TARGET_NO_ACTION:
                        force_resend_writes = cleared_full ||
@@ -3240,7 +3239,7 @@ static void kick_requests(struct ceph_osd_client *osdc,
                erase_request(need_resend, req); /* before link_request() */
 
                WARN_ON(req->r_osd);
-               calc_target(osdc, &req->r_t, NULL, false);
+               calc_target(osdc, &req->r_t, false);
                osd = lookup_create_osd(osdc, req->r_t.osd, true);
                link_request(osd, req);
                if (!req->r_linger) {