LCOV - code coverage report
Current view: top level - fs/kernfs - kernfs-internal.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 7 7 100.0 %
Date: 2021-04-22 12:43:58 Functions: 0 0 -

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0-only */
       2             : /*
       3             :  * fs/kernfs/kernfs-internal.h - kernfs internal header file
       4             :  *
       5             :  * Copyright (c) 2001-3 Patrick Mochel
       6             :  * Copyright (c) 2007 SUSE Linux Products GmbH
       7             :  * Copyright (c) 2007, 2013 Tejun Heo <teheo@suse.de>
       8             :  */
       9             : 
      10             : #ifndef __KERNFS_INTERNAL_H
      11             : #define __KERNFS_INTERNAL_H
      12             : 
      13             : #include <linux/lockdep.h>
      14             : #include <linux/fs.h>
      15             : #include <linux/mutex.h>
      16             : #include <linux/xattr.h>
      17             : 
      18             : #include <linux/kernfs.h>
      19             : #include <linux/fs_context.h>
      20             : 
      21             : struct kernfs_iattrs {
      22             :         kuid_t                  ia_uid;
      23             :         kgid_t                  ia_gid;
      24             :         struct timespec64       ia_atime;
      25             :         struct timespec64       ia_mtime;
      26             :         struct timespec64       ia_ctime;
      27             : 
      28             :         struct simple_xattrs    xattrs;
      29             :         atomic_t                nr_user_xattrs;
      30             :         atomic_t                user_xattr_size;
      31             : };
      32             : 
      33             : /* +1 to avoid triggering overflow warning when negating it */
      34             : #define KN_DEACTIVATED_BIAS             (INT_MIN + 1)
      35             : 
      36             : /* KERNFS_TYPE_MASK and types are defined in include/linux/kernfs.h */
      37             : 
      38             : /**
      39             :  * kernfs_root - find out the kernfs_root a kernfs_node belongs to
      40             :  * @kn: kernfs_node of interest
      41             :  *
      42             :  * Return the kernfs_root @kn belongs to.
      43             :  */
      44       22942 : static inline struct kernfs_root *kernfs_root(struct kernfs_node *kn)
      45             : {
      46             :         /* if parent exists, it's always a dir; otherwise, @sd is a dir */
      47       22622 :         if (kn->parent)
      48       20862 :                 kn = kn->parent;
      49       22942 :         return kn->dir.root;
      50             : }
      51             : 
      52             : /*
      53             :  * mount.c
      54             :  */
      55             : struct kernfs_super_info {
      56             :         struct super_block      *sb;
      57             : 
      58             :         /*
      59             :          * The root associated with this super_block.  Each super_block is
      60             :          * identified by the root and ns it's associated with.
      61             :          */
      62             :         struct kernfs_root      *root;
      63             : 
      64             :         /*
      65             :          * Each sb is associated with one namespace tag, currently the
      66             :          * network namespace of the task which mounted this kernfs
      67             :          * instance.  If multiple tags become necessary, make the following
      68             :          * an array and compare kernfs_node tag against every entry.
      69             :          */
      70             :         const void              *ns;
      71             : 
      72             :         /* anchored at kernfs_root->supers, protected by kernfs_mutex */
      73             :         struct list_head        node;
      74             : };
      75             : #define kernfs_info(SB) ((struct kernfs_super_info *)(SB->s_fs_info))
      76             : 
      77       43202 : static inline struct kernfs_node *kernfs_dentry_node(struct dentry *dentry)
      78             : {
      79       43202 :         if (d_really_is_negative(dentry))
      80             :                 return NULL;
      81       43202 :         return d_inode(dentry)->i_private;
      82             : }
      83             : 
      84             : extern const struct super_operations kernfs_sops;
      85             : extern struct kmem_cache *kernfs_node_cache, *kernfs_iattrs_cache;
      86             : 
      87             : /*
      88             :  * inode.c
      89             :  */
      90             : extern const struct xattr_handler *kernfs_xattr_handlers[];
      91             : void kernfs_evict_inode(struct inode *inode);
      92             : int kernfs_iop_permission(struct user_namespace *mnt_userns,
      93             :                           struct inode *inode, int mask);
      94             : int kernfs_iop_setattr(struct user_namespace *mnt_userns, struct dentry *dentry,
      95             :                        struct iattr *iattr);
      96             : int kernfs_iop_getattr(struct user_namespace *mnt_userns,
      97             :                        const struct path *path, struct kstat *stat,
      98             :                        u32 request_mask, unsigned int query_flags);
      99             : ssize_t kernfs_iop_listxattr(struct dentry *dentry, char *buf, size_t size);
     100             : int __kernfs_setattr(struct kernfs_node *kn, const struct iattr *iattr);
     101             : 
     102             : /*
     103             :  * dir.c
     104             :  */
     105             : extern struct mutex kernfs_mutex;
     106             : extern const struct dentry_operations kernfs_dops;
     107             : extern const struct file_operations kernfs_dir_fops;
     108             : extern const struct inode_operations kernfs_dir_iops;
     109             : 
     110             : struct kernfs_node *kernfs_get_active(struct kernfs_node *kn);
     111             : void kernfs_put_active(struct kernfs_node *kn);
     112             : int kernfs_add_one(struct kernfs_node *kn);
     113             : struct kernfs_node *kernfs_new_node(struct kernfs_node *parent,
     114             :                                     const char *name, umode_t mode,
     115             :                                     kuid_t uid, kgid_t gid,
     116             :                                     unsigned flags);
     117             : 
     118             : /*
     119             :  * file.c
     120             :  */
     121             : extern const struct file_operations kernfs_file_fops;
     122             : 
     123             : void kernfs_drain_open_files(struct kernfs_node *kn);
     124             : 
     125             : /*
     126             :  * symlink.c
     127             :  */
     128             : extern const struct inode_operations kernfs_symlink_iops;
     129             : 
     130             : #endif  /* __KERNFS_INTERNAL_H */

Generated by: LCOV version 1.14