OSDN Git Service

libceph: always populate t->target_{oid,oloc} in calc_target()
authorIlya Dryomov <idryomov@gmail.com>
Thu, 15 Jun 2017 14:30:55 +0000 (16:30 +0200)
committerIlya Dryomov <idryomov@gmail.com>
Fri, 7 Jul 2017 15:25:16 +0000 (17:25 +0200)
need_check_tiering logic doesn't make a whole lot of sense.  Drop it
and apply tiering unconditionally on every calc_target() call instead.

Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
net/ceph/osd_client.c

index 173ab9c..c050e28 100644 (file)
@@ -1330,7 +1330,6 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
        bool unpaused = false;
        bool legacy_change;
        bool split = false;
-       bool need_check_tiering = false;
        bool sort_bitwise = ceph_osdmap_flag(osdc, CEPH_OSDMAP_SORTBITWISE);
        enum calc_target_result ct_res;
        int ret;
@@ -1351,17 +1350,11 @@ static enum calc_target_result calc_target(struct ceph_osd_client *osdc,
                        force_resend = true;
                }
        }
-       if (ceph_oid_empty(&t->target_oid) || force_resend) {
-               ceph_oid_copy(&t->target_oid, &t->base_oid);
-               need_check_tiering = true;
-       }
-       if (ceph_oloc_empty(&t->target_oloc) || force_resend) {
-               ceph_oloc_copy(&t->target_oloc, &t->base_oloc);
-               need_check_tiering = true;
-       }
 
-       if (need_check_tiering &&
-           (t->flags & CEPH_OSD_FLAG_IGNORE_OVERLAY) == 0) {
+       /* apply tiering */
+       ceph_oid_copy(&t->target_oid, &t->base_oid);
+       ceph_oloc_copy(&t->target_oloc, &t->base_oloc);
+       if ((t->flags & CEPH_OSD_FLAG_IGNORE_OVERLAY) == 0) {
                if (t->flags & CEPH_OSD_FLAG_READ && pi->read_tier >= 0)
                        t->target_oloc.pool = pi->read_tier;
                if (t->flags & CEPH_OSD_FLAG_WRITE && pi->write_tier >= 0)