LCOV - code coverage report
Current view: top level - io_uring - filetable.h (source / functions) Hit Total Coverage
Test: coverage.info Lines: 0 20 0.0 %
Date: 2023-03-27 20:00:47 Functions: 0 4 0.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0
       2             : #ifndef IOU_FILE_TABLE_H
       3             : #define IOU_FILE_TABLE_H
       4             : 
       5             : #include <linux/file.h>
       6             : #include <linux/io_uring_types.h>
       7             : 
       8             : #define FFS_NOWAIT              0x1UL
       9             : #define FFS_ISREG               0x2UL
      10             : #define FFS_MASK                ~(FFS_NOWAIT|FFS_ISREG)
      11             : 
      12             : bool io_alloc_file_tables(struct io_file_table *table, unsigned nr_files);
      13             : void io_free_file_tables(struct io_file_table *table);
      14             : 
      15             : int io_fixed_fd_install(struct io_kiocb *req, unsigned int issue_flags,
      16             :                         struct file *file, unsigned int file_slot);
      17             : int __io_fixed_fd_install(struct io_ring_ctx *ctx, struct file *file,
      18             :                                 unsigned int file_slot);
      19             : int io_fixed_fd_remove(struct io_ring_ctx *ctx, unsigned int offset);
      20             : 
      21             : int io_register_file_alloc_range(struct io_ring_ctx *ctx,
      22             :                                  struct io_uring_file_index_range __user *arg);
      23             : 
      24             : unsigned int io_file_get_flags(struct file *file);
      25             : 
      26           0 : static inline void io_file_bitmap_clear(struct io_file_table *table, int bit)
      27             : {
      28           0 :         WARN_ON_ONCE(!test_bit(bit, table->bitmap));
      29           0 :         __clear_bit(bit, table->bitmap);
      30           0 :         table->alloc_hint = bit;
      31           0 : }
      32             : 
      33           0 : static inline void io_file_bitmap_set(struct io_file_table *table, int bit)
      34             : {
      35           0 :         WARN_ON_ONCE(test_bit(bit, table->bitmap));
      36           0 :         __set_bit(bit, table->bitmap);
      37           0 :         table->alloc_hint = bit + 1;
      38           0 : }
      39             : 
      40             : static inline struct io_fixed_file *
      41             : io_fixed_file_slot(struct io_file_table *table, unsigned i)
      42             : {
      43           0 :         return &table->files[i];
      44             : }
      45             : 
      46             : static inline struct file *io_file_from_index(struct io_file_table *table,
      47             :                                               int index)
      48             : {
      49           0 :         struct io_fixed_file *slot = io_fixed_file_slot(table, index);
      50             : 
      51           0 :         return (struct file *) (slot->file_ptr & FFS_MASK);
      52             : }
      53             : 
      54             : static inline void io_fixed_file_set(struct io_fixed_file *file_slot,
      55             :                                      struct file *file)
      56             : {
      57           0 :         unsigned long file_ptr = (unsigned long) file;
      58             : 
      59           0 :         file_ptr |= io_file_get_flags(file);
      60           0 :         file_slot->file_ptr = file_ptr;
      61             : }
      62             : 
      63             : static inline void io_reset_alloc_hint(struct io_ring_ctx *ctx)
      64             : {
      65           0 :         ctx->file_table.alloc_hint = ctx->file_alloc_start;
      66             : }
      67             : 
      68             : static inline void io_file_table_set_alloc_range(struct io_ring_ctx *ctx,
      69             :                                                  unsigned off, unsigned len)
      70             : {
      71           0 :         ctx->file_alloc_start = off;
      72           0 :         ctx->file_alloc_end = off + len;
      73           0 :         io_reset_alloc_hint(ctx);
      74             : }
      75             : 
      76             : #endif

Generated by: LCOV version 1.14