Merge tag 'vfs-5.10-merge-1' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[linux-2.6-microblaze.git] / include / linux / fs.h
index eea754a..16e3789 100644 (file)
@@ -178,14 +178,6 @@ typedef int (dio_iodone_t)(struct kiocb *iocb, loff_t offset,
 /* File supports async buffered reads */
 #define FMODE_BUF_RASYNC       ((__force fmode_t)0x40000000)
 
-/*
- * Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
- * that indicates that they should check the contents of the iovec are
- * valid, but not check the memory that the iovec elements
- * points too.
- */
-#define CHECK_IOVEC_ONLY -1
-
 /*
  * Attribute flags.  These should be or-ed together to figure out what
  * has been changed!
@@ -310,17 +302,20 @@ enum rw_hint {
        WRITE_LIFE_EXTREME      = RWH_WRITE_LIFE_EXTREME,
 };
 
-#define IOCB_EVENTFD           (1 << 0)
-#define IOCB_APPEND            (1 << 1)
-#define IOCB_DIRECT            (1 << 2)
-#define IOCB_HIPRI             (1 << 3)
-#define IOCB_DSYNC             (1 << 4)
-#define IOCB_SYNC              (1 << 5)
-#define IOCB_WRITE             (1 << 6)
-#define IOCB_NOWAIT            (1 << 7)
+/* Match RWF_* bits to IOCB bits */
+#define IOCB_HIPRI             (__force int) RWF_HIPRI
+#define IOCB_DSYNC             (__force int) RWF_DSYNC
+#define IOCB_SYNC              (__force int) RWF_SYNC
+#define IOCB_NOWAIT            (__force int) RWF_NOWAIT
+#define IOCB_APPEND            (__force int) RWF_APPEND
+
+/* non-RWF related bits - start at 16 */
+#define IOCB_EVENTFD           (1 << 16)
+#define IOCB_DIRECT            (1 << 17)
+#define IOCB_WRITE             (1 << 18)
 /* iocb->ki_waitq is valid */
-#define IOCB_WAITQ             (1 << 8)
-#define IOCB_NOIO              (1 << 9)
+#define IOCB_WAITQ             (1 << 19)
+#define IOCB_NOIO              (1 << 20)
 
 struct kiocb {
        struct file             *ki_filp;
@@ -1371,6 +1366,12 @@ extern int send_sigurg(struct fown_struct *fown);
 #define SB_ACTIVE      (1<<30)
 #define SB_NOUSER      (1<<31)
 
+/* These flags relate to encoding and casefolding */
+#define SB_ENC_STRICT_MODE_FL  (1 << 0)
+
+#define sb_has_strict_encoding(sb) \
+       (sb->s_encoding_flags & SB_ENC_STRICT_MODE_FL)
+
 /*
  *     Umount options
  */
@@ -1385,7 +1386,7 @@ extern int send_sigurg(struct fown_struct *fown);
 #define SB_I_CGROUPWB  0x00000001      /* cgroup-aware writeback enabled */
 #define SB_I_NOEXEC    0x00000002      /* Ignore executables on this fs */
 #define SB_I_NODEV     0x00000004      /* Ignore devices on this fs */
-#define SB_I_MULTIROOT 0x00000008      /* Multiple roots to the dentry tree */
+#define SB_I_STABLE_WRITES 0x00000008  /* don't modify blks until WB is done */
 
 /* sb->s_iflags to limit user namespace mounts */
 #define SB_I_USERNS_VISIBLE            0x00000010 /* fstype already mounted */
@@ -1440,6 +1441,10 @@ struct super_block {
 #endif
 #ifdef CONFIG_FS_VERITY
        const struct fsverity_operations *s_vop;
+#endif
+#ifdef CONFIG_UNICODE
+       struct unicode_map *s_encoding;
+       __u16 s_encoding_flags;
 #endif
        struct hlist_bl_head    s_roots;        /* alternate root dentries for NFS */
        struct list_head        s_mounts;       /* list of mounts; _not_ for fs use */
@@ -1887,15 +1892,8 @@ static inline int call_mmap(struct file *file, struct vm_area_struct *vma)
        return file->f_op->mmap(file, vma);
 }
 
-ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
-                             unsigned long nr_segs, unsigned long fast_segs,
-                             struct iovec *fast_pointer,
-                             struct iovec **ret_pointer);
-
 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_readv(struct file *, const struct iovec __user *,
-               unsigned long, loff_t *, rwf_t);
 extern ssize_t vfs_copy_file_range(struct file *, loff_t , struct file *,
                                   loff_t, size_t, unsigned int);
 extern ssize_t generic_copy_file_range(struct file *file_in, loff_t pos_in,
@@ -2219,6 +2217,7 @@ struct file_system_type {
 #define FS_HAS_SUBTYPE         4
 #define FS_USERNS_MOUNT                8       /* Can be mounted by userns root */
 #define FS_DISALLOW_NOTIFY_PERM        16      /* Disable fanotify permission events */
+#define FS_THP_SUPPORT         8192    /* Remove once all fs converted */
 #define FS_RENAME_DOES_D_MOVE  32768   /* FS will handle d_move() during rename() internally. */
        int (*init_fs_context)(struct fs_context *);
        const struct fs_parameter_spec *parameters;
@@ -2591,6 +2590,10 @@ extern bool is_bad_inode(struct inode *);
 unsigned long invalidate_mapping_pages(struct address_space *mapping,
                                        pgoff_t start, pgoff_t end);
 
+void invalidate_mapping_pagevec(struct address_space *mapping,
+                               pgoff_t start, pgoff_t end,
+                               unsigned long *nr_pagevec);
+
 static inline void invalidate_remote_inode(struct inode *inode)
 {
        if (S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) ||
@@ -2702,33 +2705,6 @@ static inline errseq_t file_sample_sb_err(struct file *file)
        return errseq_sample(&file->f_path.dentry->d_sb->s_wb_err);
 }
 
-static inline int filemap_nr_thps(struct address_space *mapping)
-{
-#ifdef CONFIG_READ_ONLY_THP_FOR_FS
-       return atomic_read(&mapping->nr_thps);
-#else
-       return 0;
-#endif
-}
-
-static inline void filemap_nr_thps_inc(struct address_space *mapping)
-{
-#ifdef CONFIG_READ_ONLY_THP_FOR_FS
-       atomic_inc(&mapping->nr_thps);
-#else
-       WARN_ON_ONCE(1);
-#endif
-}
-
-static inline void filemap_nr_thps_dec(struct address_space *mapping)
-{
-#ifdef CONFIG_READ_ONLY_THP_FOR_FS
-       atomic_dec(&mapping->nr_thps);
-#else
-       WARN_ON_ONCE(1);
-#endif
-}
-
 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);
@@ -2858,45 +2834,6 @@ static inline void i_readcount_inc(struct inode *inode)
 #endif
 extern int do_pipe_flags(int *, int);
 
-#define __kernel_read_file_id(id) \
-       id(UNKNOWN, unknown)            \
-       id(FIRMWARE, firmware)          \
-       id(FIRMWARE_PREALLOC_BUFFER, firmware)  \
-       id(FIRMWARE_EFI_EMBEDDED, firmware)     \
-       id(MODULE, kernel-module)               \
-       id(KEXEC_IMAGE, kexec-image)            \
-       id(KEXEC_INITRAMFS, kexec-initramfs)    \
-       id(POLICY, security-policy)             \
-       id(X509_CERTIFICATE, x509-certificate)  \
-       id(MAX_ID, )
-
-#define __fid_enumify(ENUM, dummy) READING_ ## ENUM,
-#define __fid_stringify(dummy, str) #str,
-
-enum kernel_read_file_id {
-       __kernel_read_file_id(__fid_enumify)
-};
-
-static const char * const kernel_read_file_str[] = {
-       __kernel_read_file_id(__fid_stringify)
-};
-
-static inline const char *kernel_read_file_id_str(enum kernel_read_file_id id)
-{
-       if ((unsigned)id >= READING_MAX_ID)
-               return kernel_read_file_str[READING_UNKNOWN];
-
-       return kernel_read_file_str[id];
-}
-
-extern int kernel_read_file(struct file *, void **, loff_t *, loff_t,
-                           enum kernel_read_file_id);
-extern int kernel_read_file_from_path(const char *, void **, loff_t *, loff_t,
-                                     enum kernel_read_file_id);
-extern int kernel_read_file_from_path_initns(const char *, void **, loff_t *, loff_t,
-                                            enum kernel_read_file_id);
-extern int kernel_read_file_from_fd(int, void **, loff_t *, loff_t,
-                                   enum kernel_read_file_id);
 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 *);
@@ -3009,15 +2946,9 @@ 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 *);
-extern int generic_remap_checks(struct file *file_in, loff_t pos_in,
-                               struct file *file_out, loff_t pos_out,
-                               loff_t *count, unsigned int remap_flags);
 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);
-extern int generic_copy_file_checks(struct file *file_in, loff_t pos_in,
-                                   struct file *file_out, loff_t pos_out,
-                                   size_t *count, unsigned int flags);
 extern ssize_t generic_file_buffered_read(struct kiocb *iocb,
                struct iov_iter *to, ssize_t already_read);
 extern ssize_t generic_file_read_iter(struct kiocb *, struct iov_iter *);
@@ -3081,8 +3012,6 @@ enum {
        DIO_SKIP_HOLES  = 0x02,
 };
 
-void dio_end_io(struct bio *bio);
-
 ssize_t __blockdev_direct_IO(struct kiocb *iocb, struct inode *inode,
                             struct block_device *bdev, struct iov_iter *iter,
                             get_block_t get_block,
@@ -3264,6 +3193,12 @@ extern int generic_file_fsync(struct file *, loff_t, loff_t, int);
 
 extern int generic_check_addressable(unsigned, u64);
 
+#ifdef CONFIG_UNICODE
+extern int generic_ci_d_hash(const struct dentry *dentry, struct qstr *str);
+extern int generic_ci_d_compare(const struct dentry *dentry, unsigned int len,
+                               const char *str, const struct qstr *name);
+#endif
+
 #ifdef CONFIG_MIGRATION
 extern int buffer_migrate_page(struct address_space *,
                                struct page *, struct page *,
@@ -3319,6 +3254,9 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
 {
        int kiocb_flags = 0;
 
+       /* make sure there's no overlap between RWF and private IOCB flags */
+       BUILD_BUG_ON((__force int) RWF_SUPPORTED & IOCB_EVENTFD);
+
        if (!flags)
                return 0;
        if (unlikely(flags & ~RWF_SUPPORTED))
@@ -3327,16 +3265,11 @@ static inline int kiocb_set_rw_flags(struct kiocb *ki, rwf_t flags)
        if (flags & RWF_NOWAIT) {
                if (!(ki->ki_filp->f_mode & FMODE_NOWAIT))
                        return -EOPNOTSUPP;
-               kiocb_flags |= IOCB_NOWAIT | IOCB_NOIO;
+               kiocb_flags |= IOCB_NOIO;
        }
-       if (flags & RWF_HIPRI)
-               kiocb_flags |= IOCB_HIPRI;
-       if (flags & RWF_DSYNC)
-               kiocb_flags |= IOCB_DSYNC;
+       kiocb_flags |= (__force int) (flags & RWF_SUPPORTED);
        if (flags & RWF_SYNC)
-               kiocb_flags |= (IOCB_DSYNC | IOCB_SYNC);
-       if (flags & RWF_APPEND)
-               kiocb_flags |= IOCB_APPEND;
+               kiocb_flags |= IOCB_DSYNC;
 
        ki->ki_flags |= kiocb_flags;
        return 0;
@@ -3516,15 +3449,6 @@ extern int vfs_fadvise(struct file *file, loff_t offset, loff_t len,
 extern int generic_fadvise(struct file *file, loff_t offset, loff_t len,
                           int advice);
 
-#if defined(CONFIG_IO_URING)
-extern struct sock *io_uring_get_socket(struct file *file);
-#else
-static inline struct sock *io_uring_get_socket(struct file *file)
-{
-       return NULL;
-}
-#endif
-
 int vfs_ioc_setflags_prepare(struct inode *inode, unsigned int oldflags,
                             unsigned int flags);