#ifndef _LINUX_FS_H
#define _LINUX_FS_H
#include <linux/linkage.h>
#include <linux/wait_bit.h>
#include <linux/kdev_t.h>
#include <linux/dcache.h>
#include <linux/path.h>
#include <linux/stat.h>
#include <linux/cache.h>
#include <linux/list.h>
#include <linux/list_lru.h>
#include <linux/llist.h>
#include <linux/radix-tree.h>
#include <linux/xarray.h>
#include <linux/rbtree.h>
#include <linux/init.h>
#include <linux/pid.h>
#include <linux/bug.h>
#include <linux/mutex.h>
#include <linux/rwsem.h>
#include <linux/mm_types.h>
#include <linux/capability.h>
#include <linux/semaphore.h>
#include <linux/fcntl.h>
#include <linux/rculist_bl.h>
#include <linux/atomic.h>
#include <linux/shrinker.h>
#include <linux/migrate_mode.h>
#include <linux/uidgid.h>
#include <linux/lockdep.h>
#include <linux/percpu-rwsem.h>
#include <linux/workqueue.h>
#include <linux/delayed_call.h>
#include <linux/uuid.h>
#include <linux/errseq.h>
#include <linux/ioprio.h>
#include <linux/fs_types.h>
#include <linux/build_bug.h>
#include <linux/stddef.h>
#include <linux/mount.h>
#include <linux/cred.h>
#include <linux/mnt_idmapping.h>
#include <linux/slab.h>
#include <linux/maple_tree.h>
#include <linux/rw_hint.h>
#include <asm/byteorder.h>
#include <uapi/linux/fs.h>
struct backing_dev_info;
struct bdi_writeback;
struct bio;
struct io_comp_batch;
struct export_operations;
struct fiemap_extent_info;
struct hd_geometry;
struct iovec;
struct kiocb;
struct kobject;
struct pipe_inode_info;
struct poll_table_struct;
struct kstatfs;
struct vm_area_struct;
struct vfsmount;
struct cred;
struct swap_info_struct;
struct seq_file;
struct workqueue_struct;
struct iov_iter;
struct fscrypt_inode_info;
struct fscrypt_operations;
struct fsverity_info;
struct fsverity_operations;
struct fsnotify_mark_connector;
struct fsnotify_sb_info;
struct fs_context;
struct fs_parameter_spec;
struct fileattr;
struct iomap_ops;
extern void __init inode_init(void);
extern void __init inode_init_early(void);
extern void __init files_init(void);
extern void __init files_maxfiles_init(void);
extern unsigned long get_max_files(void);
extern unsigned int sysctl_nr_open;
rwf_t;
struct buffer_head;
get_block_t;
dio_iodone_t;
#define MAY_EXEC …
#define MAY_WRITE …
#define MAY_READ …
#define MAY_APPEND …
#define MAY_ACCESS …
#define MAY_OPEN …
#define MAY_CHDIR …
#define MAY_NOT_BLOCK …
#define FMODE_READ …
#define FMODE_WRITE …
#define FMODE_LSEEK …
#define FMODE_PREAD …
#define FMODE_PWRITE …
#define FMODE_EXEC …
#define FMODE_WRITE_RESTRICTED …
#define FMODE_CAN_ATOMIC_WRITE …
#define FMODE_32BITHASH …
#define FMODE_64BITHASH …
#define FMODE_NOCMTIME …
#define FMODE_RANDOM …
#define FMODE_UNSIGNED_OFFSET …
#define FMODE_PATH …
#define FMODE_ATOMIC_POS …
#define FMODE_WRITER …
#define FMODE_CAN_READ …
#define FMODE_CAN_WRITE …
#define FMODE_OPENED …
#define FMODE_CREATED …
#define FMODE_STREAM …
#define FMODE_CAN_ODIRECT …
#define FMODE_NOREUSE …
#define FMODE_BACKING …
#define FMODE_NONOTIFY …
#define FMODE_NOWAIT …
#define FMODE_NEED_UNMOUNT …
#define FMODE_NOACCOUNT …
#define ATTR_MODE …
#define ATTR_UID …
#define ATTR_GID …
#define ATTR_SIZE …
#define ATTR_ATIME …
#define ATTR_MTIME …
#define ATTR_CTIME …
#define ATTR_ATIME_SET …
#define ATTR_MTIME_SET …
#define ATTR_FORCE …
#define ATTR_KILL_SUID …
#define ATTR_KILL_SGID …
#define ATTR_FILE …
#define ATTR_KILL_PRIV …
#define ATTR_OPEN …
#define ATTR_TIMES_SET …
#define ATTR_TOUCH …
#define WHITEOUT_MODE …
#define WHITEOUT_DEV …
struct iattr { … };
#include <linux/quota.h>
#define FILESYSTEM_MAX_STACK_DEPTH …
enum positive_aop_returns { … };
struct page;
struct address_space;
struct writeback_control;
struct readahead_control;
#define IOCB_HIPRI …
#define IOCB_DSYNC …
#define IOCB_SYNC …
#define IOCB_NOWAIT …
#define IOCB_APPEND …
#define IOCB_ATOMIC …
#define IOCB_EVENTFD …
#define IOCB_DIRECT …
#define IOCB_WRITE …
#define IOCB_WAITQ …
#define IOCB_NOIO …
#define IOCB_ALLOC_CACHE …
#define IOCB_DIO_CALLER_COMP …
#define IOCB_AIO_RW …
#define TRACE_IOCB_STRINGS …
struct kiocb { … };
static inline bool is_sync_kiocb(struct kiocb *kiocb)
{ … }
struct address_space_operations { … };
extern const struct address_space_operations empty_aops;
struct address_space { … } __attribute__((aligned …)) __randomize_layout;
#define PAGECACHE_TAG_DIRTY …
#define PAGECACHE_TAG_WRITEBACK …
#define PAGECACHE_TAG_TOWRITE …
static inline bool mapping_tagged(struct address_space *mapping, xa_mark_t tag)
{ … }
static inline void i_mmap_lock_write(struct address_space *mapping)
{ … }
static inline int i_mmap_trylock_write(struct address_space *mapping)
{ … }
static inline void i_mmap_unlock_write(struct address_space *mapping)
{ … }
static inline int i_mmap_trylock_read(struct address_space *mapping)
{ … }
static inline void i_mmap_lock_read(struct address_space *mapping)
{ … }
static inline void i_mmap_unlock_read(struct address_space *mapping)
{ … }
static inline void i_mmap_assert_locked(struct address_space *mapping)
{ … }
static inline void i_mmap_assert_write_locked(struct address_space *mapping)
{ … }
static inline int mapping_mapped(struct address_space *mapping)
{ … }
static inline int mapping_writably_mapped(struct address_space *mapping)
{ … }
static inline int mapping_map_writable(struct address_space *mapping)
{ … }
static inline void mapping_unmap_writable(struct address_space *mapping)
{ … }
static inline int mapping_deny_writable(struct address_space *mapping)
{ … }
static inline void mapping_allow_writable(struct address_space *mapping)
{ … }
#if BITS_PER_LONG==32 && defined(CONFIG_SMP)
#include <linux/seqlock.h>
#define __NEED_I_SIZE_ORDERED
#define i_size_ordered_init …
#else
#define i_size_ordered_init(inode) …
#endif
struct posix_acl;
#define ACL_NOT_CACHED …
#define ACL_DONT_CACHE …
static inline struct posix_acl *
uncached_acl_sentinel(struct task_struct *task)
{ … }
static inline bool
is_uncached_acl(struct posix_acl *acl)
{ … }
#define IOP_FASTPERM …
#define IOP_LOOKUP …
#define IOP_NOFOLLOW …
#define IOP_XATTR …
#define IOP_DEFAULT_READLINK …
struct inode { … } __randomize_layout;
struct timespec64 timestamp_truncate(struct timespec64 t, struct inode *inode);
static inline unsigned int i_blocksize(const struct inode *node)
{ … }
static inline int inode_unhashed(struct inode *inode)
{ … }
static inline void inode_fake_hash(struct inode *inode)
{ … }
enum inode_i_mutex_lock_class
{ … };
static inline void inode_lock(struct inode *inode)
{ … }
static inline void inode_unlock(struct inode *inode)
{ … }
static inline void inode_lock_shared(struct inode *inode)
{ … }
static inline void inode_unlock_shared(struct inode *inode)
{ … }
static inline int inode_trylock(struct inode *inode)
{ … }
static inline int inode_trylock_shared(struct inode *inode)
{ … }
static inline int inode_is_locked(struct inode *inode)
{ … }
static inline void inode_lock_nested(struct inode *inode, unsigned subclass)
{ … }
static inline void inode_lock_shared_nested(struct inode *inode, unsigned subclass)
{ … }
static inline void filemap_invalidate_lock(struct address_space *mapping)
{ … }
static inline void filemap_invalidate_unlock(struct address_space *mapping)
{ … }
static inline void filemap_invalidate_lock_shared(struct address_space *mapping)
{ … }
static inline int filemap_invalidate_trylock_shared(
struct address_space *mapping)
{ … }
static inline void filemap_invalidate_unlock_shared(
struct address_space *mapping)
{ … }
void lock_two_nondirectories(struct inode *, struct inode*);
void unlock_two_nondirectories(struct inode *, struct inode*);
void filemap_invalidate_lock_two(struct address_space *mapping1,
struct address_space *mapping2);
void filemap_invalidate_unlock_two(struct address_space *mapping1,
struct address_space *mapping2);
static inline loff_t i_size_read(const struct inode *inode)
{ … }
static inline void i_size_write(struct inode *inode, loff_t i_size)
{ … }
static inline unsigned iminor(const struct inode *inode)
{ … }
static inline unsigned imajor(const struct inode *inode)
{ … }
struct fown_struct { … };
struct file_ra_state { … };
static inline int ra_has_index(struct file_ra_state *ra, pgoff_t index)
{ … }
struct file { … } __randomize_layout
__attribute__((aligned …));
struct file_handle { … };
static inline struct file *get_file(struct file *f)
{ … }
struct file *get_file_rcu(struct file __rcu **f);
struct file *get_file_active(struct file **f);
#define file_count(x) …
#define MAX_NON_LFS …
#if BITS_PER_LONG==32
#define MAX_LFS_FILESIZE …
#elif BITS_PER_LONG==64
#define MAX_LFS_FILESIZE …
#endif
fl_owner_t;
struct file_lock;
struct file_lease;
#ifndef OFFSET_MAX
#define OFFSET_MAX …
#define OFFT_OFFSET_MAX …
#endif
extern void send_sigio(struct fown_struct *fown, int fd, int band);
static inline struct inode *file_inode(const struct file *f)
{ … }
static inline struct dentry *file_dentry(const struct file *file)
{ … }
struct fasync_struct { … };
#define FASYNC_MAGIC …
extern int fasync_helper(int, struct file *, int, struct fasync_struct **);
extern struct fasync_struct *fasync_insert_entry(int, struct file *, struct fasync_struct **, struct fasync_struct *);
extern int fasync_remove_entry(struct file *, struct fasync_struct **);
extern struct fasync_struct *fasync_alloc(void);
extern void fasync_free(struct fasync_struct *);
extern void kill_fasync(struct fasync_struct **, int, int);
extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
extern int f_setown(struct file *filp, int who, int force);
extern void f_delown(struct file *filp);
extern pid_t f_getown(struct file *filp);
extern int send_sigurg(struct fown_struct *fown);
#define SB_RDONLY …
#define SB_NOSUID …
#define SB_NODEV …
#define SB_NOEXEC …
#define SB_SYNCHRONOUS …
#define SB_MANDLOCK …
#define SB_DIRSYNC …
#define SB_NOATIME …
#define SB_NODIRATIME …
#define SB_SILENT …
#define SB_POSIXACL …
#define SB_INLINECRYPT …
#define SB_KERNMOUNT …
#define SB_I_VERSION …
#define SB_LAZYTIME …
#define SB_DEAD …
#define SB_DYING …
#define SB_SUBMOUNT …
#define SB_FORCE …
#define SB_NOSEC …
#define SB_BORN …
#define SB_ACTIVE …
#define SB_NOUSER …
#define SB_ENC_STRICT_MODE_FL …
#define sb_has_strict_encoding(sb) …
#define MNT_FORCE …
#define MNT_DETACH …
#define MNT_EXPIRE …
#define UMOUNT_NOFOLLOW …
#define UMOUNT_UNUSED …
#define SB_I_CGROUPWB …
#define SB_I_NOEXEC …
#define SB_I_NODEV …
#define SB_I_STABLE_WRITES …
#define SB_I_USERNS_VISIBLE …
#define SB_I_IMA_UNVERIFIABLE_SIGNATURE …
#define SB_I_UNTRUSTED_MOUNTER …
#define SB_I_EVM_HMAC_UNSUPPORTED …
#define SB_I_SKIP_SYNC …
#define SB_I_PERSB_BDI …
#define SB_I_TS_EXPIRY_WARNED …
#define SB_I_RETIRED …
#define SB_I_NOUMASK …
enum { … };
#define SB_FREEZE_LEVELS …
struct sb_writers { … };
struct super_block { … } __randomize_layout;
static inline struct user_namespace *i_user_ns(const struct inode *inode)
{ … }
static inline uid_t i_uid_read(const struct inode *inode)
{ … }
static inline gid_t i_gid_read(const struct inode *inode)
{ … }
static inline void i_uid_write(struct inode *inode, uid_t uid)
{ … }
static inline void i_gid_write(struct inode *inode, gid_t gid)
{ … }
static inline vfsuid_t i_uid_into_vfsuid(struct mnt_idmap *idmap,
const struct inode *inode)
{ … }
static inline bool i_uid_needs_update(struct mnt_idmap *idmap,
const struct iattr *attr,
const struct inode *inode)
{ … }
static inline void i_uid_update(struct mnt_idmap *idmap,
const struct iattr *attr,
struct inode *inode)
{ … }
static inline vfsgid_t i_gid_into_vfsgid(struct mnt_idmap *idmap,
const struct inode *inode)
{ … }
static inline bool i_gid_needs_update(struct mnt_idmap *idmap,
const struct iattr *attr,
const struct inode *inode)
{ … }
static inline void i_gid_update(struct mnt_idmap *idmap,
const struct iattr *attr,
struct inode *inode)
{ … }
static inline void inode_fsuid_set(struct inode *inode,
struct mnt_idmap *idmap)
{ … }
static inline void inode_fsgid_set(struct inode *inode,
struct mnt_idmap *idmap)
{ … }
static inline bool fsuidgid_has_mapping(struct super_block *sb,
struct mnt_idmap *idmap)
{ … }
struct timespec64 current_time(struct inode *inode);
struct timespec64 inode_set_ctime_current(struct inode *inode);
static inline time64_t inode_get_atime_sec(const struct inode *inode)
{ … }
static inline long inode_get_atime_nsec(const struct inode *inode)
{ … }
static inline struct timespec64 inode_get_atime(const struct inode *inode)
{ … }
static inline struct timespec64 inode_set_atime_to_ts(struct inode *inode,
struct timespec64 ts)
{ … }
static inline struct timespec64 inode_set_atime(struct inode *inode,
time64_t sec, long nsec)
{ … }
static inline time64_t inode_get_mtime_sec(const struct inode *inode)
{ … }
static inline long inode_get_mtime_nsec(const struct inode *inode)
{ … }
static inline struct timespec64 inode_get_mtime(const struct inode *inode)
{ … }
static inline struct timespec64 inode_set_mtime_to_ts(struct inode *inode,
struct timespec64 ts)
{ … }
static inline struct timespec64 inode_set_mtime(struct inode *inode,
time64_t sec, long nsec)
{ … }
static inline time64_t inode_get_ctime_sec(const struct inode *inode)
{ … }
static inline long inode_get_ctime_nsec(const struct inode *inode)
{ … }
static inline struct timespec64 inode_get_ctime(const struct inode *inode)
{ … }
static inline struct timespec64 inode_set_ctime_to_ts(struct inode *inode,
struct timespec64 ts)
{ … }
static inline struct timespec64 inode_set_ctime(struct inode *inode,
time64_t sec, long nsec)
{ … }
struct timespec64 simple_inode_init_ts(struct inode *inode);
static inline void __sb_end_write(struct super_block *sb, int level)
{ … }
static inline void __sb_start_write(struct super_block *sb, int level)
{ … }
static inline bool __sb_start_write_trylock(struct super_block *sb, int level)
{ … }
#define __sb_writers_acquired(sb, lev) …
#define __sb_writers_release(sb, lev) …
static inline int __sb_write_started(const struct super_block *sb, int level)
{ … }
static inline bool sb_write_started(const struct super_block *sb)
{ … }
static inline bool sb_write_not_started(const struct super_block *sb)
{ … }
static inline bool file_write_started(const struct file *file)
{ … }
static inline bool file_write_not_started(const struct file *file)
{ … }
static inline void sb_end_write(struct super_block *sb)
{ … }
static inline void sb_end_pagefault(struct super_block *sb)
{ … }
static inline void sb_end_intwrite(struct super_block *sb)
{ … }
static inline void sb_start_write(struct super_block *sb)
{ … }
static inline bool sb_start_write_trylock(struct super_block *sb)
{ … }
static inline void sb_start_pagefault(struct super_block *sb)
{ … }
static inline void sb_start_intwrite(struct super_block *sb)
{ … }
static inline bool sb_start_intwrite_trylock(struct super_block *sb)
{ … }
bool inode_owner_or_capable(struct mnt_idmap *idmap,
const struct inode *inode);
int vfs_create(struct mnt_idmap *, struct inode *,
struct dentry *, umode_t, bool);
int vfs_mkdir(struct mnt_idmap *, struct inode *,
struct dentry *, umode_t);
int vfs_mknod(struct mnt_idmap *, struct inode *, struct dentry *,
umode_t, dev_t);
int vfs_symlink(struct mnt_idmap *, struct inode *,
struct dentry *, const char *);
int vfs_link(struct dentry *, struct mnt_idmap *, struct inode *,
struct dentry *, struct inode **);
int vfs_rmdir(struct mnt_idmap *, struct inode *, struct dentry *);
int vfs_unlink(struct mnt_idmap *, struct inode *, struct dentry *,
struct inode **);
struct renamedata { … } __randomize_layout;
int vfs_rename(struct renamedata *);
static inline int vfs_whiteout(struct mnt_idmap *idmap,
struct inode *dir, struct dentry *dentry)
{ … }
struct file *kernel_tmpfile_open(struct mnt_idmap *idmap,
const struct path *parentpath,
umode_t mode, int open_flag,
const struct cred *cred);
struct file *kernel_file_open(const struct path *path, int flags,
const struct cred *cred);
int vfs_mkobj(struct dentry *, umode_t,
int (*f)(struct dentry *, umode_t, void *),
void *);
int vfs_fchown(struct file *file, uid_t user, gid_t group);
int vfs_fchmod(struct file *file, umode_t mode);
int vfs_utimes(const struct path *path, struct timespec64 *times);
extern long vfs_ioctl(struct file *file, unsigned int cmd, unsigned long arg);
#ifdef CONFIG_COMPAT
extern long compat_ptr_ioctl(struct file *file, unsigned int cmd,
unsigned long arg);
#else
#define compat_ptr_ioctl …
#endif
void inode_init_owner(struct mnt_idmap *idmap, struct inode *inode,
const struct inode *dir, umode_t mode);
extern bool may_open_dev(const struct path *path);
umode_t mode_strip_sgid(struct mnt_idmap *idmap,
const struct inode *dir, umode_t mode);
bool in_group_or_capable(struct mnt_idmap *idmap,
const struct inode *inode, vfsgid_t vfsgid);
struct dir_context;
filldir_t;
struct dir_context { … };
#define NOMMU_MAP_COPY …
#define NOMMU_MAP_DIRECT …
#define NOMMU_MAP_READ …
#define NOMMU_MAP_WRITE …
#define NOMMU_MAP_EXEC …
#define NOMMU_VMFLAGS …
#define REMAP_FILE_DEDUP …
#define REMAP_FILE_CAN_SHORTEN …
#define REMAP_FILE_ADVISORY …
#define COPY_FILE_SPLICE …
struct iov_iter;
struct io_uring_cmd;
struct offset_ctx;
fop_flags_t;
struct file_operations { … } __randomize_layout;
#define FOP_BUFFER_RASYNC …
#define FOP_BUFFER_WASYNC …
#define FOP_MMAP_SYNC …
#define FOP_DIO_PARALLEL_WRITE …
#define FOP_HUGE_PAGES …
int wrap_directory_iterator(struct file *, struct dir_context *,
int (*) (struct file *, struct dir_context *));
#define WRAP_DIR_ITER(x) …
struct inode_operations { … } ____cacheline_aligned;
static inline int call_mmap(struct file *file, struct vm_area_struct *vma)
{ … }
extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
extern ssize_t vfs_write(struct file *, const char __user *, size_t, loff_t *);
extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *,
loff_t, size_t, unsigned int);
int remap_verify_area(struct file *file, loff_t pos, loff_t len, bool write);
int __generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
struct file *file_out, loff_t pos_out,
loff_t *len, unsigned int remap_flags,
const struct iomap_ops *dax_read_ops);
int generic_remap_file_range_prep(struct file *file_in, loff_t pos_in,
struct file *file_out, loff_t pos_out,
loff_t *count, unsigned int remap_flags);
extern loff_t vfs_clone_file_range(struct file *file_in, loff_t pos_in,
struct file *file_out, loff_t pos_out,
loff_t len, unsigned int remap_flags);
extern int vfs_dedupe_file_range(struct file *file,
struct file_dedupe_range *same);
extern loff_t vfs_dedupe_file_range_one(struct file *src_file, loff_t src_pos,
struct file *dst_file, loff_t dst_pos,
loff_t len, unsigned int remap_flags);
enum freeze_holder { … };
struct super_operations { … };
#define S_SYNC …
#define S_NOATIME …
#define S_APPEND …
#define S_IMMUTABLE …
#define S_DEAD …
#define S_NOQUOTA …
#define S_DIRSYNC …
#define S_NOCMTIME …
#define S_SWAPFILE …
#define S_PRIVATE …
#define S_IMA …
#define S_AUTOMOUNT …
#define S_NOSEC …
#ifdef CONFIG_FS_DAX
#define S_DAX …
#else
#define S_DAX …
#endif
#define S_ENCRYPTED …
#define S_CASEFOLD …
#define S_VERITY …
#define S_KERNEL_FILE …
#define __IS_FLG(inode, flg) …
static inline bool sb_rdonly(const struct super_block *sb) { … }
#define IS_RDONLY(inode) …
#define IS_SYNC(inode) …
#define IS_DIRSYNC(inode) …
#define IS_MANDLOCK(inode) …
#define IS_NOATIME(inode) …
#define IS_I_VERSION(inode) …
#define IS_NOQUOTA(inode) …
#define IS_APPEND(inode) …
#define IS_IMMUTABLE(inode) …
#ifdef CONFIG_FS_POSIX_ACL
#define IS_POSIXACL(inode) …
#else
#define IS_POSIXACL …
#endif
#define IS_DEADDIR(inode) …
#define IS_NOCMTIME(inode) …
#ifdef CONFIG_SWAP
#define IS_SWAPFILE(inode) …
#else
#define IS_SWAPFILE …
#endif
#define IS_PRIVATE(inode) …
#define IS_IMA(inode) …
#define IS_AUTOMOUNT(inode) …
#define IS_NOSEC(inode) …
#define IS_DAX(inode) …
#define IS_ENCRYPTED(inode) …
#define IS_CASEFOLDED(inode) …
#define IS_VERITY(inode) …
#define IS_WHITEOUT(inode) …
static inline bool HAS_UNMAPPED_ID(struct mnt_idmap *idmap,
struct inode *inode)
{ … }
static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)
{ … }
static inline void kiocb_clone(struct kiocb *kiocb, struct kiocb *kiocb_src,
struct file *filp)
{ … }
#define I_DIRTY_SYNC …
#define I_DIRTY_DATASYNC …
#define I_DIRTY_PAGES …
#define __I_NEW …
#define I_NEW …
#define I_WILL_FREE …
#define I_FREEING …
#define I_CLEAR …
#define __I_SYNC …
#define I_SYNC …
#define I_REFERENCED …
#define __I_DIO_WAKEUP …
#define I_DIO_WAKEUP …
#define I_LINKABLE …
#define I_DIRTY_TIME …
#define I_WB_SWITCH …
#define I_OVL_INUSE …
#define I_CREATING …
#define I_DONTCACHE …
#define I_SYNC_QUEUED …
#define I_PINNING_NETFS_WB …
#define I_DIRTY_INODE …
#define I_DIRTY …
#define I_DIRTY_ALL …
extern void __mark_inode_dirty(struct inode *, int);
static inline void mark_inode_dirty(struct inode *inode)
{ … }
static inline void mark_inode_dirty_sync(struct inode *inode)
{ … }
static inline bool inode_is_dirtytime_only(struct inode *inode)
{ … }
extern void inc_nlink(struct inode *inode);
extern void drop_nlink(struct inode *inode);
extern void clear_nlink(struct inode *inode);
extern void set_nlink(struct inode *inode, unsigned int nlink);
static inline void inode_inc_link_count(struct inode *inode)
{ … }
static inline void inode_dec_link_count(struct inode *inode)
{ … }
enum file_time_flags { … };
extern bool atime_needs_update(const struct path *, struct inode *);
extern void touch_atime(const struct path *);
int inode_update_time(struct inode *inode, int flags);
static inline void file_accessed(struct file *file)
{ … }
extern int file_modified(struct file *file);
int kiocb_modified(struct kiocb *iocb);
int sync_inode_metadata(struct inode *inode, int wait);
struct file_system_type { … };
#define MODULE_ALIAS_FS(NAME) …
extern struct dentry *mount_bdev(struct file_system_type *fs_type,
int flags, const char *dev_name, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_single(struct file_system_type *fs_type,
int flags, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_nodev(struct file_system_type *fs_type,
int flags, void *data,
int (*fill_super)(struct super_block *, void *, int));
extern struct dentry *mount_subtree(struct vfsmount *mnt, const char *path);
void retire_super(struct super_block *sb);
void generic_shutdown_super(struct super_block *sb);
void kill_block_super(struct super_block *sb);
void kill_anon_super(struct super_block *sb);
void kill_litter_super(struct super_block *sb);
void deactivate_super(struct super_block *sb);
void deactivate_locked_super(struct super_block *sb);
int set_anon_super(struct super_block *s, void *data);
int set_anon_super_fc(struct super_block *s, struct fs_context *fc);
int get_anon_bdev(dev_t *);
void free_anon_bdev(dev_t);
struct super_block *sget_fc(struct fs_context *fc,
int (*test)(struct super_block *, struct fs_context *),
int (*set)(struct super_block *, struct fs_context *));
struct super_block *sget(struct file_system_type *type,
int (*test)(struct super_block *,void *),
int (*set)(struct super_block *,void *),
int flags, void *data);
struct super_block *sget_dev(struct fs_context *fc, dev_t dev);
#define fops_get(fops) …
#define fops_put(fops) …
#define replace_fops(f, fops) …
extern int register_filesystem(struct file_system_type *);
extern int unregister_filesystem(struct file_system_type *);
extern int vfs_statfs(const struct path *, struct kstatfs *);
extern int user_statfs(const char __user *, struct kstatfs *);
extern int fd_statfs(int, struct kstatfs *);
int freeze_super(struct super_block *super, enum freeze_holder who);
int thaw_super(struct super_block *super, enum freeze_holder who);
extern __printf(2, 3)
int super_setup_bdi_name(struct super_block *sb, char *fmt, ...);
extern int super_setup_bdi(struct super_block *sb);
static inline void super_set_uuid(struct super_block *sb, const u8 *uuid, unsigned len)
{ … }
static inline void super_set_sysfs_name_bdev(struct super_block *sb)
{ … }
static inline void super_set_sysfs_name_uuid(struct super_block *sb)
{ … }
static inline void super_set_sysfs_name_id(struct super_block *sb)
{ … }
__printf(2, 3)
static inline void super_set_sysfs_name_generic(struct super_block *sb, const char *fmt, ...)
{ … }
extern int current_umask(void);
extern void ihold(struct inode * inode);
extern void iput(struct inode *);
int inode_update_timestamps(struct inode *inode, int flags);
int generic_update_time(struct inode *, int);
extern struct kobject *fs_kobj;
#define MAX_RW_COUNT …
struct audit_names;
struct filename { … };
static_assert(…);
static inline struct mnt_idmap *file_mnt_idmap(const struct file *file)
{ … }
static inline bool is_idmapped_mnt(const struct vfsmount *mnt)
{ … }
extern long vfs_truncate(const struct path *, loff_t);
int do_truncate(struct mnt_idmap *, struct dentry *, loff_t start,
unsigned int time_attrs, struct file *filp);
extern int vfs_fallocate(struct file *file, int mode, loff_t offset,
loff_t len);
extern long do_sys_open(int dfd, const char __user *filename, int flags,
umode_t mode);
extern struct file *file_open_name(struct filename *, int, umode_t);
extern struct file *filp_open(const char *, int, umode_t);
extern struct file *file_open_root(const struct path *,
const char *, int, umode_t);
static inline struct file *file_open_root_mnt(struct vfsmount *mnt,
const char *name, int flags, umode_t mode)
{ … }
struct file *dentry_open(const struct path *path, int flags,
const struct cred *creds);
struct file *dentry_create(const struct path *path, int flags, umode_t mode,
const struct cred *cred);
struct path *backing_file_user_path(struct file *f);
static inline const struct path *file_user_path(struct file *f)
{ … }
static inline const struct inode *file_user_inode(struct file *f)
{ … }
static inline struct file *file_clone_open(struct file *file)
{ … }
extern int filp_close(struct file *, fl_owner_t id);
extern struct filename *getname_flags(const char __user *, int);
extern struct filename *getname_uflags(const char __user *, int);
extern struct filename *getname(const char __user *);
extern struct filename *getname_kernel(const char *);
extern void putname(struct filename *name);
extern int finish_open(struct file *file, struct dentry *dentry,
int (*open)(struct inode *, struct file *));
extern int finish_no_open(struct file *file, struct dentry *dentry);
static inline int finish_open_simple(struct file *file, int error)
{ … }
extern void __init vfs_caches_init_early(void);
extern void __init vfs_caches_init(void);
extern struct kmem_cache *names_cachep;
#define __getname() …
#define __putname(name) …
extern struct super_block *blockdev_superblock;
static inline bool sb_is_blkdev_sb(struct super_block *sb)
{ … }
void emergency_thaw_all(void);
extern int sync_filesystem(struct super_block *);
extern const struct file_operations def_blk_fops;
extern const struct file_operations def_chr_fops;
#define CHRDEV_MAJOR_MAX …
#define CHRDEV_MAJOR_DYN_END …
#define CHRDEV_MAJOR_DYN_EXT_START …
#define CHRDEV_MAJOR_DYN_EXT_END …
extern int alloc_chrdev_region(dev_t *, unsigned, unsigned, const char *);
extern int register_chrdev_region(dev_t, unsigned, const char *);
extern int __register_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name,
const struct file_operations *fops);
extern void __unregister_chrdev(unsigned int major, unsigned int baseminor,
unsigned int count, const char *name);
extern void unregister_chrdev_region(dev_t, unsigned);
extern void chrdev_show(struct seq_file *,off_t);
static inline int register_chrdev(unsigned int major, const char *name,
const struct file_operations *fops)
{ … }
static inline void unregister_chrdev(unsigned int major, const char *name)
{ … }
extern void init_special_inode(struct inode *, umode_t, dev_t);
extern void make_bad_inode(struct inode *);
extern bool is_bad_inode(struct inode *);
extern int __must_check file_fdatawait_range(struct file *file, loff_t lstart,
loff_t lend);
extern int __must_check file_check_and_advance_wb_err(struct file *file);
extern int __must_check file_write_and_wait_range(struct file *file,
loff_t start, loff_t end);
static inline int file_write_and_wait(struct file *file)
{ … }
extern int vfs_fsync_range(struct file *file, loff_t start, loff_t end,
int datasync);
extern int vfs_fsync(struct file *file, int datasync);
extern int sync_file_range(struct file *file, loff_t offset, loff_t nbytes,
unsigned int flags);
static inline bool iocb_is_dsync(const struct kiocb *iocb)
{ … }
static inline ssize_t generic_write_sync(struct kiocb *iocb, ssize_t count)
{ … }
extern void emergency_sync(void);
extern void emergency_remount(void);
#ifdef CONFIG_BLOCK
extern int bmap(struct inode *inode, sector_t *block);
#else
static inline int bmap(struct inode *inode, sector_t *block)
{
return -EINVAL;
}
#endif
int notify_change(struct mnt_idmap *, struct dentry *,
struct iattr *, struct inode **);
int inode_permission(struct mnt_idmap *, struct inode *, int);
int generic_permission(struct mnt_idmap *, struct inode *, int);
static inline int file_permission(struct file *file, int mask)
{ … }
static inline int path_permission(const struct path *path, int mask)
{ … }
int __check_sticky(struct mnt_idmap *idmap, struct inode *dir,
struct inode *inode);
static inline bool execute_ok(struct inode *inode)
{ … }
static inline bool inode_wrong_type(const struct inode *inode, umode_t mode)
{ … }
static inline void file_start_write(struct file *file)
{ … }
static inline bool file_start_write_trylock(struct file *file)
{ … }
static inline void file_end_write(struct file *file)
{ … }
static inline void kiocb_start_write(struct kiocb *iocb)
{ … }
static inline void kiocb_end_write(struct kiocb *iocb)
{ … }
static inline int get_write_access(struct inode *inode)
{ … }
static inline int deny_write_access(struct file *file)
{ … }
static inline void put_write_access(struct inode * inode)
{ … }
static inline void allow_write_access(struct file *file)
{ … }
static inline bool inode_is_open_for_write(const struct inode *inode)
{ … }
#if defined(CONFIG_IMA) || defined(CONFIG_FILE_LOCKING)
static inline void i_readcount_dec(struct inode *inode)
{ … }
static inline void i_readcount_inc(struct inode *inode)
{ … }
#else
static inline void i_readcount_dec(struct inode *inode)
{
return;
}
static inline void i_readcount_inc(struct inode *inode)
{
return;
}
#endif
extern int do_pipe_flags(int *, int);
extern ssize_t kernel_read(struct file *, void *, size_t, loff_t *);
ssize_t __kernel_read(struct file *file, void *buf, size_t count, loff_t *pos);
extern ssize_t kernel_write(struct file *, const void *, size_t, loff_t *);
extern ssize_t __kernel_write(struct file *, const void *, size_t, loff_t *);
extern struct file * open_exec(const char *);
extern bool is_subdir(struct dentry *, struct dentry *);
extern bool path_is_under(const struct path *, const struct path *);
extern char *file_path(struct file *, char *, int);
static inline bool is_dot_dotdot(const char *name, size_t len)
{ … }
#include <linux/err.h>
extern loff_t default_llseek(struct file *file, loff_t offset, int whence);
extern loff_t vfs_llseek(struct file *file, loff_t offset, int whence);
extern int inode_init_always(struct super_block *, struct inode *);
extern void inode_init_once(struct inode *);
extern void address_space_init_once(struct address_space *mapping);
extern struct inode * igrab(struct inode *);
extern ino_t iunique(struct super_block *, ino_t);
extern int inode_needs_sync(struct inode *inode);
extern int generic_delete_inode(struct inode *inode);
static inline int generic_drop_inode(struct inode *inode)
{ … }
extern void d_mark_dontcache(struct inode *inode);
extern struct inode *ilookup5_nowait(struct super_block *sb,
unsigned long hashval, int (*test)(struct inode *, void *),
void *data);
extern struct inode *ilookup5(struct super_block *sb, unsigned long hashval,
int (*test)(struct inode *, void *), void *data);
extern struct inode *ilookup(struct super_block *sb, unsigned long ino);
extern struct inode *inode_insert5(struct inode *inode, unsigned long hashval,
int (*test)(struct inode *, void *),
int (*set)(struct inode *, void *),
void *data);
struct inode *iget5_locked(struct super_block *, unsigned long,
int (*test)(struct inode *, void *),
int (*set)(struct inode *, void *), void *);
struct inode *iget5_locked_rcu(struct super_block *, unsigned long,
int (*test)(struct inode *, void *),
int (*set)(struct inode *, void *), void *);
extern struct inode * iget_locked(struct super_block *, unsigned long);
extern struct inode *find_inode_nowait(struct super_block *,
unsigned long,
int (*match)(struct inode *,
unsigned long, void *),
void *data);
extern struct inode *find_inode_rcu(struct super_block *, unsigned long,
int (*)(struct inode *, void *), void *);
extern struct inode *find_inode_by_ino_rcu(struct super_block *, unsigned long);
extern int insert_inode_locked4(struct inode *, unsigned long, int (*test)(struct inode *, void *), void *);
extern int insert_inode_locked(struct inode *);
#ifdef CONFIG_DEBUG_LOCK_ALLOC
extern void lockdep_annotate_inode_mutex_key(struct inode *inode);
#else
static inline void lockdep_annotate_inode_mutex_key(struct inode *inode) { };
#endif
extern void unlock_new_inode(struct inode *);
extern void discard_new_inode(struct inode *);
extern unsigned int get_next_ino(void);
extern void evict_inodes(struct super_block *sb);
void dump_mapping(const struct address_space *);
static inline bool is_zero_ino(ino_t ino)
{ … }
extern void __iget(struct inode * inode);
extern void iget_failed(struct inode *);
extern void clear_inode(struct inode *);
extern void __destroy_inode(struct inode *);
extern struct inode *new_inode_pseudo(struct super_block *sb);
extern struct inode *new_inode(struct super_block *sb);
extern void free_inode_nonrcu(struct inode *inode);
extern int setattr_should_drop_suidgid(struct mnt_idmap *, struct inode *);
extern int file_remove_privs_flags(struct file *file, unsigned int flags);
extern int file_remove_privs(struct file *);
int setattr_should_drop_sgid(struct mnt_idmap *idmap,
const struct inode *inode);
#define alloc_inode_sb(_sb, _cache, _gfp) …
extern void __insert_inode_hash(struct inode *, unsigned long hashval);
static inline void insert_inode_hash(struct inode *inode)
{ … }
extern void __remove_inode_hash(struct inode *);
static inline void remove_inode_hash(struct inode *inode)
{ … }
extern void inode_sb_list_add(struct inode *inode);
extern void inode_add_lru(struct inode *inode);
extern int sb_set_blocksize(struct super_block *, int);
extern int sb_min_blocksize(struct super_block *, int);
extern int generic_file_mmap(struct file *, struct vm_area_struct *);
extern int generic_file_readonly_mmap(struct file *, struct vm_area_struct *);
extern ssize_t generic_write_checks(struct kiocb *, struct iov_iter *);
int generic_write_checks_count(struct kiocb *iocb, loff_t *count);
extern int generic_write_check_limits(struct file *file, loff_t pos,
loff_t *count);
extern int generic_file_rw_checks(struct file *file_in, struct file *file_out);
ssize_t filemap_read(struct kiocb *iocb, struct iov_iter *to,
ssize_t already_read);
extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
extern ssize_t __generic_file_write_iter(struct kiocb *, struct iov_iter *);
extern ssize_t generic_file_write_iter(struct kiocb *, struct iov_iter *);
extern ssize_t generic_file_direct_write(struct kiocb *, struct iov_iter *);
ssize_t generic_perform_write(struct kiocb *, struct iov_iter *);
ssize_t direct_write_fallback(struct kiocb *iocb, struct iov_iter *iter,
ssize_t direct_written, ssize_t buffered_written);
ssize_t vfs_iter_read(struct file *file, struct iov_iter *iter, loff_t *ppos,
rwf_t flags);
ssize_t vfs_iter_write(struct file *file, struct iov_iter *iter, loff_t *ppos,
rwf_t flags);
ssize_t vfs_iocb_iter_read(struct file *file, struct kiocb *iocb,
struct iov_iter *iter);
ssize_t vfs_iocb_iter_write(struct file *file, struct kiocb *iocb,
struct iov_iter *iter);
ssize_t filemap_splice_read(struct file *in, loff_t *ppos,
struct pipe_inode_info *pipe,
size_t len, unsigned int flags);
ssize_t copy_splice_read(struct file *in, loff_t *ppos,
struct pipe_inode_info *pipe,
size_t len, unsigned int flags);
extern ssize_t iter_file_splice_write(struct pipe_inode_info *,
struct file *, loff_t *, size_t, unsigned int);
extern void
file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
extern loff_t noop_llseek(struct file *file, loff_t offset, int whence);
#define no_llseek …
extern loff_t vfs_setpos(struct file *file, loff_t offset, loff_t maxsize);
extern loff_t generic_file_llseek(struct file *file, loff_t offset, int whence);
extern loff_t generic_file_llseek_size(struct file *file, loff_t offset,
int whence, loff_t maxsize, loff_t eof);
extern loff_t fixed_size_llseek(struct file *file, loff_t offset,
int whence, loff_t size);
extern loff_t no_seek_end_llseek_size(struct file *, loff_t, int, loff_t);
extern loff_t no_seek_end_llseek(struct file *, loff_t, int);
int rw_verify_area(int, struct file *, const loff_t *, size_t);
extern int generic_file_open(struct inode * inode, struct file * filp);
extern int nonseekable_open(struct inode * inode, struct file * filp);
extern int stream_open(struct inode * inode, struct file * filp);
#ifdef CONFIG_BLOCK
dio_submit_t;
enum { … };
ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
struct block_device *bdev, struct iov_iter *iter,
get_block_t get_block,
dio_iodone_t end_io,
int flags);
static inline ssize_t blockdev_direct_IO(struct kiocb *iocb,
struct inode *inode,
struct iov_iter *iter,
get_block_t get_block)
{ … }
#endif
void inode_dio_wait(struct inode *inode);
static inline void inode_dio_begin(struct inode *inode)
{ … }
static inline void inode_dio_end(struct inode *inode)
{ … }
extern void inode_set_flags(struct inode *inode, unsigned int flags,
unsigned int mask);
extern const struct file_operations generic_ro_fops;
#define special_file(m) …
extern int readlink_copy(char __user *, int, const char *);
extern int page_readlink(struct dentry *, char __user *, int);
extern const char *page_get_link(struct dentry *, struct inode *,
struct delayed_call *);
extern void page_put_link(void *);
extern int page_symlink(struct inode *inode, const char *symname, int len);
extern const struct inode_operations page_symlink_inode_operations;
extern void kfree_link(void *);
void generic_fillattr(struct mnt_idmap *, u32, struct inode *, struct kstat *);
void generic_fill_statx_attr(struct inode *inode, struct kstat *stat);
void generic_fill_statx_atomic_writes(struct kstat *stat,
unsigned int unit_min,
unsigned int unit_max);
extern int vfs_getattr_nosec(const struct path *, struct kstat *, u32, unsigned int);
extern int vfs_getattr(const struct path *, struct kstat *, u32, unsigned int);
void __inode_add_bytes(struct inode *inode, loff_t bytes);
void inode_add_bytes(struct inode *inode, loff_t bytes);
void __inode_sub_bytes(struct inode *inode, loff_t bytes);
void inode_sub_bytes(struct inode *inode, loff_t bytes);
static inline loff_t __inode_get_bytes(struct inode *inode)
{ … }
loff_t inode_get_bytes(struct inode *inode);
void inode_set_bytes(struct inode *inode, loff_t bytes);
const char *simple_get_link(struct dentry *, struct inode *,
struct delayed_call *);
extern const struct inode_operations simple_symlink_inode_operations;
extern int iterate_dir(struct file *, struct dir_context *);
int vfs_fstatat(int dfd, const char __user *filename, struct kstat *stat,
int flags);
int vfs_fstat(int fd, struct kstat *stat);
static inline int vfs_stat(const char __user *filename, struct kstat *stat)
{ … }
static inline int vfs_lstat(const char __user *name, struct kstat *stat)
{ … }
extern const char *vfs_get_link(struct dentry *, struct delayed_call *);
extern int vfs_readlink(struct dentry *, char __user *, int);
extern struct file_system_type *get_filesystem(struct file_system_type *fs);
extern void put_filesystem(struct file_system_type *fs);
extern struct file_system_type *get_fs_type(const char *name);
extern void drop_super(struct super_block *sb);
extern void drop_super_exclusive(struct super_block *sb);
extern void iterate_supers(void (*)(struct super_block *, void *), void *);
extern void iterate_supers_type(struct file_system_type *,
void (*)(struct super_block *, void *), void *);
extern int dcache_dir_open(struct inode *, struct file *);
extern int dcache_dir_close(struct inode *, struct file *);
extern loff_t dcache_dir_lseek(struct file *, loff_t, int);
extern int dcache_readdir(struct file *, struct dir_context *);
extern int simple_setattr(struct mnt_idmap *, struct dentry *,
struct iattr *);
extern int simple_getattr(struct mnt_idmap *, const struct path *,
struct kstat *, u32, unsigned int);
extern int simple_statfs(struct dentry *, struct kstatfs *);
extern int simple_open(struct inode *inode, struct file *file);
extern int simple_link(struct dentry *, struct inode *, struct dentry *);
extern int simple_unlink(struct inode *, struct dentry *);
extern int simple_rmdir(struct inode *, struct dentry *);
void simple_rename_timestamp(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry);
extern int simple_rename_exchange(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry);
extern int simple_rename(struct mnt_idmap *, struct inode *,
struct dentry *, struct inode *, struct dentry *,
unsigned int);
extern void simple_recursive_removal(struct dentry *,
void (*callback)(struct dentry *));
extern int noop_fsync(struct file *, loff_t, loff_t, int);
extern ssize_t noop_direct_IO(struct kiocb *iocb, struct iov_iter *iter);
extern int simple_empty(struct dentry *);
extern int simple_write_begin(struct file *file, struct address_space *mapping,
loff_t pos, unsigned len,
struct page **pagep, void **fsdata);
extern const struct address_space_operations ram_aops;
extern int always_delete_dentry(const struct dentry *);
extern struct inode *alloc_anon_inode(struct super_block *);
extern int simple_nosetlease(struct file *, int, struct file_lease **, void **);
extern const struct dentry_operations simple_dentry_operations;
extern struct dentry *simple_lookup(struct inode *, struct dentry *, unsigned int flags);
extern ssize_t generic_read_dir(struct file *, char __user *, size_t, loff_t *);
extern const struct file_operations simple_dir_operations;
extern const struct inode_operations simple_dir_inode_operations;
extern void make_empty_dir_inode(struct inode *inode);
extern bool is_empty_dir_inode(struct inode *inode);
struct tree_descr { … };
struct dentry *d_alloc_name(struct dentry *, const char *);
extern int simple_fill_super(struct super_block *, unsigned long,
const struct tree_descr *);
extern int simple_pin_fs(struct file_system_type *, struct vfsmount **mount, int *count);
extern void simple_release_fs(struct vfsmount **mount, int *count);
extern ssize_t simple_read_from_buffer(void __user *to, size_t count,
loff_t *ppos, const void *from, size_t available);
extern ssize_t simple_write_to_buffer(void *to, size_t available, loff_t *ppos,
const void __user *from, size_t count);
struct offset_ctx { … };
void simple_offset_init(struct offset_ctx *octx);
int simple_offset_add(struct offset_ctx *octx, struct dentry *dentry);
void simple_offset_remove(struct offset_ctx *octx, struct dentry *dentry);
int simple_offset_empty(struct dentry *dentry);
int simple_offset_rename(struct inode *old_dir, struct dentry *old_dentry,
struct inode *new_dir, struct dentry *new_dentry);
int simple_offset_rename_exchange(struct inode *old_dir,
struct dentry *old_dentry,
struct inode *new_dir,
struct dentry *new_dentry);
void simple_offset_destroy(struct offset_ctx *octx);
extern const struct file_operations simple_offset_dir_operations;
extern int __generic_file_fsync(struct file *, loff_t, loff_t, int);
extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
extern int generic_check_addressable(unsigned, u64);
extern void generic_set_sb_d_ops(struct super_block *sb);
extern int generic_ci_match(const struct inode *parent,
const struct qstr *name,
const struct qstr *folded_name,
const u8 *de_name, u32 de_name_len);
static inline bool sb_has_encoding(const struct super_block *sb)
{ … }
int may_setattr(struct mnt_idmap *idmap, struct inode *inode,
unsigned int ia_valid);
int setattr_prepare(struct mnt_idmap *, struct dentry *, struct iattr *);
extern int inode_newsize_ok(const struct inode *, loff_t offset);
void setattr_copy(struct mnt_idmap *, struct inode *inode,
const struct iattr *attr);
extern int file_update_time(struct file *file);
static inline bool vma_is_dax(const struct vm_area_struct *vma)
{ … }
static inline bool vma_is_fsdax(struct vm_area_struct *vma)
{ … }
static inline int iocb_flags(struct file *file)
{ … }
static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags,
int rw_type)
{ … }
struct simple_transaction_argresp { … };
#define SIMPLE_TRANSACTION_LIMIT …
char *simple_transaction_get(struct file *file, const char __user *buf,
size_t size);
ssize_t simple_transaction_read(struct file *file, char __user *buf,
size_t size, loff_t *pos);
int simple_transaction_release(struct inode *inode, struct file *file);
void simple_transaction_set(struct file *file, size_t n);
#define DEFINE_SIMPLE_ATTRIBUTE_XSIGNED(__fops, __get, __set, __fmt, __is_signed) …
#define DEFINE_SIMPLE_ATTRIBUTE(__fops, __get, __set, __fmt) …
#define DEFINE_SIMPLE_ATTRIBUTE_SIGNED(__fops, __get, __set, __fmt) …
static inline __printf(1, 2)
void __simple_attr_check_format(const char *fmt, ...)
{ … }
int simple_attr_open(struct inode *inode, struct file *file,
int (*get)(void *, u64 *), int (*set)(void *, u64),
const char *fmt);
int simple_attr_release(struct inode *inode, struct file *file);
ssize_t simple_attr_read(struct file *file, char __user *buf,
size_t len, loff_t *ppos);
ssize_t simple_attr_write(struct file *file, const char __user *buf,
size_t len, loff_t *ppos);
ssize_t simple_attr_write_signed(struct file *file, const char __user *buf,
size_t len, loff_t *ppos);
struct ctl_table;
int __init list_bdev_fs_names(char *buf, size_t size);
#define __FMODE_EXEC …
#define __FMODE_NONOTIFY …
#define ACC_MODE(x) …
#define OPEN_FMODE(flag) …
static inline bool is_sxid(umode_t mode)
{ … }
static inline int check_sticky(struct mnt_idmap *idmap,
struct inode *dir, struct inode *inode)
{ … }
static inline void inode_has_no_xattr(struct inode *inode)
{ … }
static inline bool is_root_inode(struct inode *inode)
{ … }
static inline bool dir_emit(struct dir_context *ctx,
const char *name, int namelen,
u64 ino, unsigned type)
{ … }
static inline bool dir_emit_dot(struct file *file, struct dir_context *ctx)
{ … }
static inline bool dir_emit_dotdot(struct file *file, struct dir_context *ctx)
{ … }
static inline bool dir_emit_dots(struct file *file, struct dir_context *ctx)
{ … }
static inline bool dir_relax(struct inode *inode)
{ … }
static inline bool dir_relax_shared(struct inode *inode)
{ … }
extern bool path_noexec(const struct path *path);
extern void inode_nohighmem(struct inode *inode);
extern int vfs_fadvise(struct file *file, loff_t offset, loff_t len,
int advice);
extern int generic_fadvise(struct file *file, loff_t offset, loff_t len,
int advice);
static inline bool vfs_empty_path(int dfd, const char __user *path)
{ … }
bool generic_atomic_write_valid(struct iov_iter *iter, loff_t pos);
#endif