(resending since original post was rejected by aufs-users)

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 <i...@hellion.org.uk>

--- a/include/linux/mm.h
+++ b/include/linux/mm.h
@@ -18,9 +18,6 @@
 #include <linux/pfn.h>
 #include <linux/bit_spinlock.h>
 #include <linux/shrinker.h>
-#include <linux/dcache.h>
-#include <linux/file.h>
-#include <linux/fs.h>
 
 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,




------------------------------------------------------------------------------
Want fast and easy access to all the code in your enterprise? Index and
search up to 200,000 lines of code with a free copy of Black Duck
Code Sight - the same software that powers the world's largest code
search on Ohloh, the Black Duck Open Hub! Try it now.
http://p.sf.net/sfu/bds

Reply via email to