4bca7e80b6
noop_backing_dev_info is used by superblocks of various pseudofilesystems such as kdevtmpfs. After commit10e1407310
("writeback: Fix inode->i_io_list not be protected by inode->i_lock error") this broke because __mark_inode_dirty() started to access more fields from noop_backing_dev_info and this led to crashes inside locked_inode_to_wb_and_lock_list() called from __mark_inode_dirty(). Fix the problem by initializing noop_backing_dev_info before the filesystems get mounted. Fixes:10e1407310
("writeback: Fix inode->i_io_list not be protected by inode->i_lock error") Reported-and-tested-by: Suzuki K Poulose <suzuki.poulose@arm.com> Reported-and-tested-by: Alexandru Elisei <alexandru.elisei@arm.com> Reported-and-tested-by: Guenter Roeck <linux@roeck-us.net> Reviewed-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Jan Kara <jack@suse.cz>
43 lines
875 B
C
43 lines
875 B
C
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* Copyright (c) 2002-3 Patrick Mochel
|
|
* Copyright (c) 2002-3 Open Source Development Labs
|
|
*/
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/init.h>
|
|
#include <linux/memory.h>
|
|
#include <linux/of.h>
|
|
#include <linux/backing-dev.h>
|
|
|
|
#include "base.h"
|
|
|
|
/**
|
|
* driver_init - initialize driver model.
|
|
*
|
|
* Call the driver model init functions to initialize their
|
|
* subsystems. Called early from init/main.c.
|
|
*/
|
|
void __init driver_init(void)
|
|
{
|
|
/* These are the core pieces */
|
|
bdi_init(&noop_backing_dev_info);
|
|
devtmpfs_init();
|
|
devices_init();
|
|
buses_init();
|
|
classes_init();
|
|
firmware_init();
|
|
hypervisor_init();
|
|
|
|
/* These are also core pieces, but must come after the
|
|
* core core pieces.
|
|
*/
|
|
of_core_init();
|
|
platform_bus_init();
|
|
auxiliary_bus_init();
|
|
cpu_dev_init();
|
|
memory_dev_init();
|
|
node_dev_init();
|
|
container_dev_init();
|
|
}
|