aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mtd
diff options
context:
space:
mode:
authorJens Axboe <jens.axboe@oracle.com>2010-04-27 03:49:47 -0400
committerJens Axboe <jens.axboe@oracle.com>2010-04-27 03:51:30 -0400
commit0661b1ac5d48eb47c8a5948c0554fea25e0895ab (patch)
tree18040417cbfb33b82486576dbc5783dc50e60d4c /drivers/mtd
parenta33eb6b91034c95b9b08576f68be170f995b2c7d (diff)
mtd: ensure that bdi entries are properly initialized and registered
They will be holding dirty inodes and be responsible for flushing them out, so they need to be setup properly. Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
Diffstat (limited to 'drivers/mtd')
-rw-r--r--drivers/mtd/mtdcore.c46
1 files changed, 42 insertions, 4 deletions
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index 541d556aec7e..b177e750efc3 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -659,20 +659,55 @@ done:
659/*====================================================================*/ 659/*====================================================================*/
660/* Init code */ 660/* Init code */
661 661
662static int __init mtd_bdi_init(struct backing_dev_info *bdi, const char *name)
663{
664 int ret;
665
666 ret = bdi_init(bdi);
667 if (!ret)
668 ret = bdi_register(bdi, NULL, name);
669
670 if (ret)
671 bdi_destroy(bdi);
672
673 return ret;
674}
675
662static int __init init_mtd(void) 676static int __init init_mtd(void)
663{ 677{
664 int ret; 678 int ret;
679
665 ret = class_register(&mtd_class); 680 ret = class_register(&mtd_class);
681 if (ret)
682 goto err_reg;
683
684 ret = mtd_bdi_init(&mtd_bdi_unmappable, "mtd-unmap");
685 if (ret)
686 goto err_bdi1;
687
688 ret = mtd_bdi_init(&mtd_bdi_ro_mappable, "mtd-romap");
689 if (ret)
690 goto err_bdi2;
691
692 ret = mtd_bdi_init(&mtd_bdi_rw_mappable, "mtd-rwmap");
693 if (ret)
694 goto err_bdi3;
666 695
667 if (ret) {
668 pr_err("Error registering mtd class: %d\n", ret);
669 return ret;
670 }
671#ifdef CONFIG_PROC_FS 696#ifdef CONFIG_PROC_FS
672 if ((proc_mtd = create_proc_entry( "mtd", 0, NULL ))) 697 if ((proc_mtd = create_proc_entry( "mtd", 0, NULL )))
673 proc_mtd->read_proc = mtd_read_proc; 698 proc_mtd->read_proc = mtd_read_proc;
674#endif /* CONFIG_PROC_FS */ 699#endif /* CONFIG_PROC_FS */
675 return 0; 700 return 0;
701
702err_bdi3:
703 bdi_destroy(&mtd_bdi_ro_mappable);
704err_bdi2:
705 bdi_destroy(&mtd_bdi_unmappable);
706err_bdi1:
707 class_unregister(&mtd_class);
708err_reg:
709 pr_err("Error registering mtd class or bdi: %d\n", ret);
710 return ret;
676} 711}
677 712
678static void __exit cleanup_mtd(void) 713static void __exit cleanup_mtd(void)
@@ -682,6 +717,9 @@ static void __exit cleanup_mtd(void)
682 remove_proc_entry( "mtd", NULL); 717 remove_proc_entry( "mtd", NULL);
683#endif /* CONFIG_PROC_FS */ 718#endif /* CONFIG_PROC_FS */
684 class_unregister(&mtd_class); 719 class_unregister(&mtd_class);
720 bdi_destroy(&mtd_bdi_unmappable);
721 bdi_destroy(&mtd_bdi_ro_mappable);
722 bdi_destroy(&mtd_bdi_rw_mappable);
685} 723}
686 724
687module_init(init_mtd); 725module_init(init_mtd);