diff --git a/debian/changelog b/debian/changelog index d7649663d..0181bba25 100644 --- a/debian/changelog +++ b/debian/changelog @@ -5,6 +5,7 @@ linux (3.14.12-2) UNRELEASED; urgency=medium * [armhf] Add MMC and NIC modules for BeagleBone Black to udebs. (Closes: #754491) * [arm64] Add xfs-modules udeb and add xen-netfront to nic-modules udeb. + * aufs: Fix build on arm64. [ Aurelien Jarno ] * [mips,mipsel] Add a debconf note to warn users that they have to diff --git a/debian/patches/features/all/aufs3/aufs3-remove-circular-includes.patch b/debian/patches/features/all/aufs3/aufs3-remove-circular-includes.patch new file mode 100644 index 000000000..7c4a6c0c2 --- /dev/null +++ b/debian/patches/features/all/aufs3/aufs3-remove-circular-includes.patch @@ -0,0 +1,155 @@ +From: Ian Campbell +Date: Fri, 18 Jul 2014 22:12:19 +0100 +Subject: aufs3: remove include of linux/fs.h from linux/mm.h +Forwarded: http://sourceforge.net/p/aufs/mailman/message/32626407/ + +This include is added by aufs3-mmap.patch but causes circular dependencies on +arm64 as seen with the Debian kernel packages in http://buildd.debian-ports.org/status/fetch.php?pkg=linux&arch=arm64&ver=3.14.12-1&stamp=1405234443 which contains: + +In file included from /«PKGBUILDDIR»/include/linux/mm.h:23:0, + from /«PKGBUILDDIR»/include/linux/pid_namespace.h:6, + from /«PKGBUILDDIR»/include/linux/ptrace.h:9, + from /«PKGBUILDDIR»/arch/arm64/include/asm/compat.h:26, + from /«PKGBUILDDIR»/arch/arm64/include/asm/stat.h:23, + from /«PKGBUILDDIR»/include/linux/stat.h:5, + from /«PKGBUILDDIR»/include/linux/module.h:10, + from /«PKGBUILDDIR»/init/main.c:15: +/«PKGBUILDDIR»/include/linux/fs.h:1575:64: warning: 'struct kstat' declared inside parameter list [enabled by default] + int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); + +According to http://article.gmane.org/gmane.linux.ports.arm.kernel/342042 +> The added mm.h->fs.h looks like a mistake, it should not be there, and we have +> in the past worked hard to separate mm.h, sched.h and fs.h from one another. + +By turning the various additions to linux/mm.h into macros rather than static +inlines we can avoid the need for the additional includes. Convert all but the +vm?_pr_or_file functions which don't require additional includes and are a bit +trickier to turn into macros (due to having a return value). + +Also take the opportunity to wrap the vmr_* macros in ifndef CONFIG_MMU + +Signed-off-by: Ian Campbell + +--- a/include/linux/mm.h ++++ b/include/linux/mm.h +@@ -18,9 +18,6 @@ + #include + #include + #include +-#include +-#include +-#include + + struct mempolicy; + struct anon_vma; +@@ -1170,6 +1167,7 @@ + #endif + } + ++#ifndef CONFIG_MMU + static inline struct file *vmr_do_pr_or_file(struct vm_region *region, + const char func[], int line) + { +@@ -1178,25 +1176,29 @@ + return (f && pr) ? pr : f; + } + +-static inline void vmr_do_fput(struct vm_region *region, +- const char func[], int line) +-{ +- struct file *f = region->vm_file, *pr = region->vm_prfile; +- aufs_trace(f, pr, func, line, __func__); +- fput(f); +- if (f && pr) +- fput(pr); +-} ++#define vmr_pr_or_file(region) vmr_do_pr_or_file(region, __func__, \ ++ __LINE__) + +-static inline void vma_do_file_update_time(struct vm_area_struct *vma, +- const char func[], int line) +-{ +- struct file *f = vma->vm_file, *pr = vma->vm_prfile; +- aufs_trace(f, pr, func, line, __func__); +- file_update_time(f); +- if (f && pr) +- file_update_time(pr); +-} ++#define vmr_fput(region) do { \ ++ struct vm_region *_region = region; \ ++ struct file *f = _region->vm_file, *pr = _region->vm_prfile; \ ++ aufs_trace(f, pr, __func__, __LINE__, vmr_fput); \ ++ fput(f); \ ++ if (f && pr) \ ++ fput(pr); \ ++} while(0); ++ ++#endif ++ ++#define vma_file_update_time(vma) { \ ++ struct vm_area_struct *_vma = vma; \ ++ struct file *f = _vma->vm_file, *pr = _vma->vm_prfile; \ ++ aufs_trace(f, pr, __func__, __LINE__, \ ++ "vma_file_update_time"); \ ++ file_update_time(f); \ ++ if (f && pr) \ ++ file_update_time(pr); \ ++} while (0) + + static inline struct file *vma_do_pr_or_file(struct vm_area_struct *vma, + const char func[], int line) +@@ -1206,35 +1208,26 @@ + return (f && pr) ? pr : f; + } + +-static inline void vma_do_get_file(struct vm_area_struct *vma, +- const char func[], int line) +-{ +- struct file *f = vma->vm_file, *pr = vma->vm_prfile; +- aufs_trace(f, pr, func, line, __func__); +- get_file(f); +- if (f && pr) +- get_file(pr); +-} ++#define vma_pr_or_file(vma) vma_do_pr_or_file(vma, __func__, \ ++ __LINE__) + +-static inline void vma_do_fput(struct vm_area_struct *vma, +- const char func[], int line) +-{ +- struct file *f = vma->vm_file, *pr = vma->vm_prfile; +- aufs_trace(f, pr, func, line, __func__); +- fput(f); +- if (f && pr) +- fput(pr); +-} +- +-#define vmr_pr_or_file(region) vmr_do_pr_or_file(region, __func__, \ +- __LINE__) +-#define vmr_fput(region) vmr_do_fput(region, __func__, __LINE__) +-#define vma_file_update_time(vma) vma_do_file_update_time(vma, __func__, \ +- __LINE__) +-#define vma_pr_or_file(vma) vma_do_pr_or_file(vma, __func__, \ +- __LINE__) +-#define vma_get_file(vma) vma_do_get_file(vma, __func__, __LINE__) +-#define vma_fput(vma) vma_do_fput(vma, __func__, __LINE__) ++#define vma_get_file(vma) do { \ ++ struct vm_area_struct *_vma = vma; \ ++ struct file *f = _vma->vm_file, *pr = _vma->vm_prfile; \ ++ aufs_trace(f, pr, __func__, __LINE__, "vma_get_file"); \ ++ get_file(f); \ ++ if (f && pr) \ ++ get_file(pr); \ ++} while(0) ++ ++#define vma_fput(vma) do { \ ++ struct vm_area_struct *_vma = vma; \ ++ struct file *f = _vma->vm_file, *pr = _vma->vm_prfile; \ ++ aufs_trace(f, pr, __func__, __LINE__, "vma_fput"); \ ++ fput(f); \ ++ if (f && pr) \ ++ fput(pr); \ ++} while(0) + + extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); + extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, diff --git a/debian/patches/series b/debian/patches/series index 4c5e7d85c..873b81ea9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -25,6 +25,7 @@ features/all/aufs3/aufs3-mmap.patch features/all/aufs3/aufs3-standalone.patch features/all/aufs3/aufs3-add.patch # Debian-specific changes +features/all/aufs3/aufs3-remove-circular-includes.patch debian/aufs3-mark-as-staging.patch # Change some defaults for security reasons