bdi: test bdi_init failure
authorMikulas Patocka <mpatocka@redhat.com>
Mon, 14 Oct 2013 16:14:13 +0000 (12:14 -0400)
committerJens Axboe <axboe@kernel.dk>
Fri, 8 Nov 2013 15:59:44 +0000 (08:59 -0700)
There were two places where return value from bdi_init was not tested.

Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
Acked-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
fs/char_dev.c
include/linux/backing-dev.h
mm/swap.c

index afc2bb6917806e85ee916d8b2c25cb2183890055..b9bc05b9513a285e94e097423aa1c044cbe59392 100644 (file)
@@ -574,7 +574,8 @@ static struct kobject *base_probe(dev_t dev, int *part, void *data)
 void __init chrdev_init(void)
 {
        cdev_map = kobj_map_init(base_probe, &chrdevs_lock);
-       bdi_init(&directly_mappable_cdev_bdi);
+       if (bdi_init(&directly_mappable_cdev_bdi))
+               panic("Failed to init directly mappable cdev bdi");
 }
 
 
index 5f66d519a72640b3c9b874625de9b79808724226..24819001f5c84500ce61dad882e9da2ef331df25 100644 (file)
@@ -109,7 +109,7 @@ struct backing_dev_info {
 #endif
 };
 
-int bdi_init(struct backing_dev_info *bdi);
+int __must_check bdi_init(struct backing_dev_info *bdi);
 void bdi_destroy(struct backing_dev_info *bdi);
 
 __printf(3, 4)
@@ -117,7 +117,7 @@ int bdi_register(struct backing_dev_info *bdi, struct device *parent,
                const char *fmt, ...);
 int bdi_register_dev(struct backing_dev_info *bdi, dev_t dev);
 void bdi_unregister(struct backing_dev_info *bdi);
-int bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
+int __must_check bdi_setup_and_register(struct backing_dev_info *, char *, unsigned int);
 void bdi_start_writeback(struct backing_dev_info *bdi, long nr_pages,
                        enum wb_reason reason);
 void bdi_start_background_writeback(struct backing_dev_info *bdi);
index 759c3caf44bd21bef216c6a011981f150615646b..7a9f80d451f548cd749331bc6143354eab53814d 100644 (file)
--- a/mm/swap.c
+++ b/mm/swap.c
@@ -934,7 +934,8 @@ void __init swap_setup(void)
 #ifdef CONFIG_SWAP
        int i;
 
-       bdi_init(swapper_spaces[0].backing_dev_info);
+       if (bdi_init(swapper_spaces[0].backing_dev_info))
+               panic("Failed to init swap bdi");
        for (i = 0; i < MAX_SWAPFILES; i++) {
                spin_lock_init(&swapper_spaces[i].tree_lock);
                INIT_LIST_HEAD(&swapper_spaces[i].i_mmap_nonlinear);