Patch from Anders Gustafsson <andersg@0x63.nu>
We're getting a division-by-zero in the writeback code during early rootfs
population, because writeback has not yet been initialised.
Fix that by performing an explicit initialisation rather than relying on
initcall ordering.
extern int dirty_expire_centisecs;
+void page_writeback_init(void);
void balance_dirty_pages(struct address_space *mapping);
void balance_dirty_pages_ratelimited(struct address_space *mapping);
int pdflush_operation(void (*fn)(unsigned long), unsigned long arg0);
#include <linux/profile.h>
#include <linux/rcupdate.h>
#include <linux/moduleparam.h>
+#include <linux/writeback.h>
#include <asm/io.h>
#include <asm/bugs.h>
vfs_caches_init(num_physpages);
radix_tree_init();
signals_init();
+ /* rootfs populating might need page-writeback */
+ page_writeback_init();
populate_rootfs();
#ifdef CONFIG_PROC_FS
proc_root_init();
* dirty memory thresholds: allowing too much dirty highmem pins an excessive
* number of buffer_heads.
*/
-static int __init page_writeback_init(void)
+void __init page_writeback_init(void)
{
long buffer_pages = nr_free_buffer_pages();
long correction;
add_timer(&wb_timer);
set_ratelimit();
register_cpu_notifier(&ratelimit_nb);
- return 0;
}
-module_init(page_writeback_init);
int do_writepages(struct address_space *mapping, struct writeback_control *wbc)
{