aufs5.2 base patch
authorJ. R. Okajima <hooanon05@yahoo.co.jp>
Fri, 12 Jul 2019 13:29:09 +0000 (22:29 +0900)
committerSalvatore Bonaccorso <carnil@debian.org>
Thu, 26 Sep 2019 12:19:06 +0000 (13:19 +0100)
Patch headers added by debian/bin/genpatch-aufs

SPDX-License-Identifier: GPL-2.0
aufs5.2 base patch

Gbp-Pq: Topic features/all/aufs5
Gbp-Pq: Name aufs5-base.patch

14 files changed:
MAINTAINERS
drivers/block/loop.c
fs/dcache.c
fs/fcntl.c
fs/inode.c
fs/namespace.c
fs/read_write.c
fs/splice.c
fs/sync.c
include/linux/fs.h
include/linux/lockdep.h
include/linux/mnt_namespace.h
include/linux/splice.h
kernel/locking/lockdep.c

index 677ef41cb012ca2a3f4fb9ee56bdc45c450ff6cc..c2a7491ddc68de598a536aa2f1fbb37e4e4f6339 100644 (file)
@@ -2769,6 +2769,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
index e1739efca37eb18f206759f841c135eb52c62865..12aa2204924844f1aede6d347754dfabb3e8bb06 100644 (file)
@@ -746,6 +746,24 @@ out_err:
        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,
index c435398f2c8196d2fc8c26750edc50f0c13ec6ed..a688a042d0221072ee6827716df7285ed87173c3 100644 (file)
@@ -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;
index 3d40771e8e7cf59da14f617c9df473c1a7adeb6e..d62303c5472afaa58a0d3d82c0c7332f313e8df0 100644 (file)
@@ -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;
 
index 2bf21e2c90fc8adb53f4c360ed0dbf30230806c9..9b908c37971f2bc1871fa40757aed4820838446f 100644 (file)
@@ -1670,7 +1670,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);
 
index 6fbc9126367a1cf6db621faa575fd709e114002b..101dda59f39c4858b41492fc258cf2c4e97a1ec2 100644 (file)
@@ -770,6 +770,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
  */
index e8b0f1192a3a475ab0dcc3a276b9fd184271845e..b83312547db6d261fb6c68fd471fb6cbea996e7e 100644 (file)
@@ -498,6 +498,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;
index 14cb602d9a2f54109aeb8acec7b759c6930f9b1b..58d2692c5f30889b4b573dd4623a1d76862df690 100644 (file)
@@ -834,8 +834,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);
@@ -851,9 +851,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);
index 4d1ff010bc5afcd6acee1e4dbd736e8bfbd9081a..457f4e4a5cc1f31a72ade4242bd226335cdd63d9 100644 (file)
--- 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);
index 5186ac5b2a294bccd0bbddb506a65409f96c63a0..050fc36b53379eeb1f0f478516437fd22722a91e 100644 (file)
@@ -1333,6 +1333,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);
@@ -1812,6 +1813,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);
@@ -1882,6 +1884,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 *);
@@ -2315,6 +2323,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;
@@ -2603,6 +2612,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;
index 6e2377e6c1d6013d01457b452952cc038be0e07b..5a945d18a72a8365b767dbf90cfd0f315476c2df 100644 (file)
@@ -325,6 +325,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.
  *
@@ -463,6 +465,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)
index 35942084cd40d56cc1bd9f7ccc08be460ad35cc9..24f5fd1a789de5a7062dc1c0ca7a2399043d2424 100644 (file)
@@ -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;
index 74b4911ac16dd227921dc0a84acbe83287acba2a..19789fbea56755df030d06c3651caf4f537155c5 100644 (file)
@@ -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
index dbc936ccf149ee96e8c4d5bfac9b4f10dae53f52..ee41ed5d5402f580cfe7acfefb447bc2a61bafdc 100644 (file)
@@ -152,7 +152,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) {
                /*
@@ -163,6 +163,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);