LCOV - code coverage report
Current view: top level - include/linux - file.h (source / functions) Hit Total Coverage
Test: fstests of 6.5.0-rc4-xfsa @ Mon Jul 31 20:08:27 PDT 2023 Lines: 14 14 100.0 %
Date: 2023-07-31 20:08:27 Functions: 4 4 100.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0 */
       2             : /*
       3             :  * Wrapper functions for accessing the file_struct fd array.
       4             :  */
       5             : 
       6             : #ifndef __LINUX_FILE_H
       7             : #define __LINUX_FILE_H
       8             : 
       9             : #include <linux/compiler.h>
      10             : #include <linux/types.h>
      11             : #include <linux/posix_types.h>
      12             : #include <linux/errno.h>
      13             : #include <linux/cleanup.h>
      14             : 
      15             : struct file;
      16             : 
      17             : extern void fput(struct file *);
      18             : 
      19             : struct file_operations;
      20             : struct task_struct;
      21             : struct vfsmount;
      22             : struct dentry;
      23             : struct inode;
      24             : struct path;
      25             : extern struct file *alloc_file_pseudo(struct inode *, struct vfsmount *,
      26             :         const char *, int flags, const struct file_operations *);
      27             : extern struct file *alloc_file_clone(struct file *, int flags,
      28             :         const struct file_operations *);
      29             : 
      30             : static inline void fput_light(struct file *file, int fput_needed)
      31             : {
      32             :         if (fput_needed)
      33             :                 fput(file);
      34             : }
      35             : 
      36             : struct fd {
      37             :         struct file *file;
      38             :         unsigned int flags;
      39             : };
      40             : #define FDPUT_FPUT       1
      41             : #define FDPUT_POS_UNLOCK 2
      42             : 
      43             : static inline void fdput(struct fd fd)
      44             : {
      45  2867365704 :         if (fd.flags & FDPUT_FPUT)
      46   531680883 :                 fput(fd.file);
      47             : }
      48             : 
      49             : extern struct file *fget(unsigned int fd);
      50             : extern struct file *fget_raw(unsigned int fd);
      51             : extern struct file *fget_task(struct task_struct *task, unsigned int fd);
      52             : extern unsigned long __fdget(unsigned int fd);
      53             : extern unsigned long __fdget_raw(unsigned int fd);
      54             : extern unsigned long __fdget_pos(unsigned int fd);
      55             : extern void __f_unlock_pos(struct file *);
      56             : 
      57             : static inline struct fd __to_fd(unsigned long v)
      58             : {
      59  4331367040 :         return (struct fd){(struct file *)(v & ~3),v & 3};
      60             : }
      61             : 
      62  2046371320 : static inline struct fd fdget(unsigned int fd)
      63             : {
      64  2046371320 :         return __to_fd(__fdget(fd));
      65             : }
      66             : 
      67   773065130 : static inline struct fd fdget_raw(unsigned int fd)
      68             : {
      69   773065130 :         return __to_fd(__fdget_raw(fd));
      70             : }
      71             : 
      72  1511759192 : static inline struct fd fdget_pos(int fd)
      73             : {
      74  1511759192 :         return __to_fd(__fdget_pos(fd));
      75             : }
      76             : 
      77  1511783337 : static inline void fdput_pos(struct fd f)
      78             : {
      79  1511783337 :         if (f.flags & FDPUT_POS_UNLOCK)
      80   482271145 :                 __f_unlock_pos(f.file);
      81  1511742185 :         fdput(f);
      82  1511742332 : }
      83             : 
      84             : DEFINE_CLASS(fd, struct fd, fdput(_T), fdget(fd), int fd)
      85             : 
      86             : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
      87             : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
      88             : extern void set_close_on_exec(unsigned int fd, int flag);
      89             : extern bool get_close_on_exec(unsigned int fd);
      90             : extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
      91             : extern int get_unused_fd_flags(unsigned flags);
      92             : extern void put_unused_fd(unsigned int fd);
      93             : 
      94             : DEFINE_CLASS(get_unused_fd, int, if (_T >= 0) put_unused_fd(_T),
      95             :              get_unused_fd_flags(flags), unsigned flags)
      96             : 
      97             : extern void fd_install(unsigned int fd, struct file *file);
      98             : 
      99             : extern int __receive_fd(struct file *file, int __user *ufd,
     100             :                         unsigned int o_flags);
     101             : 
     102             : extern int receive_fd(struct file *file, unsigned int o_flags);
     103             : 
     104             : static inline int receive_fd_user(struct file *file, int __user *ufd,
     105             :                                   unsigned int o_flags)
     106             : {
     107             :         if (ufd == NULL)
     108             :                 return -EFAULT;
     109             :         return __receive_fd(file, ufd, o_flags);
     110             : }
     111             : int receive_fd_replace(int new_fd, struct file *file, unsigned int o_flags);
     112             : 
     113             : extern void flush_delayed_fput(void);
     114             : extern void __fput_sync(struct file *);
     115             : 
     116             : extern unsigned int sysctl_nr_open_min, sysctl_nr_open_max;
     117             : 
     118             : #endif /* __LINUX_FILE_H */

Generated by: LCOV version 1.14