From ce4d388dbe03361e5bac7934ffe1ffff299ad5d8 Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Wed, 1 Aug 2012 03:09:37 +0000 Subject: [PATCH] aufs: Update to aufs3.5-20120730 svn path=/dists/trunk/linux/; revision=19297 --- debian/changelog | 2 +- .../features/all/aufs3/aufs3-add.patch | 191 ++++++------------ .../features/all/aufs3/aufs3-base.patch | 12 +- .../features/all/aufs3/aufs3-kbuild.patch | 2 +- .../features/all/aufs3/aufs3-standalone.patch | 32 +-- 5 files changed, 85 insertions(+), 154 deletions(-) diff --git a/debian/changelog b/debian/changelog index 3df25e81f..5d9f08126 100644 --- a/debian/changelog +++ b/debian/changelog @@ -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 diff --git a/debian/patches/features/all/aufs3/aufs3-add.patch b/debian/patches/features/all/aufs3/aufs3-add.patch index f6b3703e1..64e253973 100644 --- a/debian/patches/features/all/aufs3/aufs3-add.patch +++ b/debian/patches/features/all/aufs3/aufs3-add.patch @@ -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 -+#include -+#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 + -+#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') diff --git a/debian/patches/features/all/aufs3/aufs3-base.patch b/debian/patches/features/all/aufs3/aufs3-base.patch index e360b173a..94a6d9aea 100644 --- a/debian/patches/features/all/aufs3/aufs3-base.patch +++ b/debian/patches/features/all/aufs3/aufs3-base.patch @@ -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; diff --git a/debian/patches/features/all/aufs3/aufs3-kbuild.patch b/debian/patches/features/all/aufs3/aufs3-kbuild.patch index 24923fe44..ba6d30d66 100644 --- a/debian/patches/features/all/aufs3/aufs3-kbuild.patch +++ b/debian/patches/features/all/aufs3/aufs3-kbuild.patch @@ -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 diff --git a/debian/patches/features/all/aufs3/aufs3-standalone.patch b/debian/patches/features/all/aufs3/aufs3-standalone.patch index c23f6fcfe..fb5b4b765 100644 --- a/debian/patches/features/all/aufs3/aufs3-standalone.patch +++ b/debian/patches/features/all/aufs3/aufs3-standalone.patch @@ -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); }