+F: fs/aufs/
+F: include/uapi/linux/aufs_type.h
+
- AUXILIARY DISPLAY DRIVERS
- M: Miguel Ojeda <ojeda@kernel.org>
- S: Maintained
+ AUXILIARY BUS DRIVER
+ M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+ R: Dave Ertman <david.m.ertman@intel.com>
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
index bc31bb7072a2..131294601819 100644
--- a/drivers/block/loop.c
{
if (unlikely(!out->f_op->splice_write))
return warn_unsupported(out, "write");
-@@ -876,9 +876,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)
- {
- unsigned int p_space;
- int ret;
diff --git a/include/linux/fs.h b/include/linux/fs.h
index 21a981680856..1e3054e5367d 100644
--- a/include/linux/fs.h
extern int f_setown(struct file *filp, unsigned long arg, int force);
extern void f_delown(struct file *filp);
@@ -1793,6 +1794,7 @@ struct file_operations {
- ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);
+ int (*lock) (struct file *, int, struct file_lock *);
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);
index a55179fd60fc..8e21c53cf883 100644
--- a/include/linux/splice.h
+++ b/include/linux/splice.h
-@@ -93,4 +93,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
+@@ -93,4 +93,7 @@ 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 dcd1d5bfc1e0..85d1f7e0bc07 100644
+
+#endif /* CONFIG_AUFS_FS */
+
- extern int access_process_vm(struct task_struct *tsk, unsigned long addr,
- void *buf, int len, unsigned int gup_flags);
- extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
+ static inline struct vm_area_struct *vma_lookup(struct mm_struct *mm,
+ unsigned long addr);
+
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
index 306a3d1a0fa6..56374f0eb825 100644
--- a/include/linux/mm_types.h
+EXPORT_SYMBOL_GPL(do_splice_from);
/*
- * Attempt to initiate a splice from a file to a pipe.
-@@ -901,6 +902,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
- return warn_unsupported(in, "read");
- return in->f_op->splice_read(in, ppos, pipe, len, flags);
- }
-+EXPORT_SYMBOL_GPL(do_splice_to);
-
- /**
- * splice_direct_to_actor - splices data directly between two non-pipes
+ * Indicate to the caller that there was a premature EOF when reading from the
diff --git a/fs/xattr.c b/fs/xattr.c
index fcf67d80d7f9..174dfb9285fb 100644
--- a/fs/xattr.c
+ long err;
+
+ lockdep_off();
-+ err = do_splice_to(in, ppos, pipe, len, flags);
++ err = vfs_splice_read(in, ppos, pipe, len, flags);
+ lockdep_on();
+ file_accessed(in);
+ if (err >= 0)
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
@@ -1934,6 +1934,10 @@ struct super_operations {
- struct shrink_control *);
long (*free_cached_objects)(struct super_block *,
struct shrink_control *);
+ void (*shutdown)(struct super_block *sb);
+#if IS_ENABLED(CONFIG_BLK_DEV_LOOP) || IS_ENABLED(CONFIG_BLK_DEV_LOOP_MODULE)
+ /* and aufs */
+ struct file *(*real_loop)(struct file *);