LCOV - code coverage report
Current view: top level - include/linux - file.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 22 24 91.7 %
Date: 2021-04-22 12:43:58 Functions: 1 1 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             : 
      14             : struct file;
      15             : 
      16             : extern void fput(struct file *);
      17             : extern void fput_many(struct file *, unsigned int);
      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        8324 : static inline void fput_light(struct file *file, int fput_needed)
      31             : {
      32        8324 :         if (fput_needed)
      33         527 :                 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      137917 : static inline void fdput(struct fd fd)
      44             : {
      45       99264 :         if (fd.flags & FDPUT_FPUT)
      46        1021 :                 fput(fd.file);
      47             : }
      48             : 
      49             : extern struct file *fget(unsigned int fd);
      50             : extern struct file *fget_many(unsigned int fd, unsigned int refs);
      51             : extern struct file *fget_raw(unsigned int fd);
      52             : extern struct file *fget_task(struct task_struct *task, unsigned int fd);
      53             : extern unsigned long __fdget(unsigned int fd);
      54             : extern unsigned long __fdget_raw(unsigned int fd);
      55             : extern unsigned long __fdget_pos(unsigned int fd);
      56             : extern void __f_unlock_pos(struct file *);
      57             : 
      58      146305 : static inline struct fd __to_fd(unsigned long v)
      59             : {
      60      146305 :         return (struct fd){(struct file *)(v & ~3),v & 3};
      61             : }
      62             : 
      63       33817 : static inline struct fd fdget(unsigned int fd)
      64             : {
      65       33105 :         return __to_fd(__fdget(fd));
      66             : }
      67             : 
      68       71791 : static inline struct fd fdget_raw(unsigned int fd)
      69             : {
      70       71791 :         return __to_fd(__fdget_raw(fd));
      71             : }
      72             : 
      73       40651 : static inline struct fd fdget_pos(int fd)
      74             : {
      75       40651 :         return __to_fd(__fdget_pos(fd));
      76             : }
      77             : 
      78       40650 : static inline void fdput_pos(struct fd f)
      79             : {
      80       40650 :         if (f.flags & FDPUT_POS_UNLOCK)
      81        2012 :                 __f_unlock_pos(f.file);
      82       40650 :         fdput(f);
      83       40650 : }
      84             : 
      85             : extern int f_dupfd(unsigned int from, struct file *file, unsigned flags);
      86             : extern int replace_fd(unsigned fd, struct file *file, unsigned flags);
      87             : extern void set_close_on_exec(unsigned int fd, int flag);
      88             : extern bool get_close_on_exec(unsigned int fd);
      89             : extern int __get_unused_fd_flags(unsigned flags, unsigned long nofile);
      90             : extern int get_unused_fd_flags(unsigned flags);
      91             : extern void put_unused_fd(unsigned int fd);
      92             : 
      93             : extern void fd_install(unsigned int fd, struct file *file);
      94             : 
      95             : extern int __receive_fd(int fd, struct file *file, int __user *ufd,
      96             :                         unsigned int o_flags);
      97          54 : static inline int receive_fd_user(struct file *file, int __user *ufd,
      98             :                                   unsigned int o_flags)
      99             : {
     100          54 :         if (ufd == NULL)
     101             :                 return -EFAULT;
     102          54 :         return __receive_fd(-1, file, ufd, o_flags);
     103             : }
     104           0 : static inline int receive_fd(struct file *file, unsigned int o_flags)
     105             : {
     106           0 :         return __receive_fd(-1, file, NULL, o_flags);
     107             : }
     108             : static inline int receive_fd_replace(int fd, struct file *file, unsigned int o_flags)
     109             : {
     110             :         return __receive_fd(fd, file, NULL, o_flags);
     111             : }
     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