aufs: Update to aufs3.5-20120730

svn path=/dists/trunk/linux/; revision=19297
This commit is contained in:
Ben Hutchings 2012-08-01 03:09:37 +00:00
parent 3e2cfbab04
commit ce4d388dbe
5 changed files with 85 additions and 154 deletions

2
debian/changelog vendored
View File

@ -4,7 +4,7 @@ linux (3.5-1~experimental.1) UNRELEASED; urgency=low
[ Ben Hutchings ]
* net: Enable OPENVSWITCH as module (Closes: #675010)
* aufs: Update to 3.x-rcN 20120618
* aufs: Update to aufs3.5-20120730
* rt: Disable until it is updated for Linux 3.5 or later
* debian/copyright: Convert to machine-readable format (fka DEP-5)
* debian/copyright: Add copyright notice for newly-added Unicode data

View File

@ -205,8 +205,8 @@
+ When aufs supports Magic SysRq, enabled automatically.
+endif
--- a/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/Makefile 2012-07-22 01:31:00.130115298 +0100
@@ -0,0 +1,45 @@
+++ b/fs/aufs/Makefile 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,42 @@
+
+include ${src}/magic.mk
+ifeq (${CONFIG_AUFS_FS},m)
@ -246,9 +246,6 @@
+aufs-$(CONFIG_AUFS_POLL) += poll.o
+aufs-$(CONFIG_AUFS_RDU) += rdu.o
+aufs-$(CONFIG_AUFS_SP_IATTR) += f_op_sp.o
+ifdef CONFIG_MMU
+aufs-$(CONFIG_SECURITY) += security.o
+endif
+aufs-$(CONFIG_AUFS_BR_HFSPLUS) += hfsplus.o
+aufs-$(CONFIG_AUFS_DEBUG) += debug.o
+aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o
@ -8382,8 +8379,8 @@
+ atomic_set(&sbinfo->si_xigen_next, u);
+}
--- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/f_op.c 2012-07-22 01:31:00.162115458 +0100
@@ -0,0 +1,692 @@
+++ b/fs/aufs/f_op.c 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,727 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -8831,6 +8828,41 @@
+ * The similar scenario is applied to aufs_readlink() too.
+ */
+
+/* cf. linux/include/linux/mman.h: calc_vm_prot_bits() */
+#define AuConv_VM_PROT(f, b) _calc_vm_trans(f, VM_##b, PROT_##b)
+
+static unsigned long au_arch_prot_conv(unsigned long flags)
+{
+ /* currently ppc64 only */
+#ifdef CONFIG_PPC64
+ /* cf. linux/arch/powerpc/include/asm/mman.h */
+ AuDebugOn(arch_calc_vm_prot_bits(-1) != VM_SAO);
+ return AuConv_VM_PROT(flags, SAO);
+#else
+ AuDebugOn(arch_calc_vm_prot_bits(-1));
+ return 0;
+#endif
+}
+
+static unsigned long au_prot_conv(unsigned long flags)
+{
+ return AuConv_VM_PROT(flags, READ)
+ | AuConv_VM_PROT(flags, WRITE)
+ | AuConv_VM_PROT(flags, EXEC)
+ | au_arch_prot_conv(flags);
+}
+
+/* cf. linux/include/linux/mman.h: calc_vm_flag_bits() */
+#define AuConv_VM_MAP(f, b) _calc_vm_trans(f, VM_##b, MAP_##b)
+
+static unsigned long au_flag_conv(unsigned long flags)
+{
+ return AuConv_VM_MAP(flags, GROWSDOWN)
+ | AuConv_VM_MAP(flags, DENYWRITE)
+ | AuConv_VM_MAP(flags, EXECUTABLE)
+ | AuConv_VM_MAP(flags, LOCKED);
+}
+
+static int aufs_mmap(struct file *file, struct vm_area_struct *vma)
+{
+ int err;
@ -8873,8 +8905,8 @@
+ lockdep_on();
+
+ au_vm_file_reset(vma, h_file);
+ /* todo: bad approach, I am not sure this is really necessary */
+ err = au_security_mmap_file(h_file, vma);
+ err = security_mmap_file(h_file, au_prot_conv(vma->vm_flags),
+ au_flag_conv(vma->vm_flags));
+ if (!err)
+ err = h_file->f_op->mmap(h_file, vma);
+ if (unlikely(err))
@ -10054,8 +10086,8 @@
+#endif /* CONFIG_AUFS_DEBUG */
+};
--- a/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/file.h 2012-07-22 01:31:00.162115458 +0100
@@ -0,0 +1,306 @@
+++ b/fs/aufs/file.h 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -10139,14 +10171,6 @@
+int au_do_flush(struct file *file, fl_owner_t id,
+ int (*flush)(struct file *file, fl_owner_t id));
+
+#if defined(CONFIG_SECURITY) && defined(CONFIG_MMU)
+/* security.c */
+int au_security_mmap_file(struct file *h_file, struct vm_area_struct *vma);
+#else
+AuStubInt0(au_security_mmap_file, struct file *h_file,
+ struct vm_area_struct *vma);
+#endif
+
+/* poll.c */
+#ifdef CONFIG_AUFS_POLL
+unsigned int aufs_poll(struct file *file, poll_table *wait);
@ -12056,8 +12080,8 @@
+ au_hn_destroy_cache();
+}
--- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/i_op.c 2012-07-22 01:31:00.162115458 +0100
@@ -0,0 +1,1014 @@
+++ b/fs/aufs/i_op.c 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,1009 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -12266,18 +12290,13 @@
+ ret = d_splice_alias(inode, dentry);
+ if (unlikely(IS_ERR(ret) && inode)) {
+ ii_write_unlock(inode);
+ lc_idx = AuLcNonDir_IIINFO;
+ if (S_ISLNK(inode->i_mode))
+ lc_idx = AuLcSymlink_IIINFO;
+ else if (S_ISDIR(inode->i_mode))
+ lc_idx = AuLcDir_IIINFO;
+ au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx);
+ iput(inode);
+ inode = NULL;
+ }
+
+out_unlock:
+ di_write_unlock(dentry);
+ if (unlikely(IS_ERR(ret) && inode)) {
+ if (inode) {
+ lc_idx = AuLcNonDir_DIINFO;
+ if (S_ISLNK(inode->i_mode))
+ lc_idx = AuLcSymlink_DIINFO;
@ -15565,8 +15584,8 @@
+ AuRwDestroy(&iinfo->ii_rwsem);
+}
--- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/inode.c 2012-07-22 01:31:00.162115458 +0100
@@ -0,0 +1,471 @@
+++ b/fs/aufs/inode.c 2012-08-01 04:08:08.827230713 +0100
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
+ *
@ -15895,7 +15914,7 @@
+ struct super_block *sb;
+ struct mutex *mtx;
+ ino_t h_ino, ino;
+ int err;
+ int err, lc_idx;
+ aufs_bindex_t bstart;
+
+ sb = dentry->d_sb;
@ -15936,6 +15955,13 @@
+
+ AuDbg("%lx, new %d\n", inode->i_state, !!(inode->i_state & I_NEW));
+ if (inode->i_state & I_NEW) {
+ lc_idx = AuLcNonDir_IIINFO;
+ if (S_ISLNK(h_inode->i_mode))
+ lc_idx = AuLcSymlink_IIINFO;
+ else if (S_ISDIR(h_inode->i_mode))
+ lc_idx = AuLcDir_IIINFO;
+ au_rw_class(&au_ii(inode)->ii_rwsem, au_lc_key + lc_idx);
+
+ ii_write_lock_new_child(inode);
+ err = set_inode(inode, dentry);
+ if (!err) {
@ -19246,7 +19272,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_OPTS_H__ */
--- a/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/plink.c 2012-07-22 01:31:00.166115467 +0100
+++ b/fs/aufs/plink.c 2012-08-01 04:08:08.827230713 +0100
@@ -0,0 +1,511 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -20915,101 +20941,6 @@
+ p = radix_tree_delete(&sbinfo->au_si_pid.tree, current->pid);
+ spin_unlock(&sbinfo->au_si_pid.tree_lock);
+}
--- a/fs/aufs/security.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/security.c 2012-07-22 01:31:00.166115467 +0100
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2012 Junjiro R. Okajima
+ *
+ * This program, aufs is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+/*
+ * securityf_file_mmap
+ */
+
+#include <linux/mman.h>
+#include <linux/security.h>
+#include "aufs.h"
+
+/* cf. linux/include/linux/mman.h: calc_vm_prot_bits() */
+#define AuConv_VM_PROT(f, b) _calc_vm_trans(f, VM_##b, PROT_##b)
+
+static unsigned long au_arch_prot_conv(unsigned long flags)
+{
+ /* currently ppc64 only */
+#ifdef CONFIG_PPC64
+ /* cf. linux/arch/powerpc/include/asm/mman.h */
+ AuDebugOn(arch_calc_vm_prot_bits(-1) != VM_SAO);
+ return AuConv_VM_PROT(flags, SAO);
+#else
+ AuDebugOn(arch_calc_vm_prot_bits(-1));
+ return 0;
+#endif
+}
+
+static unsigned long au_prot_conv(unsigned long flags)
+{
+ return AuConv_VM_PROT(flags, READ)
+ | AuConv_VM_PROT(flags, WRITE)
+ | AuConv_VM_PROT(flags, EXEC)
+ | au_arch_prot_conv(flags);
+}
+
+/* cf. linux/include/linux/mman.h: calc_vm_flag_bits() */
+#define AuConv_VM_MAP(f, b) _calc_vm_trans(f, VM_##b, MAP_##b)
+
+static unsigned long au_flag_conv(unsigned long flags)
+{
+ return AuConv_VM_MAP(flags, GROWSDOWN)
+ | AuConv_VM_MAP(flags, DENYWRITE)
+ | AuConv_VM_MAP(flags, EXECUTABLE)
+ | AuConv_VM_MAP(flags, LOCKED);
+}
+
+struct au_security_mmap_file_args {
+ int *errp;
+ struct file *h_file;
+ struct vm_area_struct *vma;
+};
+
+/*
+ * unnecessary to call security_mmap_file() since it doesn't have file as its
+ * argument.
+ */
+static void au_call_security_mmap_file(void *args)
+{
+ struct au_security_mmap_file_args *a = args;
+ *a->errp = security_mmap_file(a->h_file, au_prot_conv(a->vma->vm_flags),
+ au_flag_conv(a->vma->vm_flags));
+}
+
+int au_security_mmap_file(struct file *h_file, struct vm_area_struct *vma)
+{
+ int err, wkq_err;
+ struct au_security_mmap_file_args args = {
+ .errp = &err,
+ .h_file = h_file,
+ .vma = vma
+ };
+
+ wkq_err = au_wkq_wait(au_call_security_mmap_file, &args);
+ if (unlikely(wkq_err))
+ err = wkq_err;
+ return err;
+}
--- a/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/spl.h 2012-01-10 02:15:56.561456041 +0000
@@ -0,0 +1,62 @@
@ -27032,7 +26963,7 @@
+#endif /* __KERNEL__ */
+#endif /* __AUFS_WHOUT_H__ */
--- a/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100
+++ b/fs/aufs/wkq.c 2012-07-22 01:31:00.166115467 +0100
+++ b/fs/aufs/wkq.c 2012-08-01 04:08:08.831230728 +0100
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -28611,7 +28542,7 @@
+ return err;
+}
--- a/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100
+++ b/include/linux/aufs_type.h 2012-07-22 01:31:00.166115467 +0100
+++ b/include/linux/aufs_type.h 2012-08-01 03:41:52.619414717 +0100
@@ -0,0 +1,233 @@
+/*
+ * Copyright (C) 2005-2012 Junjiro R. Okajima
@ -28654,7 +28585,7 @@
+
+#include <linux/limits.h>
+
+#define AUFS_VERSION "3.x-rcN-20120618"
+#define AUFS_VERSION "3.5-20120730"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')

View File

@ -1,4 +1,4 @@
aufs3.x-rcN base patch
aufs3.5 base patch
diff --git a/fs/inode.c b/fs/inode.c
index c99163b..7f772fd 100644
@ -27,10 +27,10 @@ index 7d69419..18c9782 100644
return __lookup_hash(&nd->last, nd->path.dentry, nd);
}
diff --git a/fs/splice.c b/fs/splice.c
index c9f1318..490239f 100644
index 7bf08fa..e3c40b5 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1086,8 +1086,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
@@ -1090,8 +1090,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
/*
* Attempt to initiate a splice from pipe to file.
*/
@ -41,7 +41,7 @@ index c9f1318..490239f 100644
{
ssize_t (*splice_write)(struct pipe_inode_info *, struct file *,
loff_t *, size_t, unsigned int);
@@ -1114,9 +1114,9 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
@@ -1118,9 +1118,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.
*/
@ -79,10 +79,10 @@ index ffc0213..ef35a31 100644
extern int follow_down_one(struct path *);
diff --git a/include/linux/splice.h b/include/linux/splice.h
index 26e5b61..3ffef2f 100644
index 09a545a..1ac5727 100644
--- a/include/linux/splice.h
+++ b/include/linux/splice.h
@@ -91,4 +91,10 @@ extern void splice_shrink_spd(struct pipe_inode_info *,
@@ -91,4 +91,10 @@ extern void splice_shrink_spd(struct splice_pipe_desc *);
extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
extern const struct pipe_buf_operations page_cache_pipe_buf_ops;

View File

@ -1,4 +1,4 @@
aufs3.x-rcN kbuild patch
aufs3.5 kbuild patch
diff --git a/fs/Kconfig b/fs/Kconfig
index f95ae3a..6d8a9a5 100644

View File

@ -1,4 +1,4 @@
aufs3.x-rcN standalone patch
aufs3.5 standalone patch
diff --git a/fs/file_table.c b/fs/file_table.c
index a305d9e..6a768be 100644
@ -135,7 +135,7 @@ index f104d56..54f36db 100644
static int fsnotify_mark_destroy(void *ignored)
{
diff --git a/fs/open.c b/fs/open.c
index d6c79a0..9004a15 100644
index 1540632..2463289 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -60,6 +60,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
@ -147,10 +147,10 @@ index d6c79a0..9004a15 100644
static long do_sys_truncate(const char __user *pathname, loff_t length)
{
diff --git a/fs/splice.c b/fs/splice.c
index 490239f..701d34a 100644
index e3c40b5..3afc547 100644
--- a/fs/splice.c
+++ b/fs/splice.c
@@ -1110,6 +1110,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
@@ -1114,6 +1114,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
return splice_write(pipe, out, ppos, len, flags);
}
@ -158,7 +158,7 @@ index 490239f..701d34a 100644
/*
* Attempt to initiate a splice from a file to a pipe.
@@ -1136,6 +1137,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
@@ -1140,6 +1141,7 @@ long do_splice_to(struct file *in, loff_t *ppos,
return splice_read(in, ppos, pipe, len, flags);
}
@ -203,10 +203,10 @@ index 442204c..e644a1c 100644
int devcgroup_inode_mknod(int mode, dev_t dev)
{
diff --git a/security/security.c b/security/security.c
index 3efc9b1..c7afd35 100644
index 860aeb3..ffb57bf 100644
--- a/security/security.c
+++ b/security/security.c
@@ -383,6 +383,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
@@ -384,6 +384,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
return 0;
return security_ops->path_rmdir(dir, dentry);
}
@ -214,7 +214,7 @@ index 3efc9b1..c7afd35 100644
int security_path_unlink(struct path *dir, struct dentry *dentry)
{
@@ -399,6 +400,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
@@ -400,6 +401,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
return 0;
return security_ops->path_symlink(dir, dentry, old_name);
}
@ -222,7 +222,7 @@ index 3efc9b1..c7afd35 100644
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
struct dentry *new_dentry)
@@ -407,6 +409,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
@@ -408,6 +410,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
return 0;
return security_ops->path_link(old_dentry, new_dir, new_dentry);
}
@ -230,7 +230,7 @@ index 3efc9b1..c7afd35 100644
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
struct path *new_dir, struct dentry *new_dentry)
@@ -425,6 +428,7 @@ int security_path_truncate(struct path *path)
@@ -426,6 +429,7 @@ int security_path_truncate(struct path *path)
return 0;
return security_ops->path_truncate(path);
}
@ -238,7 +238,7 @@ index 3efc9b1..c7afd35 100644
int security_path_chmod(struct path *path, umode_t mode)
{
@@ -432,6 +436,7 @@ int security_path_chmod(struct path *path, umode_t mode)
@@ -433,6 +437,7 @@ int security_path_chmod(struct path *path, umode_t mode)
return 0;
return security_ops->path_chmod(path, mode);
}
@ -246,7 +246,7 @@ index 3efc9b1..c7afd35 100644
int security_path_chown(struct path *path, uid_t uid, gid_t gid)
{
@@ -439,6 +444,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
@@ -440,6 +445,7 @@ int security_path_chown(struct path *path, uid_t uid, gid_t gid)
return 0;
return security_ops->path_chown(path, uid, gid);
}
@ -254,7 +254,7 @@ index 3efc9b1..c7afd35 100644
int security_path_chroot(struct path *path)
{
@@ -515,6 +521,7 @@ int security_inode_readlink(struct dentry *dentry)
@@ -516,6 +522,7 @@ int security_inode_readlink(struct dentry *dentry)
return 0;
return security_ops->inode_readlink(dentry);
}
@ -262,7 +262,7 @@ index 3efc9b1..c7afd35 100644
int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd)
{
@@ -529,6 +536,7 @@ int security_inode_permission(struct inode *inode, int mask)
@@ -530,6 +537,7 @@ int security_inode_permission(struct inode *inode, int mask)
return 0;
return security_ops->inode_permission(inode, mask);
}
@ -270,7 +270,7 @@ index 3efc9b1..c7afd35 100644
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
{
@@ -644,6 +652,7 @@ int security_file_permission(struct file *file, int mask)
@@ -645,6 +653,7 @@ int security_file_permission(struct file *file, int mask)
return fsnotify_perm(file, mask);
}
@ -278,7 +278,7 @@ index 3efc9b1..c7afd35 100644
int security_file_alloc(struct file *file)
{
@@ -704,6 +713,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
@@ -705,6 +714,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
return ret;
return ima_file_mmap(file, prot);
}