Btrfs: Return value checking in module init
[linux-2.6-block.git] / fs / btrfs / extent_map.c
index b3ff63c4bf2af19b584050e3565a592f8bda2ba2..f91f28efdb59c59bd569139ae712fbef83bc0c15 100644 (file)
@@ -42,18 +42,30 @@ struct extent_page_data {
        struct extent_map_tree *tree;
        get_extent_t *get_extent;
 };
-
-void __init extent_map_init(void)
+int __init extent_map_init(void)
 {
        extent_map_cache = btrfs_cache_create("extent_map",
                                            sizeof(struct extent_map), 0,
                                            NULL);
+       if (!extent_map_cache)
+               return -ENOMEM;
        extent_state_cache = btrfs_cache_create("extent_state",
                                            sizeof(struct extent_state), 0,
                                            NULL);
+       if (!extent_state_cache)
+               goto free_map_cache;
        extent_buffer_cache = btrfs_cache_create("extent_buffers",
                                            sizeof(struct extent_buffer), 0,
                                            NULL);
+       if (!extent_buffer_cache)
+               goto free_state_cache;
+       return 0;
+
+free_state_cache:
+       kmem_cache_destroy(extent_state_cache);
+free_map_cache:
+       kmem_cache_destroy(extent_map_cache);
+       return -ENOMEM;
 }
 
 void __exit extent_map_exit(void)