]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
kclient: fix crush cleanup
authorSage Weil <sage@newdream.net>
Wed, 4 Jun 2008 17:50:30 +0000 (10:50 -0700)
committerSage Weil <sage@newdream.net>
Wed, 4 Jun 2008 20:02:46 +0000 (13:02 -0700)
src/kernel/osdmap.c

index 9dcfee397846e0812e5a3d7b06328bc36242969c..4c234e7522517dd81453d8be192541899ef5ed7d 100644 (file)
@@ -227,19 +227,21 @@ static struct crush_map *crush_decode(void **p, void *end)
                __u32 yes;
                struct crush_rule *r;
 
-               dout(30, "crush_decode rule %d off %x %p to %p\n",
-                    i, (int)(*p-start), *p, end);
-
                ceph_decode_32_safe(p, end, yes, bad);
                if (!yes) {
+                       dout(30, "crush_decode NO rule %d off %x %p to %p\n",
+                            i, (int)(*p-start), *p, end);
                        c->rules[i] = 0;
                        continue;
                }
 
+               dout(30, "crush_decode rule %d off %x %p to %p\n",
+                    i, (int)(*p-start), *p, end);
+
                /* len */
                ceph_decode_32_safe(p, end, yes, bad);
 
-               r = c->rules[i] = kmalloc(sizeof(**c->rules) +
+               r = c->rules[i] = kmalloc(sizeof(*r) +
                                          yes*sizeof(struct crush_rule_step),
                                          GFP_NOFS);
                if (r == NULL)
@@ -269,8 +271,10 @@ bad:
 
 void osdmap_destroy(struct ceph_osdmap *map)
 {
+       dout(10, "osdmap_destroy %p\n", map);
+       if (map->crush)
+               crush_destroy(map->crush);
        kfree(map->osd_state);
-       kfree(map->crush);
        kfree(map);
 }