diff options
author | Christian Brauner <brauner@kernel.org> | 2023-11-30 13:49:09 +0100 |
---|---|---|
committer | Christian Brauner <brauner@kernel.org> | 2023-12-12 14:24:13 +0100 |
commit | 372a34e66fb7f95124fadae9c600b231c35696a7 (patch) | |
tree | 5edc7444222b13d09d807f9bad860534c1a1b6e5 | |
parent | 24fa3ae9467f49dd9698fd884f2c6b13cc8ea12d (diff) |
fs: replace f_rcuhead with f_task_work
The naming is actively misleading since we switched to
SLAB_TYPESAFE_BY_RCU. rcu_head is #define callback_head. Use
callback_head directly and rename f_rcuhead to f_task_work.
Add comments in there to explain what it's used for.
Link: https://lore.kernel.org/r/20231130-vfs-files-fixes-v1-3-e73ca6f4ea83@kernel.org
Reviewed-by: Jan Kara <jack@suse.cz>
Reviewed-by: Jens Axboe <axboe@kernel.dk>
Signed-off-by: Christian Brauner <brauner@kernel.org>
-rw-r--r-- | fs/file_table.c | 6 | ||||
-rw-r--r-- | include/linux/fs.h | 4 |
2 files changed, 6 insertions, 4 deletions
diff --git a/fs/file_table.c b/fs/file_table.c index 6deac386486d..3ba764d73fc9 100644 --- a/fs/file_table.c +++ b/fs/file_table.c @@ -407,7 +407,7 @@ static void delayed_fput(struct work_struct *unused) static void ____fput(struct callback_head *work) { - __fput(container_of(work, struct file, f_rcuhead)); + __fput(container_of(work, struct file, f_task_work)); } /* @@ -438,8 +438,8 @@ void fput(struct file *file) return; } if (likely(!in_interrupt() && !(task->flags & PF_KTHREAD))) { - init_task_work(&file->f_rcuhead, ____fput); - if (!task_work_add(task, &file->f_rcuhead, TWA_RESUME)) + init_task_work(&file->f_task_work, ____fput); + if (!task_work_add(task, &file->f_task_work, TWA_RESUME)) return; /* * After this task has run exit_task_work(), diff --git a/include/linux/fs.h b/include/linux/fs.h index 98b7a7a8c42e..354fd02e0e11 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h @@ -991,8 +991,10 @@ static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index) */ struct file { union { + /* fput() uses task work when closing and freeing file (default). */ + struct callback_head f_task_work; + /* fput() must use workqueue (most kernel threads). */ struct llist_node f_llist; - struct rcu_head f_rcuhead; unsigned int f_iocb_flags; }; |