Use scoped_with_init_fs() to temporarily override current->fs for the filp_open() call in core_alua_write_tpg_metadata() so the path lookup happens in init's filesystem context. core_alua_write_tpg_metadata() ← core_alua_update_tpg_primary_metadata() ← core_alua_do_transition_tg_pt() ← target_queued_submit_work() ← kworker (target submission workqueue) Signed-off-by: Christian Brauner --- drivers/target/target_core_alua.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/drivers/target/target_core_alua.c b/drivers/target/target_core_alua.c index 10250aca5a81..fde88642a43a 100644 --- a/drivers/target/target_core_alua.c +++ b/drivers/target/target_core_alua.c @@ -18,6 +18,7 @@ #include #include #include +#include #include #include @@ -856,10 +857,13 @@ static int core_alua_write_tpg_metadata( unsigned char *md_buf, u32 md_buf_len) { - struct file *file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); + struct file *file; loff_t pos = 0; int ret; + scoped_with_init_fs() + file = filp_open(path, O_RDWR | O_CREAT | O_TRUNC, 0600); + if (IS_ERR(file)) { pr_err("filp_open(%s) for ALUA metadata failed\n", path); return -ENODEV; -- 2.47.3