mirror of https://github.com/OpenIPC/firmware.git
173 lines
7.5 KiB
Diff
173 lines
7.5 KiB
Diff
diff -drupN a/include/linux/fs.h b/include/linux/fs.h
|
|
--- a/include/linux/fs.h 2018-08-06 17:23:04.000000000 +0300
|
|
+++ b/include/linux/fs.h 2022-06-12 05:28:14.000000000 +0300
|
|
@@ -21,6 +21,7 @@
|
|
#include <linux/mm_types.h>
|
|
#include <linux/capability.h>
|
|
#include <linux/semaphore.h>
|
|
+#include <linux/fcntl.h>
|
|
#include <linux/fiemap.h>
|
|
#include <linux/rculist_bl.h>
|
|
#include <linux/atomic.h>
|
|
@@ -144,6 +145,9 @@ typedef int (dio_iodone_t)(struct kiocb
|
|
/* File was opened by fanotify and shouldn't generate fanotify events */
|
|
#define FMODE_NONOTIFY ((__force fmode_t)0x4000000)
|
|
|
|
+/* File is capable of returning -EAGAIN if I/O will block */
|
|
+#define FMODE_NOWAIT ((__force fmode_t)0x8000000)
|
|
+
|
|
/*
|
|
* Flag for rw_copy_check_uvector and compat_rw_copy_check_uvector
|
|
* that indicates that they should check the contents of the iovec are
|
|
@@ -316,6 +320,18 @@ struct page;
|
|
struct address_space;
|
|
struct writeback_control;
|
|
|
|
+/*
|
|
+ * Write life time hint values.
|
|
+ */
|
|
+enum rw_hint {
|
|
+ WRITE_LIFE_NOT_SET = 0,
|
|
+ WRITE_LIFE_NONE = RWH_WRITE_LIFE_NONE,
|
|
+ WRITE_LIFE_SHORT = RWH_WRITE_LIFE_SHORT,
|
|
+ WRITE_LIFE_MEDIUM = RWH_WRITE_LIFE_MEDIUM,
|
|
+ WRITE_LIFE_LONG = RWH_WRITE_LIFE_LONG,
|
|
+ WRITE_LIFE_EXTREME = RWH_WRITE_LIFE_EXTREME,
|
|
+};
|
|
+
|
|
#define IOCB_EVENTFD (1 << 0)
|
|
#define IOCB_APPEND (1 << 1)
|
|
#define IOCB_DIRECT (1 << 2)
|
|
@@ -323,6 +339,7 @@ struct writeback_control;
|
|
#define IOCB_DSYNC (1 << 4)
|
|
#define IOCB_SYNC (1 << 5)
|
|
#define IOCB_WRITE (1 << 6)
|
|
+#define IOCB_NOWAIT (1 << 7)
|
|
|
|
struct kiocb {
|
|
struct file *ki_filp;
|
|
@@ -330,6 +347,7 @@ struct kiocb {
|
|
void (*ki_complete)(struct kiocb *iocb, long ret, long ret2);
|
|
void *private;
|
|
int ki_flags;
|
|
+ enum rw_hint ki_hint;
|
|
};
|
|
|
|
static inline bool is_sync_kiocb(struct kiocb *kiocb)
|
|
@@ -643,6 +661,7 @@ struct inode {
|
|
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
|
|
unsigned short i_bytes;
|
|
unsigned int i_blkbits;
|
|
+ enum rw_hint i_write_hint;
|
|
blkcnt_t i_blocks;
|
|
|
|
#ifdef __NEED_I_SIZE_ORDERED
|
|
@@ -1070,8 +1089,6 @@ struct file_lock_context {
|
|
#define OFFT_OFFSET_MAX INT_LIMIT(off_t)
|
|
#endif
|
|
|
|
-#include <linux/fcntl.h>
|
|
-
|
|
extern void send_sigio(struct fown_struct *fown, int fd, int band);
|
|
|
|
/*
|
|
@@ -1610,13 +1627,21 @@ extern bool inode_owner_or_capable(const
|
|
* VFS helper functions..
|
|
*/
|
|
extern int vfs_create(struct inode *, struct dentry *, umode_t, bool);
|
|
+extern int vfs_create2(struct vfsmount *, struct inode *, struct dentry *, umode_t, bool);
|
|
extern int vfs_mkdir(struct inode *, struct dentry *, umode_t);
|
|
+extern int vfs_mkdir2(struct vfsmount *, struct inode *, struct dentry *, umode_t);
|
|
extern int vfs_mknod(struct inode *, struct dentry *, umode_t, dev_t);
|
|
+extern int vfs_mknod2(struct vfsmount *, struct inode *, struct dentry *, umode_t, dev_t);
|
|
extern int vfs_symlink(struct inode *, struct dentry *, const char *);
|
|
+extern int vfs_symlink2(struct vfsmount *, struct inode *, struct dentry *, const char *);
|
|
extern int vfs_link(struct dentry *, struct inode *, struct dentry *, struct inode **);
|
|
+extern int vfs_link2(struct vfsmount *, struct dentry *, struct inode *, struct dentry *, struct inode **);
|
|
extern int vfs_rmdir(struct inode *, struct dentry *);
|
|
+extern int vfs_rmdir2(struct vfsmount *, struct inode *, struct dentry *);
|
|
extern int vfs_unlink(struct inode *, struct dentry *, struct inode **);
|
|
+extern int vfs_unlink2(struct vfsmount *, struct inode *, struct dentry *, struct inode **);
|
|
extern int vfs_rename(struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
|
|
+extern int vfs_rename2(struct vfsmount *, struct inode *, struct dentry *, struct inode *, struct dentry *, struct inode **, unsigned int);
|
|
extern int vfs_whiteout(struct inode *, struct dentry *);
|
|
|
|
/*
|
|
@@ -1744,6 +1769,7 @@ struct inode_operations {
|
|
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
|
|
const char * (*get_link) (struct dentry *, struct inode *, struct delayed_call *);
|
|
int (*permission) (struct inode *, int);
|
|
+ int (*permission2) (struct vfsmount *, struct inode *, int);
|
|
struct posix_acl * (*get_acl)(struct inode *, int);
|
|
|
|
int (*readlink) (struct dentry *, char __user *,int);
|
|
@@ -1758,6 +1784,7 @@ struct inode_operations {
|
|
int (*rename) (struct inode *, struct dentry *,
|
|
struct inode *, struct dentry *, unsigned int);
|
|
int (*setattr) (struct dentry *, struct iattr *);
|
|
+ int (*setattr2) (struct vfsmount *, struct dentry *, struct iattr *);
|
|
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
|
|
ssize_t (*listxattr) (struct dentry *, char *, size_t);
|
|
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start,
|
|
@@ -1806,9 +1833,13 @@ struct super_operations {
|
|
int (*unfreeze_fs) (struct super_block *);
|
|
int (*statfs) (struct dentry *, struct kstatfs *);
|
|
int (*remount_fs) (struct super_block *, int *, char *);
|
|
+ int (*remount_fs2) (struct vfsmount *, struct super_block *, int *, char *);
|
|
+ void *(*clone_mnt_data) (void *);
|
|
+ void (*copy_mnt_data) (void *, void *);
|
|
void (*umount_begin) (struct super_block *);
|
|
|
|
int (*show_options)(struct seq_file *, struct dentry *);
|
|
+ int (*show_options2)(struct vfsmount *,struct seq_file *, struct dentry *);
|
|
int (*show_devname)(struct seq_file *, struct dentry *);
|
|
int (*show_path)(struct seq_file *, struct dentry *);
|
|
int (*show_stats)(struct seq_file *, struct dentry *);
|
|
@@ -1845,6 +1876,7 @@ struct super_operations {
|
|
#else
|
|
#define S_DAX 0 /* Make all the DAX code disappear */
|
|
#endif
|
|
+#define S_ENCRYPTED 16384 /* Encrypted file (using fs/crypto/) */
|
|
|
|
/*
|
|
* Note that nosuid etc flags are inode-specific: setting some file-system
|
|
@@ -1883,6 +1915,7 @@ struct super_operations {
|
|
#define IS_AUTOMOUNT(inode) ((inode)->i_flags & S_AUTOMOUNT)
|
|
#define IS_NOSEC(inode) ((inode)->i_flags & S_NOSEC)
|
|
#define IS_DAX(inode) ((inode)->i_flags & S_DAX)
|
|
+#define IS_ENCRYPTED(inode) ((inode)->i_flags & S_ENCRYPTED)
|
|
|
|
#define IS_WHITEOUT(inode) (S_ISCHR(inode->i_mode) && \
|
|
(inode)->i_rdev == WHITEOUT_DEV)
|
|
@@ -2042,6 +2075,9 @@ struct file_system_type {
|
|
#define FS_RENAME_DOES_D_MOVE 32768 /* FS will handle d_move() during rename() internally. */
|
|
struct dentry *(*mount) (struct file_system_type *, int,
|
|
const char *, void *);
|
|
+ struct dentry *(*mount2) (struct vfsmount *, struct file_system_type *, int,
|
|
+ const char *, void *);
|
|
+ void *(*alloc_mnt_data) (void);
|
|
void (*kill_sb) (struct super_block *);
|
|
struct module *owner;
|
|
struct file_system_type * next;
|
|
@@ -2340,6 +2376,8 @@ struct filename {
|
|
extern long vfs_truncate(const struct path *, loff_t);
|
|
extern int do_truncate(struct dentry *, loff_t start, unsigned int time_attrs,
|
|
struct file *filp);
|
|
+extern int do_truncate2(struct vfsmount *, 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,
|
|
@@ -2582,8 +2620,11 @@ extern void emergency_remount(void);
|
|
extern sector_t bmap(struct inode *, sector_t);
|
|
#endif
|
|
extern int notify_change(struct dentry *, struct iattr *, struct inode **);
|
|
+extern int notify_change2(struct vfsmount *, struct dentry *, struct iattr *, struct inode **);
|
|
extern int inode_permission(struct inode *, int);
|
|
+extern int inode_permission2(struct vfsmount *, struct inode *, int);
|
|
extern int __inode_permission(struct inode *, int);
|
|
+extern int __inode_permission2(struct vfsmount *, struct inode *, int);
|
|
extern int generic_permission(struct inode *, int);
|
|
extern int __check_sticky(struct inode *dir, struct inode *inode);
|
|
|