mirror of
https://github.com/torvalds/linux.git
synced 2026-09-14 16:10:02 +02:00
btrfs: use scoped_with_init_fs() for update_dev_time()
update_dev_time() can be called from both kthread and process context. Use scoped_with_init_fs() to temporarily override current->fs for the kern_path() call when running in kthread context so the path lookup happens in init's filesystem context. update_dev_time() ← btrfs_scratch_superblocks() ← btrfs_dev_replace_finishing() ← btrfs_dev_replace_kthread() ← kthread (kthread_run) Also called from ioctl (user process). Link: https://patch.msgid.link/20260601-work-kthread-nullfs-v4-10-77ee053060e0@kernel.org Signed-off-by: Christian Brauner (Amutable) <brauner@kernel.org>
This commit is contained in:
parent
c3f4513c78
commit
f565f3b064
|
|
@ -12,6 +12,7 @@
|
|||
#include <linux/uuid.h>
|
||||
#include <linux/list_sort.h>
|
||||
#include <linux/namei.h>
|
||||
#include <linux/fs_struct.h>
|
||||
#include "misc.h"
|
||||
#include "disk-io.h"
|
||||
#include "extent-tree.h"
|
||||
|
|
@ -2125,8 +2126,16 @@ static int btrfs_add_dev_item(struct btrfs_trans_handle *trans,
|
|||
static void update_dev_time(const char *device_path)
|
||||
{
|
||||
struct path path;
|
||||
int err;
|
||||
|
||||
if (!kern_path(device_path, LOOKUP_FOLLOW, &path)) {
|
||||
if (tsk_is_kthread(current)) {
|
||||
scoped_with_init_fs()
|
||||
err = kern_path(device_path, LOOKUP_FOLLOW, &path);
|
||||
} else {
|
||||
err = kern_path(device_path, LOOKUP_FOLLOW, &path);
|
||||
}
|
||||
|
||||
if (!err) {
|
||||
vfs_utimes(&path, NULL);
|
||||
path_put(&path);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user