123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321 |
- SPDX-License-Identifier: GPL-2.0
- aufs5.1 base patch
- diff --git a/MAINTAINERS b/MAINTAINERS
- index 2c2fce72e694..f5be2663b01e 100644
- --- a/MAINTAINERS
- +++ b/MAINTAINERS
- @@ -2699,6 +2699,19 @@ F: include/linux/audit.h
- F: include/uapi/linux/audit.h
- F: kernel/audit*
-
- +AUFS (advanced multi layered unification filesystem) FILESYSTEM
- +M: "J. R. Okajima" <hooanon05g@gmail.com>
- +L: aufs-users@lists.sourceforge.net (members only)
- +L: linux-unionfs@vger.kernel.org
- +W: http://aufs.sourceforge.net
- +T: git://github.com/sfjro/aufs4-linux.git
- +S: Supported
- +F: Documentation/filesystems/aufs/
- +F: Documentation/ABI/testing/debugfs-aufs
- +F: Documentation/ABI/testing/sysfs-aufs
- +F: fs/aufs/
- +F: include/uapi/linux/aufs_type.h
- +
- AUXILIARY DISPLAY DRIVERS
- M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis@gmail.com>
- S: Maintained
- diff --git a/drivers/block/loop.c b/drivers/block/loop.c
- index bf1c61cab8eb..7e18c8c72dcc 100644
- --- a/drivers/block/loop.c
- +++ b/drivers/block/loop.c
- @@ -738,6 +738,24 @@ static int loop_change_fd(struct loop_device *lo, struct block_device *bdev,
- return error;
- }
-
- +/*
- + * for AUFS
- + * no get/put for file.
- + */
- +struct file *loop_backing_file(struct super_block *sb)
- +{
- + struct file *ret;
- + struct loop_device *l;
- +
- + ret = NULL;
- + if (MAJOR(sb->s_dev) == LOOP_MAJOR) {
- + l = sb->s_bdev->bd_disk->private_data;
- + ret = l->lo_backing_file;
- + }
- + return ret;
- +}
- +EXPORT_SYMBOL_GPL(loop_backing_file);
- +
- /* loop sysfs attributes */
-
- static ssize_t loop_attr_show(struct device *dev, char *page,
- diff --git a/fs/dcache.c b/fs/dcache.c
- index aac41adf4743..fc18967c2522 100644
- --- a/fs/dcache.c
- +++ b/fs/dcache.c
- @@ -1247,7 +1247,7 @@ enum d_walk_ret {
- *
- * The @enter() callbacks are called with d_lock held.
- */
- -static void d_walk(struct dentry *parent, void *data,
- +void d_walk(struct dentry *parent, void *data,
- enum d_walk_ret (*enter)(void *, struct dentry *))
- {
- struct dentry *this_parent;
- diff --git a/fs/fcntl.c b/fs/fcntl.c
- index 083185174c6d..78234ee16784 100644
- --- a/fs/fcntl.c
- +++ b/fs/fcntl.c
- @@ -32,7 +32,7 @@
-
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
-
- -static int setfl(int fd, struct file * filp, unsigned long arg)
- +int setfl(int fd, struct file * filp, unsigned long arg)
- {
- struct inode * inode = file_inode(filp);
- int error = 0;
- @@ -63,6 +63,8 @@ static int setfl(int fd, struct file * filp, unsigned long arg)
-
- if (filp->f_op->check_flags)
- error = filp->f_op->check_flags(arg);
- + if (!error && filp->f_op->setfl)
- + error = filp->f_op->setfl(filp, arg);
- if (error)
- return error;
-
- diff --git a/fs/inode.c b/fs/inode.c
- index 9a453f3637f8..ee4434cea572 100644
- --- a/fs/inode.c
- +++ b/fs/inode.c
- @@ -1657,7 +1657,7 @@ EXPORT_SYMBOL(generic_update_time);
- * This does the actual work of updating an inodes time or version. Must have
- * had called mnt_want_write() before calling this.
- */
- -static int update_time(struct inode *inode, struct timespec64 *time, int flags)
- +int update_time(struct inode *inode, struct timespec64 *time, int flags)
- {
- int (*update_time)(struct inode *, struct timespec64 *, int);
-
- diff --git a/fs/namespace.c b/fs/namespace.c
- index c9cab307fa77..e56de0b2bee0 100644
- --- a/fs/namespace.c
- +++ b/fs/namespace.c
- @@ -769,6 +769,12 @@ static inline int check_mnt(struct mount *mnt)
- return mnt->mnt_ns == current->nsproxy->mnt_ns;
- }
-
- +/* for aufs, CONFIG_AUFS_BR_FUSE */
- +int is_current_mnt_ns(struct vfsmount *mnt)
- +{
- + return check_mnt(real_mount(mnt));
- +}
- +
- /*
- * vfsmount lock must be held for write
- */
- diff --git a/fs/read_write.c b/fs/read_write.c
- index 61b43ad7608e..8979e01e9bf0 100644
- --- a/fs/read_write.c
- +++ b/fs/read_write.c
- @@ -489,6 +489,28 @@ static ssize_t __vfs_write(struct file *file, const char __user *p,
- return -EINVAL;
- }
-
- +vfs_readf_t vfs_readf(struct file *file)
- +{
- + const struct file_operations *fop = file->f_op;
- +
- + if (fop->read)
- + return fop->read;
- + if (fop->read_iter)
- + return new_sync_read;
- + return ERR_PTR(-ENOSYS);
- +}
- +
- +vfs_writef_t vfs_writef(struct file *file)
- +{
- + const struct file_operations *fop = file->f_op;
- +
- + if (fop->write)
- + return fop->write;
- + if (fop->write_iter)
- + return new_sync_write;
- + return ERR_PTR(-ENOSYS);
- +}
- +
- ssize_t __kernel_write(struct file *file, const void *buf, size_t count, loff_t *pos)
- {
- mm_segment_t old_fs;
- diff --git a/fs/splice.c b/fs/splice.c
- index 25212dcca2df..9629564ee8f2 100644
- --- a/fs/splice.c
- +++ b/fs/splice.c
- @@ -833,8 +833,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
- /*
- * Attempt to initiate a splice from pipe to file.
- */
- -static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- - loff_t *ppos, size_t len, unsigned int flags)
- +long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- + loff_t *ppos, size_t len, unsigned int flags)
- {
- ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
- loff_t *, size_t, unsigned int);
- @@ -850,9 +850,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- /*
- * Attempt to initiate a splice from a file to a pipe.
- */
- -static long do_splice_to(struct file *in, loff_t *ppos,
- - struct pipe_inode_info *pipe, size_t len,
- - unsigned int flags)
- +long do_splice_to(struct file *in, loff_t *ppos,
- + struct pipe_inode_info *pipe, size_t len,
- + unsigned int flags)
- {
- ssize_t (*splice_read)(struct file *, loff_t *,
- struct pipe_inode_info *, size_t, unsigned int);
- diff --git a/fs/sync.c b/fs/sync.c
- index b54e0541ad89..28607828e96f 100644
- --- a/fs/sync.c
- +++ b/fs/sync.c
- @@ -28,7 +28,7 @@
- * wait == 1 case since in that case write_inode() functions do
- * sync_dirty_buffer() and thus effectively write one block at a time.
- */
- -static int __sync_filesystem(struct super_block *sb, int wait)
- +int __sync_filesystem(struct super_block *sb, int wait)
- {
- if (wait)
- sync_inodes_sb(sb);
- diff --git a/include/linux/fs.h b/include/linux/fs.h
- index dd28e7679089..77933034b50a 100644
- --- a/include/linux/fs.h
- +++ b/include/linux/fs.h
- @@ -1327,6 +1327,7 @@ extern void fasync_free(struct fasync_struct *);
- /* can be called from interrupts */
- extern void kill_fasync(struct fasync_struct **, int, int);
-
- +extern int setfl(int fd, struct file * filp, unsigned long arg);
- extern void __f_setown(struct file *filp, struct pid *, enum pid_type, int force);
- extern int f_setown(struct file *filp, unsigned long arg, int force);
- extern void f_delown(struct file *filp);
- @@ -1806,6 +1807,7 @@ struct file_operations {
- ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
- unsigned long (*get_unmapped_area)(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
- int (*check_flags)(int);
- + int (*setfl)(struct file *, unsigned long);
- int (*flock) (struct file *, int, struct file_lock *);
- ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int);
- ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int);
- @@ -1876,6 +1878,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
- struct iovec *fast_pointer,
- struct iovec **ret_pointer);
-
- +typedef ssize_t (*vfs_readf_t)(struct file *, char __user *, size_t, loff_t *);
- +typedef ssize_t (*vfs_writef_t)(struct file *, const char __user *, size_t,
- + loff_t *);
- +vfs_readf_t vfs_readf(struct file *file);
- +vfs_writef_t vfs_writef(struct file *file);
- +
- extern ssize_t __vfs_read(struct file *, char __user *, size_t, loff_t *);
- 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 *);
- @@ -2306,6 +2314,7 @@ extern int current_umask(void);
- extern void ihold(struct inode * inode);
- extern void iput(struct inode *);
- extern int generic_update_time(struct inode *, struct timespec64 *, int);
- +extern int update_time(struct inode *, struct timespec64 *, int);
-
- /* /sys/fs */
- extern struct kobject *fs_kobj;
- @@ -2594,6 +2603,7 @@ static inline bool sb_is_blkdev_sb(struct super_block *sb)
- return false;
- }
- #endif
- +extern int __sync_filesystem(struct super_block *, int);
- extern int sync_filesystem(struct super_block *);
- extern const struct file_operations def_blk_fops;
- extern const struct file_operations def_chr_fops;
- diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h
- index 79c3873d58ac..470795d9f4a2 100644
- --- a/include/linux/lockdep.h
- +++ b/include/linux/lockdep.h
- @@ -320,6 +320,8 @@ static inline int lockdep_match_key(struct lockdep_map *lock,
- return lock->key == key;
- }
-
- +struct lock_class *lockdep_hlock_class(struct held_lock *hlock);
- +
- /*
- * Acquire a lock.
- *
- @@ -458,6 +460,7 @@ struct lockdep_map { };
-
- #define lockdep_depth(tsk) (0)
-
- +#define lockdep_is_held(lock) (1)
- #define lockdep_is_held_type(l, r) (1)
-
- #define lockdep_assert_held(l) do { (void)(l); } while (0)
- diff --git a/include/linux/mnt_namespace.h b/include/linux/mnt_namespace.h
- index 35942084cd40..24f5fd1a789d 100644
- --- a/include/linux/mnt_namespace.h
- +++ b/include/linux/mnt_namespace.h
- @@ -6,11 +6,14 @@
- struct mnt_namespace;
- struct fs_struct;
- struct user_namespace;
- +struct vfsmount;
-
- extern struct mnt_namespace *copy_mnt_ns(unsigned long, struct mnt_namespace *,
- struct user_namespace *, struct fs_struct *);
- extern void put_mnt_ns(struct mnt_namespace *ns);
-
- +extern int is_current_mnt_ns(struct vfsmount *mnt);
- +
- extern const struct file_operations proc_mounts_operations;
- extern const struct file_operations proc_mountinfo_operations;
- extern const struct file_operations proc_mountstats_operations;
- diff --git a/include/linux/splice.h b/include/linux/splice.h
- index 74b4911ac16d..19789fbea567 100644
- --- a/include/linux/splice.h
- +++ b/include/linux/splice.h
- @@ -87,4 +87,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
-
- extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
- extern const struct pipe_buf_operations default_pipe_buf_ops;
- +
- +extern long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
- + loff_t *ppos, size_t len, unsigned int flags);
- +extern long do_splice_to(struct file *in, loff_t *ppos,
- + struct pipe_inode_info *pipe, size_t len,
- + unsigned int flags);
- #endif
- diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
- index e221be724fe8..c738ac7c3a46 100644
- --- a/kernel/locking/lockdep.c
- +++ b/kernel/locking/lockdep.c
- @@ -151,7 +151,7 @@ static
- #endif
- struct lock_class lock_classes[MAX_LOCKDEP_KEYS];
-
- -static inline struct lock_class *hlock_class(struct held_lock *hlock)
- +inline struct lock_class *lockdep_hlock_class(struct held_lock *hlock)
- {
- if (!hlock->class_idx) {
- /*
- @@ -162,6 +162,7 @@ static inline struct lock_class *hlock_class(struct held_lock *hlock)
- }
- return lock_classes + hlock->class_idx - 1;
- }
- +#define hlock_class(hlock) lockdep_hlock_class(hlock)
-
- #ifdef CONFIG_LOCK_STAT
- static DEFINE_PER_CPU(struct lock_class_stats[MAX_LOCKDEP_KEYS], cpu_lock_stats);
|