]> Pileus Git - ~andy/linux/blobdiff - net/ceph/osdmap.c
Merge branch 'core-printk-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[~andy/linux] / net / ceph / osdmap.c
index 71603ac3dff54486cf1cdacaea142a3ecfc5f6fc..e97c3588c3ec00e719f7cb400784c36b5cb2fad6 100644 (file)
@@ -765,7 +765,7 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
        }
 
        map->epoch++;
-       map->modified = map->modified;
+       map->modified = modified;
        if (newcrush) {
                if (map->crush)
                        crush_destroy(map->crush);
@@ -830,15 +830,20 @@ struct ceph_osdmap *osdmap_apply_incremental(void **p, void *end,
                map->osd_addr[osd] = addr;
        }
 
-       /* new_down */
+       /* new_state */
        ceph_decode_32_safe(p, end, len, bad);
        while (len--) {
                u32 osd;
+               u8 xorstate;
                ceph_decode_32_safe(p, end, osd, bad);
+               xorstate = **(u8 **)p;
                (*p)++;  /* clean flag */
-               pr_info("osd%d down\n", osd);
+               if (xorstate == 0)
+                       xorstate = CEPH_OSD_UP;
+               if (xorstate & CEPH_OSD_UP)
+                       pr_info("osd%d down\n", osd);
                if (osd < map->max_osd)
-                       map->osd_state[osd] &= ~CEPH_OSD_UP;
+                       map->osd_state[osd] ^= xorstate;
        }
 
        /* new_weight */