summaryrefslogtreecommitdiffstats
path: root/io_uring/filetable.h
diff options
context:
space:
mode:
authorJens Axboe <axboe@kernel.dk>2022-05-25 18:40:19 +0200
committerJens Axboe <axboe@kernel.dk>2022-07-25 02:39:12 +0200
commita4ad4f748ea96202451f88b6385d7283d0f2e513 (patch)
treefc51a4da80a7e654e34699aa86f1603995995432 /io_uring/filetable.h
parentio_uring: use io_is_uring_fops() consistently (diff)
downloadlinux-a4ad4f748ea96202451f88b6385d7283d0f2e513.tar.xz
linux-a4ad4f748ea96202451f88b6385d7283d0f2e513.zip
io_uring: move fdinfo helpers to its own file
This also means moving a bit more of the fixed file handling to the filetable side, which makes sense separately too. Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'io_uring/filetable.h')
-rw-r--r--io_uring/filetable.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/io_uring/filetable.h b/io_uring/filetable.h
index fe1ec581958d..6e1675f406b7 100644
--- a/io_uring/filetable.h
+++ b/io_uring/filetable.h
@@ -36,6 +36,8 @@ bool io_alloc_file_tables(struct io_file_table *table, unsigned nr_files);
void io_free_file_tables(struct io_file_table *table);
int io_file_bitmap_get(struct io_ring_ctx *ctx);
+unsigned int io_file_get_flags(struct file *file);
+
static inline void io_file_bitmap_clear(struct io_file_table *table, int bit)
{
__clear_bit(bit, table->bitmap);
@@ -55,4 +57,21 @@ io_fixed_file_slot(struct io_file_table *table, unsigned i)
return &table->files[i];
}
+static inline struct file *io_file_from_index(struct io_file_table *table,
+ int index)
+{
+ struct io_fixed_file *slot = io_fixed_file_slot(table, index);
+
+ return (struct file *) (slot->file_ptr & FFS_MASK);
+}
+
+static inline void io_fixed_file_set(struct io_fixed_file *file_slot,
+ struct file *file)
+{
+ unsigned long file_ptr = (unsigned long) file;
+
+ file_ptr |= io_file_get_flags(file);
+ file_slot->file_ptr = file_ptr;
+}
+
#endif