aufs4.9 base patch
authorJ. R. Okajima <hooanon05@yahoo.co.jp>
Sat, 4 Feb 2017 04:13:07 +0000 (13:13 +0900)
committerAurelien Jarno <aurel32@debian.org>
Fri, 2 Mar 2018 07:52:22 +0000 (07:52 +0000)
Patch headers added by debian/patches/features/all/aufs4/gen-patch

aufs4.9 base patch

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

MAINTAINERS
drivers/block/loop.c
fs/dcache.c
fs/fcntl.c
fs/inode.c
fs/read_write.c
fs/splice.c
fs/sync.c
include/linux/file.h
include/linux/fs.h
include/linux/splice.h

index 63cefa62324cd1e0cc788efbeffcff9b4ab875f3..d78b954cb2032dfb0a8f9c470fee37958ffc83ba 100644 (file)
@@ -2293,6 +2293,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:     linux-unionfs@vger.kernel.org
+L:     aufs-users@lists.sourceforge.net (members only)
+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>
 W:     http://miguelojeda.es/auxdisplay.htm
index 402254d262474aecf93098e1c596619d169abc6c..d6943d5a97c870f0eea615b4ee1e7ca254ced276 100644 (file)
@@ -701,6 +701,24 @@ static inline int is_loop_device(struct file *file)
        return i && S_ISBLK(i->i_mode) && MAJOR(i->i_rdev) == LOOP_MAJOR;
 }
 
+/*
+ * 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 67957f5b325c8ac85fd72fe730c2854f70f06988..cd53f9ba3eb6ca68fd955d3b3a235c183c3433a3 100644 (file)
@@ -1192,7 +1192,7 @@ enum d_walk_ret {
  *
  * The @enter() and @finish() 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 *),
                   void (*finish)(void *))
 {
index ec03cf620fd7a4a2253633573e4f08bc05a3a478..f3bbbdfc04a4e0f1c6957eeb1ce905e4e7f1c1ea 100644 (file)
@@ -29,7 +29,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;
@@ -60,6 +60,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 920aa0b1c6b033f820f0f7efca30ed1ad93dc587..816ee9b08f1e30ec272d32f5288ec96f42c21a2b 100644 (file)
@@ -1643,7 +1643,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 timespec *time, int flags)
+int update_time(struct inode *inode, struct timespec *time, int flags)
 {
        int (*update_time)(struct inode *, struct timespec *, int);
 
index ba280596ec7825d4747e38088272aceb8637733c..ae2e2cd2b88184904a9ba334a7d9acfd1f4bb62f 100644 (file)
@@ -515,6 +515,28 @@ ssize_t __vfs_write(struct file *file, const char __user *p, size_t count,
 }
 EXPORT_SYMBOL(__vfs_write);
 
+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 char *buf, size_t count, loff_t *pos)
 {
        mm_segment_t old_fs;
index 8dd79ecfd383b67a4389c5f37d6e597cd5fe66c3..8bca247c1db22cff7efb278a6a8da08cf33b5af0 100644 (file)
@@ -856,8 +856,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);
@@ -873,9 +873,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 2a54c1f2203595823df1bd97680b9a1fb163e400..7a5fa3f786a7baa40e4742980e7260ae9af1a0c5 100644 (file)
--- a/fs/sync.c
+++ b/fs/sync.c
@@ -27,7 +27,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 7444f5feda12559b5bf5fd5dd564226da1157eeb..bdac0be2ac54e9560a3a226148f96aa0c4d1529e 100644 (file)
@@ -19,6 +19,7 @@ struct dentry;
 struct path;
 extern struct file *alloc_file(struct path *, fmode_t mode,
        const struct file_operations *fop);
+extern struct file *get_empty_filp(void);
 
 static inline void fput_light(struct file *file, int fput_needed)
 {
index d705ae084edd099622e2f8026e3e991a9d0c4750..0f55c9d3be246bb8a868a3bc285ea4c67fc93407 100644 (file)
@@ -1296,6 +1296,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 void f_setown(struct file *filp, unsigned long arg, int force);
 extern void f_delown(struct file *filp);
@@ -1720,6 +1721,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);
@@ -1773,6 +1775,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_write(struct file *, const char __user *, size_t, loff_t *);
 extern ssize_t vfs_read(struct file *, char __user *, size_t, loff_t *);
@@ -2145,6 +2153,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 timespec *, int);
+extern int update_time(struct inode *, struct timespec *, int);
 
 /* /sys/fs */
 extern struct kobject *fs_kobj;
@@ -2424,6 +2433,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 00a21166e268b50f812807bc7e899360cb65febc..1f0a4a2b3f2f50a9f5ef20aac75a31f9aa01cd0d 100644 (file)
@@ -86,4 +86,10 @@ extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
 
 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