[packages/kernel] - up to 4.3.0; builds on x86_64; untested, so rel 0.1
arekm
arekm at pld-linux.org
Wed Nov 11 20:59:00 CET 2015
commit 79b8bda9ad47aabbc62f9933f878976e61a8e183
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Wed Nov 11 20:58:51 2015 +0100
- up to 4.3.0; builds on x86_64; untested, so rel 0.1
kernel-aufs4.patch | 561 ++++++++++++++++++++++++++++-------------------
kernel-imq.patch | 57 ++---
kernel-multiarch.config | 284 +++++++++++++++++-------
kernel-small_fixes.patch | 70 ------
kernel.spec | 11 +-
5 files changed, 583 insertions(+), 400 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index 9e438ed..a09995f 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -69,9 +69,9 @@
%define have_pcmcia 0
%endif
-%define rel 1
-%define basever 4.2
-%define postver .6
+%define rel 0.1
+%define basever 4.3
+%define postver .0
# define this to '-%{basever}' for longterm branch
%define versuffix %{nil}
@@ -117,7 +117,7 @@ Epoch: 3
License: GPL v2
Group: Base/Kernel
Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{basever}.tar.xz
-# Source0-md5: 3d5ea06d767e2f35c999eeadafc76523
+# Source0-md5: 58b35794eee3b6d52ce7be39357801e7
%if "%{postver}" != ".0"
Patch0: http://www.kernel.org/pub/linux/kernel/v4.x/patch-%{version}.xz
# Patch0-md5: 408f9975969da326b5804a04dbf0d4de
@@ -200,7 +200,7 @@ Patch101: kernel-vserver-fixes.patch
# Patch creation:
# git clone git://github.com/sfjro/aufs4-standalone.git
# cd aufs4-standalone
-# git checkout -b aufs4.1 origin/aufs4.1
+# git checkout -b aufs4.3 origin/aufs4.3
# cat aufs4-kbuild.patch aufs4-base.patch aufs4-mmap.patch aufs4-standalone.patch > ~/rpm/packages/kernel/kernel-aufs4.patch
# mkdir linux
# cp -a Documentation fs include linux
@@ -1487,6 +1487,7 @@ fi
%exclude %{_kernelsrcdir}/drivers/lguest/lg.h
%exclude %{_kernelsrcdir}/drivers/media/pci/bt8xx/bttv.h
%{_kernelsrcdir}/block
+%{_kernelsrcdir}/certs
%{_kernelsrcdir}/crypto
%{_kernelsrcdir}/drivers
%{_kernelsrcdir}/firmware
diff --git a/kernel-aufs4.patch b/kernel-aufs4.patch
index 8ab7d27..b69df80 100644
--- a/kernel-aufs4.patch
+++ b/kernel-aufs4.patch
@@ -1,10 +1,10 @@
-aufs4.x-rcN kbuild patch
+aufs4.3 kbuild patch
diff --git a/fs/Kconfig b/fs/Kconfig
-index 011f433..b1083f6 100644
+index da3f32f..b9879fe 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
-@@ -218,6 +218,7 @@ source "fs/pstore/Kconfig"
+@@ -215,6 +215,7 @@ source "fs/pstore/Kconfig"
source "fs/sysv/Kconfig"
source "fs/ufs/Kconfig"
source "fs/exofs/Kconfig"
@@ -13,16 +13,16 @@ index 011f433..b1083f6 100644
endif # MISC_FILESYSTEMS
diff --git a/fs/Makefile b/fs/Makefile
-index cb20e4b..dd81418 100644
+index f79cf40..7562a4d 100644
--- a/fs/Makefile
+++ b/fs/Makefile
-@@ -126,3 +126,4 @@ obj-y += exofs/ # Multiple modules
+@@ -125,3 +125,4 @@ obj-y += exofs/ # Multiple modules
obj-$(CONFIG_CEPH_FS) += ceph/
obj-$(CONFIG_PSTORE) += pstore/
obj-$(CONFIG_EFIVAR_FS) += efivarfs/
+obj-$(CONFIG_AUFS_FS) += aufs/
diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild
-index 1ff9942..31efc0a 100644
+index f7b2db4..47098aed 100644
--- a/include/uapi/linux/Kbuild
+++ b/include/uapi/linux/Kbuild
@@ -59,6 +59,7 @@ header-y += atmsvc.h
@@ -33,13 +33,13 @@ index 1ff9942..31efc0a 100644
header-y += auto_fs4.h
header-y += auto_fs.h
header-y += auxvec.h
-aufs4.x-rcN base patch
+aufs4.3 base patch
diff --git a/MAINTAINERS b/MAINTAINERS
-index 8133cef..04beb19 100644
+index 747c653..53ecc33 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -1939,6 +1939,19 @@ F: include/linux/audit.h
+@@ -1985,6 +1985,19 @@ F: include/linux/audit.h
F: include/uapi/linux/audit.h
F: kernel/audit*
@@ -60,7 +60,7 @@ index 8133cef..04beb19 100644
M: Miguel Ojeda Sandonis <miguel.ojeda.sandonis at gmail.com>
W: http://miguelojeda.es/auxdisplay.htm
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index f7a4c9d..23103ad 100644
+index 674f800a..291ec9e 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -560,6 +560,24 @@ static inline int is_loop_device(struct file *file)
@@ -89,10 +89,10 @@ index f7a4c9d..23103ad 100644
static ssize_t loop_attr_show(struct device *dev, char *page,
diff --git a/fs/dcache.c b/fs/dcache.c
-index 7a3f3e5..0b40298 100644
+index 5c33aeb..8aa7f26 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -1164,7 +1164,7 @@ enum d_walk_ret {
+@@ -1167,7 +1167,7 @@ enum d_walk_ret {
*
* The @enter() and @finish() callbacks are called with d_lock held.
*/
@@ -175,10 +175,10 @@ index f87d308..9a290b3 100644
static inline void fput_light(struct file *file, int fput_needed)
{
diff --git a/include/linux/fs.h b/include/linux/fs.h
-index a0653e5..86080ea 100644
+index 72d8a84..fabd9d7a 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -1661,6 +1661,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
+@@ -1687,6 +1687,12 @@ ssize_t rw_copy_check_uvector(int type, const struct iovec __user * uvector,
struct iovec *fast_pointer,
struct iovec **ret_pointer);
@@ -206,10 +206,10 @@ index da2751d..2e0fca6 100644
+ struct pipe_inode_info *pipe, size_t len,
+ unsigned int flags);
#endif
-aufs4.x-rcN mmap patch
+aufs4.3 mmap patch
diff --git a/fs/buffer.c b/fs/buffer.c
-index 1cf7a53..076aff86 100644
+index 82283ab..477e5f3 100644
--- a/fs/buffer.c
+++ b/fs/buffer.c
@@ -2473,7 +2473,7 @@ int block_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf,
@@ -222,10 +222,10 @@ index 1cf7a53..076aff86 100644
ret = __block_page_mkwrite(vma, vmf, get_block);
sb_end_pagefault(sb);
diff --git a/fs/proc/base.c b/fs/proc/base.c
-index 87782e8..b287e64 100644
+index b25eee4..c83d588 100644
--- a/fs/proc/base.c
+++ b/fs/proc/base.c
-@@ -1934,7 +1934,7 @@ static int proc_map_files_get_link(struct dentry *dentry, struct path *path)
+@@ -1914,7 +1914,7 @@ static int proc_map_files_get_link(struct dentry *dentry, struct path *path)
down_read(&mm->mmap_sem);
vma = find_exact_vma(mm, vm_start, vm_end);
if (vma && vma->vm_file) {
@@ -251,10 +251,10 @@ index f8595e8..cb8eda0 100644
ino = inode->i_ino;
}
diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c
-index ca1e091..8940e47 100644
+index e2d46ad..5e7e631 100644
--- a/fs/proc/task_mmu.c
+++ b/fs/proc/task_mmu.c
-@@ -279,7 +279,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
+@@ -280,7 +280,10 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid)
const char *name = NULL;
if (file) {
@@ -266,7 +266,7 @@ index ca1e091..8940e47 100644
dev = inode->i_sb->s_dev;
ino = inode->i_ino;
pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT;
-@@ -1479,7 +1482,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
+@@ -1465,7 +1468,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid)
struct proc_maps_private *proc_priv = &numa_priv->proc_maps;
struct vm_area_struct *vma = v;
struct numa_maps *md = &numa_priv->md;
@@ -292,10 +292,10 @@ index e0d64c9..7aa92db 100644
ino = inode->i_ino;
pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT;
diff --git a/include/linux/mm.h b/include/linux/mm.h
-index 2e872f9..2494ed2 100644
+index 80001de..9248b97 100644
--- a/include/linux/mm.h
+++ b/include/linux/mm.h
-@@ -1173,6 +1173,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
+@@ -1211,6 +1211,28 @@ static inline int fixup_user_fault(struct task_struct *tsk,
}
#endif
@@ -325,10 +325,10 @@ index 2e872f9..2494ed2 100644
extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
void *buf, int len, int write);
diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h
-index 0038ac7..409940d 100644
+index 3d6baa7..750ca95 100644
--- a/include/linux/mm_types.h
+++ b/include/linux/mm_types.h
-@@ -259,6 +259,7 @@ struct vm_region {
+@@ -250,6 +250,7 @@ struct vm_region {
unsigned long vm_top; /* region allocated to here */
unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */
struct file *vm_file; /* the backing file or NULL */
@@ -336,7 +336,7 @@ index 0038ac7..409940d 100644
int vm_usage; /* region usage count (access under nommu_region_sem) */
bool vm_icache_flushed : 1; /* true if the icache has been flushed for
-@@ -323,6 +324,7 @@ struct vm_area_struct {
+@@ -324,6 +325,7 @@ struct vm_area_struct {
unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE
units, *not* PAGE_CACHE_SIZE */
struct file * vm_file; /* File we map to (can be NULL). */
@@ -345,10 +345,10 @@ index 0038ac7..409940d 100644
#ifndef CONFIG_MMU
diff --git a/kernel/fork.c b/kernel/fork.c
-index 1bfefc6..a86bd7f 100644
+index 2845623..71004bd 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -456,7 +456,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
+@@ -462,7 +462,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm)
struct inode *inode = file_inode(file);
struct address_space *mapping = file->f_mapping;
@@ -358,7 +358,7 @@ index 1bfefc6..a86bd7f 100644
atomic_dec(&inode->i_writecount);
i_mmap_lock_write(mapping);
diff --git a/mm/Makefile b/mm/Makefile
-index 98c4eae..3f0c9b9 100644
+index 2ed4319..e3a53f5 100644
--- a/mm/Makefile
+++ b/mm/Makefile
@@ -21,7 +21,7 @@ obj-y := filemap.o mempool.o oom_kill.o \
@@ -371,7 +371,7 @@ index 98c4eae..3f0c9b9 100644
obj-y += init-mm.o
diff --git a/mm/filemap.c b/mm/filemap.c
-index 1283fc8..128f18f 100644
+index 327910c..7bbc372 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -2089,7 +2089,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf)
@@ -384,10 +384,10 @@ index 1283fc8..128f18f 100644
if (page->mapping != inode->i_mapping) {
unlock_page(page);
diff --git a/mm/memory.c b/mm/memory.c
-index a84fbb7..13973d2 100644
+index deb679c..df2ce3e 100644
--- a/mm/memory.c
+++ b/mm/memory.c
-@@ -2034,7 +2034,7 @@ static inline int wp_page_reuse(struct mm_struct *mm,
+@@ -2035,7 +2035,7 @@ static inline int wp_page_reuse(struct mm_struct *mm,
}
if (!page_mkwrite)
@@ -397,10 +397,10 @@ index a84fbb7..13973d2 100644
return VM_FAULT_WRITE;
diff --git a/mm/mmap.c b/mm/mmap.c
-index aa632ad..3ff75d3 100644
+index 79bcc9f..da28c8a 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
-@@ -274,7 +274,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
+@@ -275,7 +275,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma)
if (vma->vm_ops && vma->vm_ops->close)
vma->vm_ops->close(vma);
if (vma->vm_file)
@@ -409,7 +409,7 @@ index aa632ad..3ff75d3 100644
mpol_put(vma_policy(vma));
kmem_cache_free(vm_area_cachep, vma);
return next;
-@@ -886,7 +886,7 @@ again: remove_next = 1 + (end > next->vm_end);
+@@ -887,7 +887,7 @@ again: remove_next = 1 + (end > next->vm_end);
if (remove_next) {
if (file) {
uprobe_munmap(next, next->vm_start, next->vm_end);
@@ -418,7 +418,7 @@ index aa632ad..3ff75d3 100644
}
if (next->anon_vma)
anon_vma_merge(vma, next);
-@@ -1671,8 +1671,8 @@ out:
+@@ -1683,8 +1683,8 @@ out:
return addr;
unmap_and_free_vma:
@@ -428,7 +428,7 @@ index aa632ad..3ff75d3 100644
/* Undo any partial mapping done by a device driver. */
unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end);
-@@ -2473,7 +2473,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2485,7 +2485,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
goto out_free_mpol;
if (new->vm_file)
@@ -437,7 +437,7 @@ index aa632ad..3ff75d3 100644
if (new->vm_ops && new->vm_ops->open)
new->vm_ops->open(new);
-@@ -2492,7 +2492,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
+@@ -2504,7 +2504,7 @@ static int __split_vma(struct mm_struct *mm, struct vm_area_struct *vma,
if (new->vm_ops && new->vm_ops->close)
new->vm_ops->close(new);
if (new->vm_file)
@@ -446,7 +446,7 @@ index aa632ad..3ff75d3 100644
unlink_anon_vmas(new);
out_free_mpol:
mpol_put(vma_policy(new));
-@@ -2635,7 +2635,6 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+@@ -2646,7 +2646,6 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
struct vm_area_struct *vma;
unsigned long populate = 0;
unsigned long ret = -EINVAL;
@@ -454,7 +454,7 @@ index aa632ad..3ff75d3 100644
pr_warn_once("%s (%d) uses deprecated remap_file_pages() syscall. "
"See Documentation/vm/remap_file_pages.txt.\n",
-@@ -2679,10 +2678,10 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
+@@ -2690,10 +2689,10 @@ SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size,
munlock_vma_pages_range(vma, start, start + size);
}
@@ -467,17 +467,17 @@ index aa632ad..3ff75d3 100644
out:
up_write(&mm->mmap_sem);
if (populate)
-@@ -2949,7 +2948,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
- if (anon_vma_clone(new_vma, vma))
- goto out_free_mempol;
- if (new_vma->vm_file)
-- get_file(new_vma->vm_file);
-+ vma_get_file(new_vma);
- if (new_vma->vm_ops && new_vma->vm_ops->open)
- new_vma->vm_ops->open(new_vma);
- vma_link(mm, new_vma, prev, rb_link, rb_parent);
+@@ -2963,7 +2962,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap,
+ if (anon_vma_clone(new_vma, vma))
+ goto out_free_mempol;
+ if (new_vma->vm_file)
+- get_file(new_vma->vm_file);
++ vma_get_file(new_vma);
+ if (new_vma->vm_ops && new_vma->vm_ops->open)
+ new_vma->vm_ops->open(new_vma);
+ vma_link(mm, new_vma, prev, rb_link, rb_parent);
diff --git a/mm/nommu.c b/mm/nommu.c
-index 58ea364..f937b7e 100644
+index ab14a20..fffc566 100644
--- a/mm/nommu.c
+++ b/mm/nommu.c
@@ -671,7 +671,7 @@ static void __put_nommu_region(struct vm_region *region)
@@ -498,7 +498,7 @@ index 58ea364..f937b7e 100644
put_nommu_region(vma->vm_region);
kmem_cache_free(vm_area_cachep, vma);
}
-@@ -1354,7 +1354,7 @@ unsigned long do_mmap_pgoff(struct file *file,
+@@ -1355,7 +1355,7 @@ unsigned long do_mmap(struct file *file,
goto error_just_free;
}
}
@@ -507,7 +507,7 @@ index 58ea364..f937b7e 100644
kmem_cache_free(vm_region_jar, region);
region = pregion;
result = start;
-@@ -1429,10 +1429,10 @@ error_just_free:
+@@ -1430,10 +1430,10 @@ error_just_free:
up_write(&nommu_region_sem);
error:
if (region->vm_file)
@@ -612,13 +612,13 @@ index 0000000..b323b8a
+ fput(pr);
+}
+#endif /* !CONFIG_MMU */
-aufs4.x-rcN standalone patch
+aufs4.3 standalone patch
diff --git a/fs/dcache.c b/fs/dcache.c
-index 0b40298..4844e61 100644
+index 8aa7f26..f997345 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
-@@ -1269,6 +1269,7 @@ rename_retry:
+@@ -1272,6 +1272,7 @@ rename_retry:
seq = 1;
goto again;
}
@@ -626,11 +626,23 @@ index 0b40298..4844e61 100644
/*
* Search for at least 1 mount point in the dentry's subdirs.
+diff --git a/fs/exec.c b/fs/exec.c
+index b06623a..b9206c5 100644
+--- a/fs/exec.c
++++ b/fs/exec.c
+@@ -103,6 +103,7 @@ bool path_noexec(const struct path *path)
+ return (path->mnt->mnt_flags & MNT_NOEXEC) ||
+ (path->mnt->mnt_sb->s_iflags & SB_I_NOEXEC);
+ }
++EXPORT_SYMBOL(path_noexec);
+
+ #ifdef CONFIG_USELIB
+ /*
diff --git a/fs/file_table.c b/fs/file_table.c
-index 7f9d407..8c9ec1d 100644
+index ad17e05..df66450 100644
--- a/fs/file_table.c
+++ b/fs/file_table.c
-@@ -146,6 +146,7 @@ over:
+@@ -147,6 +147,7 @@ over:
}
return ERR_PTR(-ENFILE);
}
@@ -638,28 +650,16 @@ index 7f9d407..8c9ec1d 100644
/**
* alloc_file - allocate and initialize a 'struct file'
-@@ -307,6 +308,7 @@ void put_filp(struct file *file)
+@@ -308,6 +309,7 @@ void put_filp(struct file *file)
file_free(file);
}
}
+EXPORT_SYMBOL(put_filp);
- void __init files_init(unsigned long mempages)
+ void __init files_init(void)
{
-diff --git a/fs/inode.c b/fs/inode.c
-index d30640f..1ecc715 100644
---- a/fs/inode.c
-+++ b/fs/inode.c
-@@ -58,6 +58,7 @@ static struct hlist_head *inode_hashtable __read_mostly;
- static __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_hash_lock);
-
- __cacheline_aligned_in_smp DEFINE_SPINLOCK(inode_sb_list_lock);
-+EXPORT_SYMBOL(inode_sb_list_lock);
-
- /*
- * Empty aops. Can be used for the cases where the user does not
diff --git a/fs/namespace.c b/fs/namespace.c
-index c7cb8a5..08723de 100644
+index 0570729..ec560d8 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -463,6 +463,7 @@ void __mnt_drop_write(struct vfsmount *mnt)
@@ -670,7 +670,7 @@ index c7cb8a5..08723de 100644
/**
* mnt_drop_write - give up write access to a mount
-@@ -1779,6 +1780,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
+@@ -1803,6 +1804,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg,
}
return 0;
}
@@ -715,7 +715,7 @@ index d16b62c..06ca6bc 100644
int fsnotify_fasync(int fd, struct file *file, int on)
{
diff --git a/fs/notify/mark.c b/fs/notify/mark.c
-index 92e48c7..d2c4b68 100644
+index fc0df44..325b5c6 100644
--- a/fs/notify/mark.c
+++ b/fs/notify/mark.c
@@ -109,6 +109,7 @@ void fsnotify_put_mark(struct fsnotify_mark *mark)
@@ -726,15 +726,15 @@ index 92e48c7..d2c4b68 100644
/* Calculate mask of events for a list of marks */
u32 fsnotify_recalc_mask(struct hlist_head *head)
-@@ -202,6 +203,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
- fsnotify_destroy_mark_locked(mark, group);
+@@ -208,6 +209,7 @@ void fsnotify_destroy_mark(struct fsnotify_mark *mark,
mutex_unlock(&group->mark_mutex);
+ fsnotify_free_mark(mark);
}
+EXPORT_SYMBOL(fsnotify_destroy_mark);
- /*
- * Destroy all marks in the given list. The marks must be already detached from
-@@ -376,6 +378,7 @@ err:
+ void fsnotify_destroy_marks(struct hlist_head *head, spinlock_t *lock)
+ {
+@@ -392,6 +394,7 @@ err:
return ret;
}
@@ -742,7 +742,7 @@ index 92e48c7..d2c4b68 100644
int fsnotify_add_mark(struct fsnotify_mark *mark, struct fsnotify_group *group,
struct inode *inode, struct vfsmount *mnt, int allow_dups)
-@@ -455,6 +458,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
+@@ -492,6 +495,7 @@ void fsnotify_init_mark(struct fsnotify_mark *mark,
atomic_set(&mark->refcnt, 1);
mark->free_mark = free_mark;
}
@@ -751,7 +751,7 @@ index 92e48c7..d2c4b68 100644
static int fsnotify_mark_destroy(void *ignored)
{
diff --git a/fs/open.c b/fs/open.c
-index e33dab2..b84b828 100644
+index b6f1e96..4ab0d4e 100644
--- a/fs/open.c
+++ b/fs/open.c
@@ -64,6 +64,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs,
@@ -823,10 +823,10 @@ index 072fee1..a7677af 100644
/* Compare an extended attribute value with the given value */
int vfs_xattr_cmp(struct dentry *dentry, const char *xattr_name,
diff --git a/security/commoncap.c b/security/commoncap.c
-index d103f5a4..393654e 100644
+index 1832cf7..987ff5f 100644
--- a/security/commoncap.c
+++ b/security/commoncap.c
-@@ -970,12 +970,14 @@ int cap_mmap_addr(unsigned long addr)
+@@ -1053,12 +1053,14 @@ int cap_mmap_addr(unsigned long addr)
}
return ret;
}
@@ -842,7 +842,7 @@ index d103f5a4..393654e 100644
#ifdef CONFIG_SECURITY
diff --git a/security/device_cgroup.c b/security/device_cgroup.c
-index 188c1d2..426d9af 100644
+index 03c1652..b00aa76 100644
--- a/security/device_cgroup.c
+++ b/security/device_cgroup.c
@@ -7,6 +7,7 @@
@@ -862,10 +862,10 @@ index 188c1d2..426d9af 100644
int devcgroup_inode_mknod(int mode, dev_t dev)
{
diff --git a/security/security.c b/security/security.c
-index 595fffa..346bad6 100644
+index 46f405c..54488b0 100644
--- a/security/security.c
+++ b/security/security.c
-@@ -438,6 +438,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
+@@ -433,6 +433,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry)
return 0;
return call_int_hook(path_rmdir, 0, dir, dentry);
}
@@ -873,7 +873,7 @@ index 595fffa..346bad6 100644
int security_path_unlink(struct path *dir, struct dentry *dentry)
{
-@@ -454,6 +455,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
+@@ -449,6 +450,7 @@ int security_path_symlink(struct path *dir, struct dentry *dentry,
return 0;
return call_int_hook(path_symlink, 0, dir, dentry, old_name);
}
@@ -881,7 +881,7 @@ index 595fffa..346bad6 100644
int security_path_link(struct dentry *old_dentry, struct path *new_dir,
struct dentry *new_dentry)
-@@ -462,6 +464,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
+@@ -457,6 +459,7 @@ int security_path_link(struct dentry *old_dentry, struct path *new_dir,
return 0;
return call_int_hook(path_link, 0, old_dentry, new_dir, new_dentry);
}
@@ -889,7 +889,7 @@ index 595fffa..346bad6 100644
int security_path_rename(struct path *old_dir, struct dentry *old_dentry,
struct path *new_dir, struct dentry *new_dentry,
-@@ -489,6 +492,7 @@ int security_path_truncate(struct path *path)
+@@ -484,6 +487,7 @@ int security_path_truncate(struct path *path)
return 0;
return call_int_hook(path_truncate, 0, path);
}
@@ -897,7 +897,7 @@ index 595fffa..346bad6 100644
int security_path_chmod(struct path *path, umode_t mode)
{
-@@ -496,6 +500,7 @@ int security_path_chmod(struct path *path, umode_t mode)
+@@ -491,6 +495,7 @@ int security_path_chmod(struct path *path, umode_t mode)
return 0;
return call_int_hook(path_chmod, 0, path, mode);
}
@@ -905,7 +905,7 @@ index 595fffa..346bad6 100644
int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
{
-@@ -503,6 +508,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
+@@ -498,6 +503,7 @@ int security_path_chown(struct path *path, kuid_t uid, kgid_t gid)
return 0;
return call_int_hook(path_chown, 0, path, uid, gid);
}
@@ -913,7 +913,7 @@ index 595fffa..346bad6 100644
int security_path_chroot(struct path *path)
{
-@@ -588,6 +594,7 @@ int security_inode_readlink(struct dentry *dentry)
+@@ -583,6 +589,7 @@ int security_inode_readlink(struct dentry *dentry)
return 0;
return call_int_hook(inode_readlink, 0, dentry);
}
@@ -921,7 +921,7 @@ index 595fffa..346bad6 100644
int security_inode_follow_link(struct dentry *dentry, struct inode *inode,
bool rcu)
-@@ -603,6 +610,7 @@ int security_inode_permission(struct inode *inode, int mask)
+@@ -598,6 +605,7 @@ int security_inode_permission(struct inode *inode, int mask)
return 0;
return call_int_hook(inode_permission, 0, inode, mask);
}
@@ -929,7 +929,7 @@ index 595fffa..346bad6 100644
int security_inode_setattr(struct dentry *dentry, struct iattr *attr)
{
-@@ -741,6 +749,7 @@ int security_file_permission(struct file *file, int mask)
+@@ -736,6 +744,7 @@ int security_file_permission(struct file *file, int mask)
return fsnotify_perm(file, mask);
}
@@ -937,7 +937,7 @@ index 595fffa..346bad6 100644
int security_file_alloc(struct file *file)
{
-@@ -800,6 +809,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
+@@ -795,6 +804,7 @@ int security_mmap_file(struct file *file, unsigned long prot,
return ret;
return ima_file_mmap(file, prot);
}
@@ -2743,8 +2743,8 @@ diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h
+#endif /* __AUFS_H__ */
diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
--- /usr/share/empty/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.c 2015-09-24 10:47:58.248052907 +0200
-@@ -0,0 +1,1414 @@
++++ linux/fs/aufs/branch.c 2015-11-11 17:21:46.915530388 +0100
+@@ -0,0 +1,1413 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -3301,7 +3301,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+
+/* ---------------------------------------------------------------------- */
+
-+static unsigned long long au_farray_cb(void *a,
++static unsigned long long au_farray_cb(struct super_block *sb, void *a,
+ unsigned long long max __maybe_unused,
+ void *arg)
+{
@@ -3309,7 +3309,6 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+ struct file **p, *f;
+ struct au_sphlhead *files;
+ struct au_finfo *finfo;
-+ struct super_block *sb = arg;
+
+ n = 0;
+ p = a;
@@ -3334,7 +3333,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+ unsigned long long *max)
+{
+ *max = atomic_long_read(&au_sbi(sb)->si_nfiles);
-+ return au_array_alloc(max, au_farray_cb, sb);
++ return au_array_alloc(max, au_farray_cb, sb, /*arg*/NULL);
+}
+
+static void au_farray_free(struct file **a, unsigned long long max)
@@ -3732,8 +3731,8 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+ au_br_do_free(br);
+}
+
-+static unsigned long long empty_cb(void *array, unsigned long long max,
-+ void *arg)
++static unsigned long long empty_cb(struct super_block *sb, void *array,
++ unsigned long long max, void *arg)
+{
+ return max;
+}
@@ -3778,7 +3777,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+ br_id = br->br_id;
+ opened = atomic_read(&br->br_count);
+ if (unlikely(opened)) {
-+ to_free = au_array_alloc(&opened, empty_cb, NULL);
++ to_free = au_array_alloc(&opened, empty_cb, sb, NULL);
+ err = PTR_ERR(to_free);
+ if (IS_ERR(to_free))
+ goto out;
@@ -4161,7 +4160,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c
+}
diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
--- /usr/share/empty/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/branch.h 2015-09-24 10:47:58.248052907 +0200
++++ linux/fs/aufs/branch.h 2015-11-11 17:21:46.915530388 +0100
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -4321,7 +4320,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h
+
+ err = 0;
+ exec_flag = oflag & __FMODE_EXEC;
-+ if (unlikely(exec_flag && (au_br_mnt(br)->mnt_flags & MNT_NOEXEC)))
++ if (unlikely(exec_flag && path_noexec(&br->br_path)))
+ err = -EACCES;
+
+ return err;
@@ -4486,7 +4485,7 @@ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk
+-include ${srctree}/${src}/conf_priv.mk
diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
--- /usr/share/empty/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/cpup.c 2015-09-24 10:47:58.248052907 +0200
++++ linux/fs/aufs/cpup.c 2015-11-11 17:21:46.915530388 +0100
@@ -0,0 +1,1319 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -5213,9 +5212,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c
+ goto out_parent;
+ if (unlikely(d_is_negative(h_src))) {
+ err = -EIO;
-+ AuIOErr("i%lu exists on a upper branch "
++ AuIOErr("i%lu exists on b%d "
+ "but not pseudo-linked\n",
-+ inode->i_ino);
++ inode->i_ino, cpg->bdst);
+ dput(h_src);
+ goto out_parent;
+ }
@@ -7436,8 +7435,8 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h
+#endif /* __AUFS_DEBUG_H__ */
diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
--- /usr/share/empty/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.c 2015-09-24 10:47:58.251386326 +0200
-@@ -0,0 +1,1105 @@
++++ linux/fs/aufs/dentry.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,1136 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -7632,7 +7631,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
+ if (dirperm1)
+ au_fset_lkup(args.flags, IGNORE_PERM);
+
-+ if (au_dbwh(dentry) >= 0)
++ if (au_dbwh(dentry) == bindex)
+ break;
+ if (!h_dentry)
+ continue;
@@ -8138,6 +8137,28 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
+ return err;
+}
+
++void au_refresh_dop(struct dentry *dentry, int force_reval)
++{
++ const struct dentry_operations *dop
++ = force_reval ? &aufs_dop : dentry->d_sb->s_d_op;
++ static const unsigned int mask
++ = DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE;
++
++ BUILD_BUG_ON(sizeof(mask) != sizeof(dentry->d_flags));
++
++ if (dentry->d_op == dop)
++ return;
++
++ AuDbg("%pd\n", dentry);
++ spin_lock(&dentry->d_lock);
++ if (dop == &aufs_dop)
++ dentry->d_flags |= mask;
++ else
++ dentry->d_flags &= ~mask;
++ dentry->d_op = dop;
++ spin_unlock(&dentry->d_lock);
++}
++
+int au_refresh_dentry(struct dentry *dentry, struct dentry *parent)
+{
+ int err, ebrange;
@@ -8493,8 +8514,10 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
+ if (!(flags & (LOOKUP_OPEN | LOOKUP_EMPTY))
+ && inode
+ && !(inode->i_state && I_LINKABLE)
-+ && (IS_DEADDIR(inode) || !inode->i_nlink))
++ && (IS_DEADDIR(inode) || !inode->i_nlink)) {
++ AuTraceErr(err);
+ goto out_inval;
++ }
+
+ do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE);
+ if (do_udba && inode) {
@@ -8503,8 +8526,10 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
+
+ if (bstart >= 0) {
+ h_inode = au_h_iptr(inode, bstart);
-+ if (h_inode && au_test_higen(inode, h_inode))
++ if (h_inode && au_test_higen(inode, h_inode)) {
++ AuTraceErr(err);
+ goto out_inval;
++ }
+ }
+ }
+
@@ -8543,10 +8568,15 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c
+ .d_weak_revalidate = aufs_d_revalidate,
+ .d_release = aufs_d_release
+};
++
++/* aufs_dop without d_revalidate */
++const struct dentry_operations aufs_dop_noreval = {
++ .d_release = aufs_d_release
++};
diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
--- /usr/share/empty/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dentry.h 2015-09-24 10:47:58.251386326 +0200
-@@ -0,0 +1,233 @@
++++ linux/fs/aufs/dentry.h 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,234 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -8593,7 +8623,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
+/* ---------------------------------------------------------------------- */
+
+/* dentry.c */
-+extern const struct dentry_operations aufs_dop;
++extern const struct dentry_operations aufs_dop, aufs_dop_noreval;
+struct au_branch;
+struct dentry *au_sio_lkup_one(struct qstr *name, struct dentry *parent);
+int au_h_verify(struct dentry *h_dentry, unsigned int udba, struct inode *h_dir,
@@ -8603,6 +8633,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h
+int au_lkup_neg(struct dentry *dentry, aufs_bindex_t bindex, int wh);
+int au_refresh_dentry(struct dentry *dentry, struct dentry *parent);
+int au_reval_dpath(struct dentry *dentry, unsigned int sigen);
++void au_refresh_dop(struct dentry *dentry, int force_reval);
+
+/* dinfo.c */
+void au_di_init_once(void *_di);
@@ -11945,8 +11976,8 @@ diff -urN /usr/share/empty/fs/aufs/fhsm.c linux/fs/aufs/fhsm.c
+}
diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
--- /usr/share/empty/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/file.c 2015-09-24 10:47:58.251386326 +0200
-@@ -0,0 +1,841 @@
++++ linux/fs/aufs/file.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,844 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -12744,9 +12775,11 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
+{ AuUnsupport(); }
+static int aufs_releasepage(struct page *page, gfp_t gfp)
+{ AuUnsupport(); return 0; }
++#if 0 /* called by memory compaction regardless file */
+static int aufs_migratepage(struct address_space *mapping, struct page *newpage,
+ struct page *page, enum migrate_mode mode)
+{ AuUnsupport(); return 0; }
++#endif
+static int aufs_launder_page(struct page *page)
+{ AuUnsupport(); return 0; }
+static int aufs_is_partially_uptodate(struct page *page,
@@ -12779,7 +12812,8 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c
+ /* no bmap, no block device */
+ .invalidatepage = aufs_invalidatepage,
+ .releasepage = aufs_releasepage,
-+ .migratepage = aufs_migratepage,
++ /* is fallback_migrate_page ok? */
++ /* .migratepage = aufs_migratepage, */
+ .launder_page = aufs_launder_page,
+ .is_partially_uptodate = aufs_is_partially_uptodate,
+ .is_dirty_writeback = aufs_is_dirty_writeback,
@@ -18079,8 +18113,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c
+}
diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
--- /usr/share/empty/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,1483 @@
++++ linux/fs/aufs/i_op.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,1482 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -18104,13 +18138,12 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+
+#include <linux/device_cgroup.h>
+#include <linux/fs_stack.h>
-+#include <linux/mm.h>
+#include <linux/namei.h>
+#include <linux/security.h>
+#include "aufs.h"
+
+static int h_permission(struct inode *h_inode, int mask,
-+ struct vfsmount *h_mnt, int brperm)
++ struct path *h_path, int brperm)
+{
+ int err;
+ const unsigned char write_mask = !!(mask & (MAY_WRITE | MAY_APPEND));
@@ -18119,7 +18152,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+ if ((write_mask && IS_IMMUTABLE(h_inode))
+ || ((mask & MAY_EXEC)
+ && S_ISREG(h_inode->i_mode)
-+ && ((h_mnt->mnt_flags & MNT_NOEXEC)
++ && (path_noexec(h_path)
+ || !(h_inode->i_mode & S_IXUGO))))
+ goto out;
+
@@ -18204,7 +18237,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+ err = 0;
+ bindex = au_ibstart(inode);
+ br = au_sbr(sb, bindex);
-+ err = h_permission(h_inode, mask, au_br_mnt(br), br->br_perm);
++ err = h_permission(h_inode, mask, &br->br_path, br->br_perm);
+ if (write_mask
+ && !err
+ && !special_file(h_inode->i_mode)) {
@@ -18230,7 +18263,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+ break;
+
+ br = au_sbr(sb, bindex);
-+ err = h_permission(h_inode, mask, au_br_mnt(br),
++ err = h_permission(h_inode, mask, &br->br_path,
+ br->br_perm);
+ }
+ }
@@ -19380,7 +19413,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+ int err;
+ aufs_bindex_t bindex;
+
-+ ret = NULL; /* supress a warning */
++ ret = NULL; /* suppress a warning */
+ err = aufs_read_lock(dentry, AuLock_IR | AuLock_GEN);
+ if (unlikely(err))
+ goto out;
@@ -20080,7 +20113,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
+}
diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
--- /usr/share/empty/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/i_op_ren.c 2015-09-24 10:47:58.254719746 +0200
++++ linux/fs/aufs/i_op_ren.c 2015-11-11 17:21:46.918863802 +0100
@@ -0,0 +1,1017 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -20174,7 +20207,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
+/*
+ * functions for reverting.
+ * when an error happened in a single rename systemcall, we should revert
-+ * everything as if nothing happend.
++ * everything as if nothing happened.
+ * we don't need to revert the copied-up/down the parent dir since they are
+ * harmless.
+ */
@@ -20956,7 +20989,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
+
+ /*
+ * is it possible?
-+ * yes, it happend (in linux-3.3-rcN) but I don't know why.
++ * yes, it happened (in linux-3.3-rcN) but I don't know why.
+ * there may exist a problem somewhere else.
+ */
+ err = -EINVAL;
@@ -21290,8 +21323,8 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig
+endif
diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
--- /usr/share/empty/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/loop.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,145 @@
++++ linux/fs/aufs/loop.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -21421,7 +21454,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
+ int err;
+ struct super_block *sb __maybe_unused;
+
-+ AuDebugOn(sizeof(sb->s_magic) != sizeof(unsigned long));
++ BUILD_BUG_ON(sizeof(sb->s_magic) != sizeof(unsigned long));
+
+ err = 0;
+ au_warn_loopback_array = kcalloc(au_warn_loopback_step,
@@ -21434,7 +21467,8 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c
+
+void au_loopback_fin(void)
+{
-+ symbol_put(loop_backing_file);
++ if (backing_file_func)
++ symbol_put(loop_backing_file);
+ kfree(au_warn_loopback_array);
+}
diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h
@@ -21577,8 +21611,8 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile
+aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o
diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
--- /usr/share/empty/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/module.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,210 @@
++++ linux/fs/aufs/module.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -21653,11 +21687,10 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
+
+ /* excluding AuCache_HNOTIFY */
+ BUILD_BUG_ON(AuCache_HNOTIFY + 1 != AuCache_Last);
-+ for (i = 0; i < AuCache_HNOTIFY; i++)
-+ if (au_cachep[i]) {
-+ kmem_cache_destroy(au_cachep[i]);
-+ au_cachep[i] = NULL;
-+ }
++ for (i = 0; i < AuCache_HNOTIFY; i++) {
++ kmem_cache_destroy(au_cachep[i]);
++ au_cachep[i] = NULL;
++ }
+}
+
+/* ---------------------------------------------------------------------- */
@@ -21701,7 +21734,15 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
+
+int au_seq_path(struct seq_file *seq, struct path *path)
+{
-+ return seq_path(seq, path, au_esc_chars);
++ int err;
++
++ err = seq_path(seq, path, au_esc_chars);
++ if (err > 0)
++ err = 0;
++ else if (err < 0)
++ err = -ENOMEM;
++
++ return err;
+}
+
+/* ---------------------------------------------------------------------- */
@@ -21899,8 +21940,8 @@ diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h
+#endif /* __AUFS_MODULE_H__ */
diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
--- /usr/share/empty/fs/aufs/mvdown.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/mvdown.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,694 @@
++++ linux/fs/aufs/mvdown.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,703 @@
+/*
+ * Copyright (C) 2011-2015 Junjiro R. Okajima
+ *
@@ -22269,6 +22310,12 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ au_set_dbstart(a->dentry, a->mvd_bdst);
+ au_set_h_iptr(a->inode, a->mvd_bsrc, NULL, /*flags*/0);
+ au_set_ibstart(a->inode, a->mvd_bdst);
++ } else {
++ /* hide the lower */
++ au_set_h_dptr(a->dentry, a->mvd_bdst, NULL);
++ au_set_dbend(a->dentry, a->mvd_bsrc);
++ au_set_h_iptr(a->inode, a->mvd_bdst, NULL, /*flags*/0);
++ au_set_ibend(a->inode, a->mvd_bsrc);
+ }
+ if (au_dbend(a->dentry) < a->mvd_bdst)
+ au_set_dbend(a->dentry, a->mvd_bdst);
@@ -22524,7 +22571,9 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ int err, e;
+ unsigned char dmsg;
+ struct au_mvd_args *args;
++ struct inode *inode;
+
++ inode = d_inode(dentry);
+ err = -EPERM;
+ if (unlikely(!capable(CAP_SYS_ADMIN)))
+ goto out;
@@ -22546,7 +22595,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ args->mvdown.flags &= ~(AUFS_MVDOWN_ROLOWER_R | AUFS_MVDOWN_ROUPPER_R);
+ args->mvdown.au_errno = 0;
+ args->dentry = dentry;
-+ args->inode = d_inode(dentry);
++ args->inode = inode;
+ args->sb = dentry->d_sb;
+
+ err = -ENOENT;
@@ -22560,7 +22609,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ goto out_dir;
+ }
+
-+ mutex_lock_nested(&args->inode->i_mutex, I_MUTEX_CHILD);
++ mutex_lock_nested(&inode->i_mutex, I_MUTEX_CHILD);
+ err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH);
+ if (unlikely(err))
+ goto out_inode;
@@ -22575,15 +22624,16 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ goto out_parent;
+
+ au_cpup_attr_timesizes(args->dir);
-+ au_cpup_attr_timesizes(args->inode);
-+ au_cpup_igen(args->inode, au_h_iptr(args->inode, args->mvd_bdst));
++ au_cpup_attr_timesizes(inode);
++ if (!(args->mvdown.flags & AUFS_MVDOWN_KUPPER))
++ au_cpup_igen(inode, au_h_iptr(inode, args->mvd_bdst));
+ /* au_digen_dec(dentry); */
+
+out_parent:
+ di_write_unlock(args->parent);
+ aufs_read_unlock(dentry, AuLock_DW);
+out_inode:
-+ mutex_unlock(&args->inode->i_mutex);
++ mutex_unlock(&inode->i_mutex);
+out_dir:
+ mutex_unlock(&args->dir->i_mutex);
+out_free:
@@ -22597,8 +22647,8 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+}
diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
--- /usr/share/empty/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,1835 @@
++++ linux/fs/aufs/opts.c 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,1859 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -24169,10 +24219,10 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+{
+ int err, fhsm;
+ aufs_bindex_t bindex, bend;
-+ unsigned char do_plink, skip, do_free;
++ unsigned char do_plink, skip, do_free, can_no_dreval;
+ struct au_branch *br;
+ struct au_wbr *wbr;
-+ struct dentry *root;
++ struct dentry *root, *dentry;
+ struct inode *dir, *h_dir;
+ struct au_sbinfo *sbinfo;
+ struct au_hinode *hdir;
@@ -24202,6 +24252,8 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ root = sb->s_root;
+ dir = d_inode(root);
+ do_plink = !!au_opt_test(sbinfo->si_mntflags, PLINK);
++ can_no_dreval = !!au_opt_test((sbinfo->si_mntflags | pending),
++ UDBA_NONE);
+ bend = au_sbend(sb);
+ for (bindex = 0; !err && bindex <= bend; bindex++) {
+ skip = 0;
@@ -24250,6 +24302,15 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ if (wbr)
+ wbr_wh_read_unlock(wbr);
+
++ if (can_no_dreval) {
++ dentry = br->br_path.dentry;
++ spin_lock(&dentry->d_lock);
++ if (dentry->d_flags &
++ (DCACHE_OP_REVALIDATE | DCACHE_OP_WEAK_REVALIDATE))
++ can_no_dreval = 0;
++ spin_unlock(&dentry->d_lock);
++ }
++
+ if (au_br_fhsm(br->br_perm)) {
+ fhsm++;
+ AuDebugOn(!br->br_fhsm);
@@ -24273,6 +24334,11 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ }
+ }
+
++ if (can_no_dreval)
++ au_fset_si(sbinfo, NO_DREVAL);
++ else
++ au_fclr_si(sbinfo, NO_DREVAL);
++
+ if (fhsm >= 2) {
+ au_fset_si(sbinfo, FHSM);
+ for (bindex = bend; bindex >= 0; bindex--) {
@@ -24384,6 +24450,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+int au_opts_remount(struct super_block *sb, struct au_opts *opts)
+{
+ int err, rerr;
++ unsigned char no_dreval;
+ struct inode *dir;
+ struct au_opt_xino *opt_xino;
+ struct au_opt *opt;
@@ -24391,9 +24458,9 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+
+ SiMustWriteLock(sb);
+
++ err = 0;
+ dir = d_inode(sb->s_root);
+ sbinfo = au_sbi(sb);
-+ err = 0;
+ opt_xino = NULL;
+ opt = opts->opt;
+ while (err >= 0 && opt->type != Opt_tail) {
@@ -24409,10 +24476,14 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ AuTraceErr(err);
+ /* go on even err */
+
++ no_dreval = !!au_ftest_si(sbinfo, NO_DREVAL);
+ rerr = au_opts_verify(sb, opts->sb_flags, /*pending*/0);
+ if (unlikely(rerr && !err))
+ err = rerr;
+
++ if (no_dreval != !!au_ftest_si(sbinfo, NO_DREVAL))
++ au_fset_opts(opts->flags, REFRESH_DOP);
++
+ if (au_ftest_opts(opts->flags, TRUNC_XIB)) {
+ rerr = au_xib_trunc(sb);
+ if (unlikely(rerr && !err))
@@ -24421,7 +24492,10 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+
+ /* will be handled by the caller */
+ if (!au_ftest_opts(opts->flags, REFRESH)
-+ && (opts->given_udba || au_opt_test(sbinfo->si_mntflags, XINO)))
++ && (opts->given_udba
++ || au_opt_test(sbinfo->si_mntflags, XINO)
++ || au_ftest_opts(opts->flags, REFRESH_DOP)
++ ))
+ au_fset_opts(opts->flags, REFRESH);
+
+ AuDbg("status 0x%x\n", opts->flags);
@@ -24436,8 +24510,8 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+}
diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
--- /usr/share/empty/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/opts.h 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,210 @@
++++ linux/fs/aufs/opts.h 2015-11-11 17:21:46.918863802 +0100
+@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -24614,6 +24688,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h
+#define AuOpts_REFRESH (1 << 1)
+#define AuOpts_TRUNC_XIB (1 << 2)
+#define AuOpts_REFRESH_DYAOP (1 << 3)
++#define AuOpts_REFRESH_DOP (1 << 4)
+#define au_ftest_opts(flags, name) ((flags) & AuOpts_##name)
+#define au_fset_opts(flags, name) \
+ do { (flags) |= AuOpts_##name; } while (0)
@@ -26101,8 +26176,8 @@ diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h
+#endif /* __AUFS_RWSEM_H__ */
diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
--- /usr/share/empty/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sbinfo.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,360 @@
++++ linux/fs/aufs/sbinfo.c 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,363 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -26355,7 +26430,10 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
+
+ if (au_ftest_lock(flags, GEN)) {
+ err = au_digen_test(dentry, au_sigen(sb));
-+ AuDebugOn(!err && au_dbrange_test(dentry));
++ if (!au_opt_test(au_mntflags(sb), UDBA_NONE))
++ AuDebugOn(!err && au_dbrange_test(dentry));
++ else if (!err)
++ err = au_dbrange_test(dentry);
+ if (unlikely(err))
+ aufs_read_unlock(dentry, flags);
+ }
@@ -26580,8 +26658,8 @@ diff -urN /usr/share/empty/fs/aufs/spl.h linux/fs/aufs/spl.h
+#endif /* __AUFS_SPL_H__ */
diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
--- /usr/share/empty/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,1004 @@
++++ linux/fs/aufs/super.c 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,1035 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -26688,15 +26766,15 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ path.mnt = au_br_mnt(br);
+ path.dentry = hdp[bindex].hd_dentry;
+ err = au_seq_path(seq, &path);
-+ if (err > 0) {
++ if (!err) {
+ au_optstr_br_perm(&perm, br->br_perm);
-+ err = seq_printf(seq, "=%s", perm.a);
-+ if (err == -1)
-+ err = -E2BIG;
++ seq_printf(seq, "=%s", perm.a);
++ if (bindex != bend)
++ seq_putc(seq, ':');
+ }
-+ if (!err && bindex != bend)
-+ err = seq_putc(seq, ':');
+ }
++ if (unlikely(err || seq_has_overflowed(seq)))
++ err = -E2BIG;
+
+ return err;
+}
@@ -27063,7 +27141,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ }
+}
+
-+void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, void *arg)
++void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb,
++ struct super_block *sb, void *arg)
+{
+ void *array;
+ unsigned long long n, sz;
@@ -27088,7 +27167,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ goto out;
+ }
+
-+ n = cb(array, *hint, arg);
++ n = cb(sb, array, *hint, arg);
+ AuDebugOn(n > *hint);
+
+out:
@@ -27096,7 +27175,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ return array;
+}
+
-+static unsigned long long au_iarray_cb(void *a,
++static unsigned long long au_iarray_cb(struct super_block *sb, void *a,
+ unsigned long long max __maybe_unused,
+ void *arg)
+{
@@ -27107,7 +27186,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ n = 0;
+ p = a;
+ head = arg;
-+ spin_lock(&inode_sb_list_lock);
++ spin_lock(&sb->s_inode_list_lock);
+ list_for_each_entry(inode, head, i_sb_list) {
+ if (!is_bad_inode(inode)
+ && au_ii(inode)->ii_bstart >= 0) {
@@ -27121,7 +27200,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ spin_unlock(&inode->i_lock);
+ }
+ }
-+ spin_unlock(&inode_sb_list_lock);
++ spin_unlock(&sb->s_inode_list_lock);
+
+ return n;
+}
@@ -27129,7 +27208,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max)
+{
+ *max = atomic_long_read(&au_sbi(sb)->si_ninodes);
-+ return au_array_alloc(max, au_iarray_cb, &sb->s_inodes);
++ return au_array_alloc(max, au_iarray_cb, sb, &sb->s_inodes);
+}
+
+void au_iarray_free(struct inode **a, unsigned long long max)
@@ -27165,7 +27244,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+
+static int au_do_refresh_d(struct dentry *dentry, unsigned int sigen,
+ struct au_sbinfo *sbinfo,
-+ const unsigned int dir_flags)
++ const unsigned int dir_flags, unsigned int do_dop)
+{
+ int err;
+ struct dentry *parent;
@@ -27188,11 +27267,17 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ }
+ dput(parent);
+
++ if (!err) {
++ if (do_dop)
++ au_refresh_dop(dentry, /*force_reval*/0);
++ } else
++ au_refresh_dop(dentry, /*force_reval*/1);
++
+ AuTraceErr(err);
+ return err;
+}
+
-+static int au_refresh_d(struct super_block *sb)
++static int au_refresh_d(struct super_block *sb, unsigned int do_dop)
+{
+ int err, i, j, ndentry, e;
+ unsigned int sigen;
@@ -27203,6 +27288,9 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ struct dentry *root = sb->s_root;
+ const unsigned int dir_flags = au_hi_flags(d_inode(root), /*isdir*/1);
+
++ if (do_dop)
++ au_refresh_dop(root, /*force_reval*/0);
++
+ err = au_dpages_init(&dpages, GFP_NOFS);
+ if (unlikely(err))
+ goto out;
@@ -27218,7 +27306,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ ndentry = dpage->ndentry;
+ for (j = 0; j < ndentry; j++) {
+ d = dentries[j];
-+ e = au_do_refresh_d(d, sigen, sbinfo, dir_flags);
++ e = au_do_refresh_d(d, sigen, sbinfo, dir_flags,
++ do_dop);
+ if (unlikely(e && !err))
+ err = e;
+ /* go on even err */
@@ -27268,7 +27357,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ return err;
+}
+
-+static void au_remount_refresh(struct super_block *sb)
++static void au_remount_refresh(struct super_block *sb, unsigned int do_dop)
+{
+ int err, e;
+ unsigned int udba;
@@ -27276,9 +27365,11 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ struct dentry *root;
+ struct inode *inode;
+ struct au_branch *br;
++ struct au_sbinfo *sbi;
+
+ au_sigen_inc(sb);
-+ au_fclr_si(au_sbi(sb), FAILED_REFRESH_DIR);
++ sbi = au_sbi(sb);
++ au_fclr_si(sbi, FAILED_REFRESH_DIR);
+
+ root = sb->s_root;
+ DiMustNoWaiters(root);
@@ -27297,8 +27388,19 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ }
+ au_hn_reset(inode, au_hi_flags(inode, /*isdir*/1));
+
++ if (do_dop) {
++ if (au_ftest_si(sbi, NO_DREVAL)) {
++ AuDebugOn(sb->s_d_op == &aufs_dop_noreval);
++ sb->s_d_op = &aufs_dop_noreval;
++ } else {
++ AuDebugOn(sb->s_d_op == &aufs_dop);
++ sb->s_d_op = &aufs_dop;
++ }
++ pr_info("reset to %pf\n", sb->s_d_op);
++ }
++
+ di_write_unlock(root);
-+ err = au_refresh_d(sb);
++ err = au_refresh_d(sb, do_dop);
+ e = au_refresh_i(sb);
+ if (unlikely(e && !err))
+ err = e;
@@ -27374,7 +27476,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ au_opts_free(&opts);
+
+ if (au_ftest_opts(opts.flags, REFRESH))
-+ au_remount_refresh(sb);
++ au_remount_refresh(sb, au_ftest_opts(opts.flags, REFRESH_DOP));
+
+ if (au_ftest_opts(opts.flags, REFRESH_DYAOP)) {
+ mntflags = au_mntflags(sb);
@@ -27450,6 +27552,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+{
+ int err;
+ struct au_opts opts;
++ struct au_sbinfo *sbinfo;
+ struct dentry *root;
+ struct inode *inode;
+ char *arg = raw_data;
@@ -27471,6 +27574,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ err = au_si_alloc(sb);
+ if (unlikely(err))
+ goto out_opts;
++ sbinfo = au_sbi(sb);
+
+ /* all timestamps always follow the ones on the branch */
+ sb->s_flags |= MS_NOATIME | MS_NODIRATIME;
@@ -27506,6 +27610,11 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ aufs_write_lock(root);
+ err = au_opts_mount(sb, &opts);
+ au_opts_free(&opts);
++ if (!err && au_ftest_si(sbinfo, NO_DREVAL)) {
++ sb->s_d_op = &aufs_dop_noreval;
++ pr_info("%pf\n", sb->s_d_op);
++ au_refresh_dop(root, /*force_reval*/0);
++ }
+ aufs_write_unlock(root);
+ mutex_unlock(&inode->i_mutex);
+ if (!err)
@@ -27515,8 +27624,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ dput(root);
+ sb->s_root = NULL;
+out_info:
-+ dbgaufs_si_fin(au_sbi(sb));
-+ kobject_put(&au_sbi(sb)->si_kobj);
++ dbgaufs_si_fin(sbinfo);
++ kobject_put(&sbinfo->si_kobj);
+ sb->s_fs_info = NULL;
+out_opts:
+ free_page((unsigned long)opts.opt);
@@ -27565,7 +27674,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ sbinfo->si_wbr_create_ops->fin(sb);
+ if (au_opt_test(sbinfo->si_mntflags, UDBA_HNOTIFY)) {
+ au_opt_set_udba(sbinfo->si_mntflags, UDBA_NONE);
-+ au_remount_refresh(sb);
++ au_remount_refresh(sb, /*do_dop*/0);
+ }
+ if (au_opt_test(sbinfo->si_mntflags, PLINK))
+ au_plink_put(sb, /*verbose*/1);
@@ -27588,8 +27697,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+};
diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
--- /usr/share/empty/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/super.h 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,638 @@
++++ linux/fs/aufs/super.h 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,640 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -27816,6 +27925,7 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
+#define AuSi_FAILED_REFRESH_DIR 1
+
+#define AuSi_FHSM (1 << 1) /* fhsm is active now */
++#define AuSi_NO_DREVAL (1 << 2) /* disable all d_revalidate */
+
+#ifndef CONFIG_AUFS_FHSM
+#undef AuSi_FHSM
@@ -27866,10 +27976,11 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
+/* super.c */
+extern struct file_system_type aufs_fs_type;
+struct inode *au_iget_locked(struct super_block *sb, ino_t ino);
-+typedef unsigned long long (*au_arraycb_t)(void *array, unsigned long long max,
-+ void *arg);
++typedef unsigned long long (*au_arraycb_t)(struct super_block *sb, void *array,
++ unsigned long long max, void *arg);
+void au_array_free(void *array);
-+void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb, void *arg);
++void *au_array_alloc(unsigned long long *hint, au_arraycb_t cb,
++ struct super_block *sb, void *arg);
+struct inode **au_iarray_alloc(struct super_block *sb, unsigned long long *max);
+void au_iarray_free(struct inode **a, unsigned long long max);
+
@@ -28443,8 +28554,8 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h
+#endif /* __SYSAUFS_H__ */
diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
--- /usr/share/empty/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysfs.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,372 @@
++++ linux/fs/aufs/sysfs.c 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,376 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -28544,16 +28655,18 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
+ case AuBrSysfs_BR:
+ path.mnt = au_br_mnt(br);
+ path.dentry = au_h_dptr(root, bindex);
-+ au_seq_path(seq, &path);
-+ au_optstr_br_perm(&perm, br->br_perm);
-+ err = seq_printf(seq, "=%s\n", perm.a);
++ err = au_seq_path(seq, &path);
++ if (!err) {
++ au_optstr_br_perm(&perm, br->br_perm);
++ seq_printf(seq, "=%s\n", perm.a);
++ }
+ break;
+ case AuBrSysfs_BRID:
-+ err = seq_printf(seq, "%d\n", br->br_id);
++ seq_printf(seq, "%d\n", br->br_id);
+ break;
+ }
+ di_read_unlock(root, !AuLock_IR);
-+ if (err == -1)
++ if (unlikely(err || seq_has_overflowed(seq)))
+ err = -E2BIG;
+
+ return err;
@@ -28707,9 +28820,11 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
+ if (unlikely(err))
+ break;
+
-+ au_seq_path(seq, &br->br_path);
-+ err = seq_putc(seq, '\0');
-+ if (!err && seq->count <= sz) {
++ err = au_seq_path(seq, &br->br_path);
++ if (unlikely(err))
++ break;
++ seq_putc(seq, '\0');
++ if (!seq_has_overflowed(seq)) {
+ err = copy_to_user(arg->path, seq->buf, seq->count);
+ seq->count = 0;
+ if (unlikely(err))
@@ -28819,7 +28934,7 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c
+}
diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
--- /usr/share/empty/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/sysrq.c 2015-09-24 10:47:58.254719746 +0200
++++ linux/fs/aufs/sysrq.c 2015-11-11 17:21:46.922197217 +0100
@@ -0,0 +1,157 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -28900,14 +29015,14 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
+ struct inode *i;
+
+ pr("isolated inode\n");
-+ spin_lock(&inode_sb_list_lock);
++ spin_lock(&sb->s_inode_list_lock);
+ list_for_each_entry(i, &sb->s_inodes, i_sb_list) {
+ spin_lock(&i->i_lock);
+ if (1 || hlist_empty(&i->i_dentry))
+ au_dpri_inode(i);
+ spin_unlock(&i->i_lock);
+ }
-+ spin_unlock(&inode_sb_list_lock);
++ spin_unlock(&sb->s_inode_list_lock);
+ }
+#endif
+ pr("files\n");
@@ -28980,7 +29095,7 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c
+}
diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
--- /usr/share/empty/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vdir.c 2015-09-24 10:47:58.258053165 +0200
++++ linux/fs/aufs/vdir.c 2015-11-11 17:21:46.922197217 +0100
@@ -0,0 +1,888 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -29037,7 +29152,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
+
+/* ---------------------------------------------------------------------- */
+
-+/* estimate the apropriate size for name hash table */
++/* estimate the appropriate size for name hash table */
+unsigned int au_rdhash_est(loff_t sz)
+{
+ unsigned int n;
@@ -29363,7 +29478,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c
+
+ vdir->vd_deblk_sz = au_sbi(sb)->si_rdblk;
+ if (!vdir->vd_deblk_sz) {
-+ /* estimate the apropriate size for deblk */
++ /* estimate the appropriate size for deblk */
+ vdir->vd_deblk_sz = au_dir_size(file, /*dentry*/NULL);
+ /* pr_info("vd_deblk_sz %u\n", vdir->vd_deblk_sz); */
+ }
@@ -30724,8 +30839,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c
+}
diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
--- /usr/share/empty/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/vfsub.h 2015-09-24 10:47:58.258053165 +0200
-@@ -0,0 +1,286 @@
++++ linux/fs/aufs/vfsub.h 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,287 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -30760,7 +30875,6 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
+/* copied from linux/fs/internal.h */
+/* todo: BAD approach!! */
+extern void __mnt_drop_write(struct vfsmount *);
-+extern spinlock_t inode_sb_list_lock;
+extern int open_check_o_direct(struct file *f);
+
+/* ---------------------------------------------------------------------- */
@@ -30924,6 +31038,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
+}
+#endif
+
++#if 0 /* reserved */
+static inline void vfsub_touch_atime(struct vfsmount *h_mnt,
+ struct dentry *h_dentry)
+{
@@ -30934,6 +31049,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h
+ touch_atime(&h_path);
+ vfsub_update_h_iattr(&h_path, /*did*/NULL); /*ignore*/
+}
++#endif
+
+static inline int vfsub_update_time(struct inode *h_inode, struct timespec *ts,
+ int flags)
@@ -33599,8 +33715,8 @@ diff -urN /usr/share/empty/fs/aufs/xattr.c linux/fs/aufs/xattr.c
+#endif
diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
--- /usr/share/empty/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/xino.c 2015-09-24 10:47:58.258053165 +0200
-@@ -0,0 +1,1297 @@
++++ linux/fs/aufs/xino.c 2015-11-11 17:21:46.922197217 +0100
+@@ -0,0 +1,1296 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -34885,10 +35001,9 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
+ int err;
+
+ err = au_seq_path(seq, &file->f_path);
-+ if (unlikely(err < 0))
++ if (unlikely(err))
+ goto out;
+
-+ err = 0;
+#define Deleted "\\040(deleted)"
+ seq->count -= sizeof(Deleted) - 1;
+ AuDebugOn(memcmp(seq->buf + seq->count, Deleted,
@@ -34900,7 +35015,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c
+}
diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/linux/aufs_type.h
--- /usr/share/empty/include/uapi/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/include/uapi/linux/aufs_type.h 2015-09-24 10:47:58.258053165 +0200
++++ linux/include/uapi/linux/aufs_type.h 2015-11-11 17:22:06.926020273 +0100
@@ -0,0 +1,419 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -34943,7 +35058,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
+
+#include <linux/limits.h>
+
-+#define AUFS_VERSION "4.x-rcN-20150921"
++#define AUFS_VERSION "4.3-20151109"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -35321,10 +35436,10 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
+#define AUFS_CTL_FHSM_FD _IOW(AuCtlType, AuCtl_FHSM_FD, int)
+
+#endif /* __AUFS_TYPE_H__ */
-aufs4.x-rcN loopback patch
+aufs4.3 loopback patch
diff --git a/drivers/block/loop.c b/drivers/block/loop.c
-index 23103ad..5c3263f 100644
+index 291ec9e..1b8190d 100644
--- a/drivers/block/loop.c
+++ b/drivers/block/loop.c
@@ -417,7 +417,7 @@ static int do_req_filebacked(struct loop_device *lo, struct request *rq)
@@ -35516,11 +35631,11 @@ index 91c2ce7..d4ee5a7 100644
if (file->f_mapping != h_file->f_mapping) {
file->f_mapping = h_file->f_mapping;
diff --git a/fs/aufs/loop.c b/fs/aufs/loop.c
-index 69f7e96..7941063 100644
+index f324758..4555e7b 100644
--- a/fs/aufs/loop.c
+++ b/fs/aufs/loop.c
-@@ -130,3 +130,19 @@ void au_loopback_fin(void)
- symbol_put(loop_backing_file);
+@@ -131,3 +131,19 @@ void au_loopback_fin(void)
+ symbol_put(loop_backing_file);
kfree(au_warn_loopback_array);
}
+
@@ -35565,10 +35680,10 @@ index 6d9864d..3322557 100644
#endif /* __KERNEL__ */
diff --git a/fs/aufs/super.c b/fs/aufs/super.c
-index ee5780d..da35759 100644
+index 1b25343..3b0c6c5 100644
--- a/fs/aufs/super.c
+++ b/fs/aufs/super.c
-@@ -807,7 +807,10 @@ static const struct super_operations aufs_sop = {
+@@ -831,7 +831,10 @@ static const struct super_operations aufs_sop = {
.statfs = aufs_statfs,
.put_super = aufs_put_super,
.sync_fs = aufs_sync_fs,
@@ -35581,10 +35696,10 @@ index ee5780d..da35759 100644
/* ---------------------------------------------------------------------- */
diff --git a/include/linux/fs.h b/include/linux/fs.h
-index 86080ea..5f8e0f2 100644
+index fabd9d7a..90174cf 100644
--- a/include/linux/fs.h
+++ b/include/linux/fs.h
-@@ -1708,6 +1708,10 @@ struct super_operations {
+@@ -1734,6 +1734,10 @@ struct super_operations {
struct shrink_control *);
long (*free_cached_objects)(struct super_block *,
struct shrink_control *);
diff --git a/kernel-imq.patch b/kernel-imq.patch
index a8cd77e..d50ab11 100644
--- a/kernel-imq.patch
+++ b/kernel-imq.patch
@@ -1,5 +1,5 @@
diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
-index c18f9e6..ec43bde 100644
+index d18eb60..739a98a 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -234,6 +234,125 @@ config RIONET_RX_SIZE
@@ -129,7 +129,7 @@ index c18f9e6..ec43bde 100644
tristate "Universal TUN/TAP device driver support"
depends on INET
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
-index c12cb22..03b82c6 100644
+index 900b0c5..e093402 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -10,6 +10,7 @@ obj-$(CONFIG_IPVLAN) += ipvlan/
@@ -1074,10 +1074,10 @@ index 0000000..1babb09
+#endif /* _IMQ_H */
+
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
-index e20979d..9c8f9a1 100644
+index 2d15e38..ebbecce 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
-@@ -3279,6 +3279,19 @@ static inline void netif_tx_unlock_bh(struct net_device *dev)
+@@ -3330,6 +3330,19 @@ static inline void netif_tx_unlock_bh(struct net_device *dev)
} \
}
@@ -1145,20 +1145,21 @@ index 0000000..198ac01
+#endif /* _IP6T_IMQ_H */
+
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
-index 9b88536..61686b0 100644
+index 2b0a30a..f8e727c 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
-@@ -37,6 +37,9 @@
- #include <net/flow_dissector.h>
+@@ -38,6 +38,10 @@
#include <linux/splice.h>
#include <linux/in6.h>
+ #include <net/flow.h>
+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
+#include <linux/imq.h>
+#endif
++
/* A. Checksumming of received packets by device.
*
-@@ -548,6 +551,9 @@ struct sk_buff {
+@@ -557,6 +561,9 @@ struct sk_buff {
* first. This is owned by whoever has the skb queued ATM.
*/
char cb[48] __aligned(8);
@@ -1168,7 +1169,7 @@ index 9b88536..61686b0 100644
unsigned long _skb_refdst;
void (*destructor)(struct sk_buff *skb);
-@@ -557,6 +563,9 @@ struct sk_buff {
+@@ -566,6 +573,9 @@ struct sk_buff {
#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
struct nf_conntrack *nfct;
#endif
@@ -1178,7 +1179,7 @@ index 9b88536..61686b0 100644
#if IS_ENABLED(CONFIG_BRIDGE_NETFILTER)
struct nf_bridge_info *nf_bridge;
#endif
-@@ -624,6 +633,9 @@ struct sk_buff {
+@@ -633,6 +643,9 @@ struct sk_buff {
__u8 inner_protocol_type:1;
__u8 remcsum_offload:1;
/* 3 or 5 bit hole */
@@ -1188,7 +1189,7 @@ index 9b88536..61686b0 100644
#ifdef CONFIG_NET_SCHED
__u16 tc_index; /* traffic control index */
-@@ -774,6 +786,12 @@ void kfree_skb_list(struct sk_buff *segs);
+@@ -789,6 +802,12 @@ void kfree_skb_list(struct sk_buff *segs);
void skb_tx_error(struct sk_buff *skb);
void consume_skb(struct sk_buff *skb);
void __kfree_skb(struct sk_buff *skb);
@@ -1201,7 +1202,7 @@ index 9b88536..61686b0 100644
extern struct kmem_cache *skbuff_head_cache;
void kfree_skb_partial(struct sk_buff *skb, bool head_stolen);
-@@ -3232,6 +3250,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
+@@ -3335,6 +3354,10 @@ static inline void __nf_copy(struct sk_buff *dst, const struct sk_buff *src,
if (copy)
dst->nfctinfo = src->nfctinfo;
#endif
@@ -1230,7 +1231,7 @@ index e863585..40904cb 100644
bool nf_queue_entry_get_refs(struct nf_queue_entry *entry);
void nf_queue_entry_release_refs(struct nf_queue_entry *entry);
diff --git a/include/net/pkt_sched.h b/include/net/pkt_sched.h
-index 2342bf1..149dec9 100644
+index 401038d..4668849 100644
--- a/include/net/pkt_sched.h
+++ b/include/net/pkt_sched.h
@@ -104,6 +104,8 @@ int sch_direct_xmit(struct sk_buff *skb, struct Qdisc *q,
@@ -1243,10 +1244,10 @@ index 2342bf1..149dec9 100644
{
if (qdisc_run_begin(q))
diff --git a/include/net/sch_generic.h b/include/net/sch_generic.h
-index 2738f6f..cc0af3e 100644
+index 444faa8..e652d8d 100644
--- a/include/net/sch_generic.h
+++ b/include/net/sch_generic.h
-@@ -501,6 +501,12 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
+@@ -502,6 +502,12 @@ static inline int qdisc_enqueue(struct sk_buff *skb, struct Qdisc *sch)
return sch->enqueue(skb, sch);
}
@@ -1274,7 +1275,7 @@ index d93f949..23fb6d1 100644
/* we overload the higher bits for encoding auxiliary data such as the queue
* number or errno values. Not nice, but better than additional function
diff --git a/net/core/dev.c b/net/core/dev.c
-index a8e4dd4..f84cd5a 100644
+index 6bb6470..13cda63 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -136,6 +136,9 @@
@@ -1317,7 +1318,7 @@ index a8e4dd4..f84cd5a 100644
static void qdisc_pkt_len_init(struct sk_buff *skb)
{
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
-index 7b84330..a313d22 100644
+index dad4dd3..9c71959 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -79,6 +79,87 @@
@@ -1463,7 +1464,7 @@ index 7b84330..a313d22 100644
/**
diff --git a/net/ipv6/ip6_output.c b/net/ipv6/ip6_output.c
-index d5f7716..dd12857 100644
+index 92b1aa3..e5a5dd5 100644
--- a/net/ipv6/ip6_output.c
+++ b/net/ipv6/ip6_output.c
@@ -64,9 +64,6 @@ static int ip6_finish_output2(struct sock *sk, struct sk_buff *skb)
@@ -1491,7 +1492,7 @@ index d5f7716..dd12857 100644
NULL, dev,
ip6_finish_output,
diff --git a/net/netfilter/Kconfig b/net/netfilter/Kconfig
-index 6eae69a..ca3b763 100644
+index 3e1b4ab..8721e48 100644
--- a/net/netfilter/Kconfig
+++ b/net/netfilter/Kconfig
@@ -784,6 +784,18 @@ config NETFILTER_XT_TARGET_LOG
@@ -1526,10 +1527,10 @@ index 70d026d..5469b14 100644
obj-$(CONFIG_NETFILTER_XT_TARGET_LOG) += xt_LOG.o
obj-$(CONFIG_NETFILTER_XT_TARGET_NETMAP) += xt_NETMAP.o
diff --git a/net/netfilter/core.c b/net/netfilter/core.c
-index a0e5497..a24276c 100644
+index 8e47f81..fa4ddd3 100644
--- a/net/netfilter/core.c
+++ b/net/netfilter/core.c
-@@ -206,9 +206,11 @@ next_hook:
+@@ -309,9 +309,11 @@ next_hook:
ret = NF_DROP_GETERR(verdict);
if (ret == 0)
ret = -EPERM;
@@ -1544,7 +1545,7 @@ index a0e5497..a24276c 100644
if (err == -ECANCELED)
goto next_hook;
diff --git a/net/netfilter/nf_internals.h b/net/netfilter/nf_internals.h
-index 3992106..35cbc7b 100644
+index 0655225..25d4141 100644
--- a/net/netfilter/nf_internals.h
+++ b/net/netfilter/nf_internals.h
@@ -18,7 +18,7 @@ unsigned int nf_iterate(struct list_head *head, struct sk_buff *skb,
@@ -1553,11 +1554,11 @@ index 3992106..35cbc7b 100644
int nf_queue(struct sk_buff *skb, struct nf_hook_ops *elem,
- struct nf_hook_state *state, unsigned int queuenum);
+ struct nf_hook_state *state, unsigned int queuenum, unsigned int queuetype);
- void nf_queue_nf_hook_drop(struct nf_hook_ops *ops);
+ void nf_queue_nf_hook_drop(struct net *net, struct nf_hook_ops *ops);
int __init netfilter_queue_init(void);
diff --git a/net/netfilter/nf_queue.c b/net/netfilter/nf_queue.c
-index 8a8b2ab..91ba768 100644
+index 96777f9..c42d671 100644
--- a/net/netfilter/nf_queue.c
+++ b/net/netfilter/nf_queue.c
@@ -28,6 +28,23 @@
@@ -1584,7 +1585,7 @@ index 8a8b2ab..91ba768 100644
/* return EBUSY when somebody else is registered, return EEXIST if the
* same handler is registered, return 0 in case of success. */
void nf_register_queue_handler(const struct nf_queue_handler *qh)
-@@ -129,7 +146,8 @@ void nf_queue_nf_hook_drop(struct nf_hook_ops *ops)
+@@ -123,7 +140,8 @@ void nf_queue_nf_hook_drop(struct net *net, struct nf_hook_ops *ops)
int nf_queue(struct sk_buff *skb,
struct nf_hook_ops *elem,
struct nf_hook_state *state,
@@ -1594,7 +1595,7 @@ index 8a8b2ab..91ba768 100644
{
int status = -ENOENT;
struct nf_queue_entry *entry = NULL;
-@@ -139,7 +157,17 @@ int nf_queue(struct sk_buff *skb,
+@@ -133,7 +151,17 @@ int nf_queue(struct sk_buff *skb,
/* QUEUE == DROP if no one is waiting, to be safe. */
rcu_read_lock();
@@ -1613,7 +1614,7 @@ index 8a8b2ab..91ba768 100644
if (!qh) {
status = -ESRCH;
goto err_unlock;
-@@ -225,8 +253,10 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
+@@ -219,8 +247,10 @@ void nf_reinject(struct nf_queue_entry *entry, unsigned int verdict)
local_bh_enable();
break;
case NF_QUEUE:
@@ -1704,7 +1705,7 @@ index 0000000..86d7b84
+MODULE_ALIAS("ip6t_IMQ");
+
diff --git a/net/sched/sch_generic.c b/net/sched/sch_generic.c
-index 6efca30..a4e448f 100644
+index cb5d4ad..0d818be 100644
--- a/net/sched/sch_generic.c
+++ b/net/sched/sch_generic.c
@@ -108,6 +108,14 @@ static struct sk_buff *dequeue_skb(struct Qdisc *q, bool *validate,
diff --git a/kernel-multiarch.config b/kernel-multiarch.config
index e178e6e..7bd3aa1 100644
--- a/kernel-multiarch.config
+++ b/kernel-multiarch.config
@@ -2,6 +2,7 @@
#-
#- *** FILE: arch/* - ARCH SPECIFIC OPTIONS ***
#-
+AMD_MCE_INJ all=m
ARCH_MEMORY_PROBE all=n
CC_STACKPROTECTOR all=y
CC_STACKPROTECTOR_NONE all=n
@@ -19,10 +20,12 @@ KVM_DEBUG_FS all=n
KVM_DEVICE_ASSIGNMENT all=y
PHYSICAL_ALIGN all=0x1000000
PUNIT_ATOM_DEBUG all=m
+STATIC_KEYS_SELFTEST all=y
X86_AMD_PLATFORM_DEVICE all=y
X86_DEBUG_FPU all=n
X86_DEBUG_STATIC_CPU_HAS all=n
X86_SYSFB all=y
+XEN_512GB all=y
XEN_PVH all=y
#-
@@ -82,6 +85,12 @@ SYSV68_PARTITION all=y
CMDLINE_PARTITION all=y
#-
+#- *** FILE: certs/Kconfig ***
+#-
+SYSTEM_TRUSTED_KEYRING all=y
+SYSTEM_TRUSTED_KEYS all=""
+
+#-
#- *** FILE: crypto/Kconfig ***
#-
#- file crypto/async_tx/Kconfig goes here
@@ -131,6 +140,7 @@ CRYPTO_CRCT10DIF all=m
CRYPTO_CRCT10DIF_PCLMUL all=m
CRYPTO_GHASH all=m
CRYPTO_POLY1305 all=m
+CRYPTO_POLY1305_X86_64 all=m
CRYPTO_MD4 all=m
CRYPTO_MD5 all=y
CRYPTO_MICHAEL_MIC all=m
@@ -173,6 +183,7 @@ CRYPTO_SALSA20 all=m
CRYPTO_SALSA20_586 all=m
CRYPTO_SALSA20_X86_64 x86_64=m
CRYPTO_CHACHA20 all=m
+CRYPTO_CHACHA20_X86_64 all=m
CRYPTO_SEED all=m
CRYPTO_SERPENT all=m
CRYPTO_SERPENT_SSE2_X86_64 all=m
@@ -205,6 +216,7 @@ CRYPTO_USER_API_RNG all=m
CRYPTO_USER_API_AEAD all=m
#- file drivers/crypto/Kconfig goes here
#- file crypto/asymmetric_keys/Kconfig goes here
+#- file certs/Kconfig goes here
#-
#- *** FILE: crypto/asymmetric_keys/Kconfig ***
@@ -559,6 +571,7 @@ BT_HCIUART_LL all=y
BT_HCIUART_3WIRE all=y
BT_HCIUART_INTEL all=y
BT_HCIUART_BCM all=y
+BT_HCIUART_QCA all=y
BT_HCIBCM203X all=m
BT_HCIBPA10X all=m
BT_HCIBFUSB all=m
@@ -797,6 +810,7 @@ CRYPTO_DEV_CCP_CRYPTO all=m
#- *** FILE: drivers/crypto/qat/Kconfig ***
#-
CRYPTO_DEV_QAT_DH895xCC all=m
+CRYPTO_DEV_QAT_DH895xCCVF all=m
#-
#- *** FILE: drivers/devfreq/Kconfig ***
@@ -821,16 +835,17 @@ PM_DEVFREQ_EVENT all=y
DMADEVICES all=y
DMADEVICES_DEBUG all=n
#- DMA Devices
-INTEL_MIC_X100_DMA all=m
+DMA_ENGINE all=y
+FSL_DMA ppc=y ppc64=y
+IDMA64 all=m
INTEL_IOATDMA i386=m x86_64=m
+INTEL_MIC_X100_DMA all=m
+PCH_DMA all=m
+TIMB_DMA all=m
+#- file drivers/dma/bestcomm/Kconfig goes here
#- file drivers/dma/dw/Kconfig goes here
-FSL_DMA ppc=y ppc64=y
#- file drivers/dma/hsu/Kconfig goes here
-#- file drivers/dma/bestcomm/Kconfig goes here
#- file drivers/dma/sh/Kconfig goes here
-TIMB_DMA all=m
-PCH_DMA all=m
-DMA_ENGINE all=y
#- DMA Clients
ASYNC_TX_DMA all=y
DMATEST all=n
@@ -839,9 +854,9 @@ DMATEST all=n
#- *** FILE: drivers/dma/dw/Kconfig ***
#-
DW_DMAC_CORE all=m
+DW_DMAC_BIG_ENDIAN_IO all=n
DW_DMAC all=m
DW_DMAC_PCI all=m
-DW_DMAC_BIG_ENDIAN_IO all=n
#-
#- *** FILE: drivers/dma/hsu/Kconfig ***
@@ -855,7 +870,6 @@ EDAC all=y
EDAC_LEGACY_SYSFS all=y
EDAC_DEBUG all=n
EDAC_DECODE_MCE all=m
-EDAC_MCE_INJ all=m
EDAC_MM_EDAC all=m
EDAC_AMD64 all=m
EDAC_AMD64_ERROR_INJECTION all=y
@@ -996,15 +1010,16 @@ GPIO_74X164 all=m
GPIO_MAX7301 all=m
GPIO_MCP23S08 all=m
GPIO_MC33880 all=m
+GPIO_ZX all=y
GPIO_VIPERBOARD all=m
#-
#- *** FILE: drivers/gpu/drm/Kconfig ***
#-
DRM all=m
+DRM_FBDEV_EMULATION all=y
DRM_LOAD_EDID_FIRMWARE all=y
#- file drivers/gpu/drm/i2c/Kconfig goes here
-#- file drivers/gpu/drm/bridge/Kconfig goes here
DRM_TDFX all=m
DRM_R128 all=m
DRM_RADEON all=m
@@ -1037,8 +1052,10 @@ DRM_VGEM all=m
#- file drivers/gpu/drm/bochs/Kconfig goes here
#- file drivers/gpu/drm/virtio/Kconfig goes here
#- file drivers/gpu/drm/msm/Kconfig goes here
+#- file drivers/gpu/drm/fsl-dcu/Kconfig goes here
#- file drivers/gpu/drm/tegra/Kconfig goes here
#- file drivers/gpu/drm/panel/Kconfig goes here
+#- file drivers/gpu/drm/bridge/Kconfig goes here
#- file drivers/gpu/drm/sti/Kconfig goes here
#- file drivers/gpu/drm/amd/amdkfd/Kconfig goes here
#- file drivers/gpu/drm/imx/Kconfig goes here
@@ -1065,11 +1082,6 @@ DRM_AST all=m
DRM_BOCHS all=m
#-
-#- *** FILE: drivers/gpu/drm/bridge/Kconfig ***
-#-
-DRM_PTN3460 all=m
-
-#-
#- *** FILE: drivers/gpu/drm/cirrus/Kconfig ***
#-
DRM_CIRRUS_QEMU all=m
@@ -1093,8 +1105,6 @@ DRM_I2C_NXP_TDA998X all=m
#- *** FILE: drivers/gpu/drm/i915/Kconfig ***
#-
DRM_I915 i386=m x86_64=m
-DRM_I915_KMS all=y
-DRM_I915_FBDEV all=y
DRM_I915_PRELIMINARY_HW_SUPPORT all=y
#-
@@ -1171,6 +1181,7 @@ HID_EMS_FF all=m
HID_ELECOM all=m
HID_ELO all=m
HID_EZKEY all=m
+HID_GEMBIRD all=m
HID_HOLTEK all=m
HOLTEK_FF all=y
HID_GT683R all=m
@@ -1431,6 +1442,7 @@ SENSORS_LM25066 all=m
SENSORS_LTC2978 all=m
SENSORS_LTC2978_REGULATOR all=y
SENSORS_MAX16064 all=m
+SENSORS_MAX20751 all=m
SENSORS_MAX34440 all=m
SENSORS_MAX8688 all=m
SENSORS_TPS40422 all=m
@@ -1497,6 +1509,7 @@ I2C_DESIGNWARE_PLATFORM all=m
I2C_DESIGNWARE_PCI all=m
I2C_DESIGNWARE_BAYTRAIL i386=y
I2C_EG20T all=m
+I2C_EMEV2 all=m
I2C_GPIO all=m
I2C_KEMPLD all=m
I2C_MPC ppc=n
@@ -1528,6 +1541,7 @@ I2C_MUX_GPIO all=m
I2C_MUX_PCA9541 all=m
I2C_MUX_PCA954x all=m
I2C_MUX_PINCTRL all=m
+I2C_MUX_REG all=m
#-
#- *** FILE: drivers/ide/Kconfig ***
@@ -1641,8 +1655,8 @@ BMC150_ACCEL all=m
HID_SENSOR_ACCEL_3D all=m
IIO_ST_ACCEL_3AXIS all=m
KXSD9 all=m
-MMA8452 all=m
KXCJK1013 all=m
+MMA8452 all=m
MMA9551 all=m
MMA9553 all=m
STK8312 all=m
@@ -1762,8 +1776,11 @@ ISL29125 all=m
HID_SENSOR_ALS all=m
HID_SENSOR_PROX all=m
JSA1212 all=m
+RPR0521 all=m
SENSORS_LM3533 all=m
LTR501 all=m
+OPT3001 all=m
+PA12203001 all=m
STK3310 all=m
TCS3414 all=m
TCS3472 all=m
@@ -1829,10 +1846,7 @@ INFINIBAND_USER_MEM all=y sparc=
INFINIBAND_ON_DEMAND_PAGING all=y
INFINIBAND_ADDR_TRANS all=y sparc=
#- file drivers/infiniband/hw/mthca/Kconfig goes here
-#- file drivers/infiniband/hw/ipath/Kconfig goes here
#- file drivers/infiniband/hw/qib/Kconfig goes here
-#- file drivers/infiniband/hw/ehca/Kconfig goes here
-#- file drivers/infiniband/hw/amso1100/Kconfig goes here
#- file drivers/infiniband/hw/cxgb3/Kconfig goes here
#- file drivers/infiniband/hw/cxgb4/Kconfig goes here
#- file drivers/infiniband/hw/mlx4/Kconfig goes here
@@ -1847,12 +1861,6 @@ INFINIBAND_ADDR_TRANS all=y sparc=
#- file drivers/infiniband/ulp/isert/Kconfig goes here
#-
-#- *** FILE: drivers/infiniband/hw/amso1100/Kconfig ***
-#-
-INFINIBAND_AMSO1100 all=m sparc=
-INFINIBAND_AMSO1100_DEBUG all=n sparc=
-
-#-
#- *** FILE: drivers/infiniband/hw/cxgb3/Kconfig ***
#-
INFINIBAND_CXGB3 all=m sparc=
@@ -1864,11 +1872,6 @@ INFINIBAND_CXGB3_DEBUG all=n sparc=
INFINIBAND_CXGB4 all=m
#-
-#- *** FILE: drivers/infiniband/hw/ipath/Kconfig ***
-#-
-INFINIBAND_IPATH all=m
-
-#-
#- *** FILE: drivers/infiniband/hw/mlx4/Kconfig ***
#-
MLX4_INFINIBAND all=m sparc=
@@ -2440,7 +2443,6 @@ LEDS_OT200 all=m
LEDS_MENF21BMC all=m
#- LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM)
LEDS_BLINKM all=m
-LEDS_PM8941_WLED all=m
#- LED Triggers
#- file drivers/leds/trigger/Kconfig goes here
@@ -2780,13 +2782,13 @@ SMS_SDIO_DRV all=m
MEDIA_PCI_SUPPORT all=y
#- Media capture support
#- file drivers/media/pci/meye/Kconfig goes here
+#- file drivers/media/pci/solo6x10/Kconfig goes here
#- file drivers/media/pci/sta2x11/Kconfig goes here
+#- file drivers/media/pci/tw68/Kconfig goes here
+#- file drivers/media/pci/zoran/Kconfig goes here
#- Media capture/analog TV support
#- file drivers/media/pci/ivtv/Kconfig goes here
-#- file drivers/media/pci/zoran/Kconfig goes here
#- file drivers/media/pci/saa7146/Kconfig goes here
-#- file drivers/media/pci/solo6x10/Kconfig goes here
-#- file drivers/media/pci/tw68/Kconfig goes here
#- file drivers/media/pci/dt3155/Kconfig goes here
#- Media capture/analog/hybrid TV support
#- file drivers/media/pci/cx18/Kconfig goes here
@@ -2808,6 +2810,7 @@ MEDIA_PCI_SUPPORT all=y
#- file drivers/media/pci/ngene/Kconfig goes here
#- file drivers/media/pci/ddbridge/Kconfig goes here
#- file drivers/media/pci/smipcie/Kconfig goes here
+#- file drivers/media/pci/netup_unidvb/Kconfig goes here
#-
#- *** FILE: drivers/media/pci/b2c2/Kconfig ***
@@ -2889,6 +2892,11 @@ DVB_HOPPER all=m
VIDEO_MEYE i386=m x86_64=m
#-
+#- *** FILE: drivers/media/pci/netup_unidvb/Kconfig ***
+#-
+DVB_NETUP_UNIDVB all=m
+
+#-
#- *** FILE: drivers/media/pci/ngene/Kconfig ***
#-
DVB_NGENE all=m
@@ -2988,6 +2996,8 @@ VIDEO_SH_VEU all=m
VIDEO_RENESAS_VSP1 all=m
V4L_TEST_DRIVERS all=n
#- file drivers/media/platform/vivid/Kconfig goes here
+DVB_PLATFORM_DRIVERS all=y
+#- file drivers/media/platform/sti/c8sectpfe/Kconfig goes here
#-
#- *** FILE: drivers/media/platform/marvell-ccic/Kconfig ***
@@ -3488,6 +3498,8 @@ HTC_PASIC3 all=m
MFD_INTEL_QUARK_I2C_GPIO all=m
LPC_ICH all=m
LPC_SCH all=m
+MFD_INTEL_LPSS_ACPI all=m
+MFD_INTEL_LPSS_PCI all=m
MFD_JANZ_CMODIO all=m
MFD_KEMPLD all=m
MFD_MT6397 all=m
@@ -3534,6 +3546,7 @@ MFD_ARIZONA_SPI all=m
MFD_WM5102 all=y
MFD_WM5110 all=y
MFD_WM8997 all=y
+MFD_WM8998 all=y
MFD_WM831X all=y
MFD_WM831X_SPI all=y
MFD_WM8350_I2C all=y
@@ -3918,6 +3931,7 @@ TUN_VNET_CROSS_LE all=n
VETH all=m
VIRTIO_NET all=m
NLMON all=m
+NET_VRF all=m
#- file drivers/net/arcnet/Kconfig goes here
#- file drivers/atm/Kconfig goes here
#- file drivers/net/caif/Kconfig goes here
@@ -3939,6 +3953,7 @@ NET_SB1000 all=m
XEN_NETDEV_FRONTEND all=m
XEN_NETDEV_BACKEND all=m
VMXNET3 all=m
+FUJITSU_ES all=m
#- file drivers/net/hyperv/Kconfig goes here
#-
@@ -4162,6 +4177,7 @@ ETHOC all=m
#- file drivers/net/ethernet/smsc/Kconfig goes here
#- file drivers/net/ethernet/stmicro/Kconfig goes here
#- file drivers/net/ethernet/sun/Kconfig goes here
+#- file drivers/net/ethernet/synopsys/Kconfig goes here
#- file drivers/net/ethernet/tehuti/Kconfig goes here
#- file drivers/net/ethernet/ti/Kconfig goes here
#- file drivers/net/ethernet/tile/Kconfig goes here
@@ -4246,6 +4262,7 @@ CNIC all=m
TIGON3 all=m
BNX2X all=m
BNX2X_SRIOV all=y
+BNX2X_VXLAN all=y
#-
#- *** FILE: drivers/net/ethernet/brocade/Kconfig ***
@@ -4272,9 +4289,10 @@ NET_CALXEDA_XGMAC all=m
#-
#- *** FILE: drivers/net/ethernet/cavium/Kconfig ***
#-
-NET_VENDOR_CAVIUM all=m
+NET_VENDOR_CAVIUM all=y
THUNDER_NIC_PF all=m
THUNDER_NIC_VF all=m
+THUNDER_NIC_BGX all=m
LIQUIDIO all=m
#-
@@ -4442,6 +4460,13 @@ MLX5_CORE all=m
MLX5_CORE_EN all=y
#-
+#- *** FILE: drivers/net/ethernet/mellanox/mlxsw/Kconfig ***
+#-
+MLXSW_CORE all=m
+MLXSW_PCI all=m
+MLXSW_SWITCHX2 all=m
+
+#-
#- *** FILE: drivers/net/ethernet/micrel/Kconfig ***
#-
NET_VENDOR_MICREL all=y
@@ -4626,6 +4651,11 @@ SUNVNET sparc64=m
NIU all=m
#-
+#- *** FILE: drivers/net/ethernet/synopsys/Kconfig ***
+#-
+NET_VENDOR_SYNOPSYS all=y
+
+#-
#- *** FILE: drivers/net/ethernet/tehuti/Kconfig ***
#-
NET_VENDOR_TEHUTI all=y
@@ -4757,6 +4787,7 @@ MCS_FIR all=m
#-
PHYLIB all=y
#- MII PHY device drivers
+AQUANTIA_PHY all=m
AT803X_PHY all=m
AMD_PHY all=m
MARVELL_PHY all=m
@@ -4765,6 +4796,7 @@ QSEMI_PHY all=m
LXT_PHY all=m
CICADA_PHY all=m
VITESSE_PHY all=m
+TERANETICS_PHY all=m
SMSC_PHY all=m
BROADCOM_PHY all=m
BCM63XX_PHY all=m
@@ -4776,10 +4808,13 @@ NATIONAL_PHY all=m
STE10XP all=m
LSI_ET1011C_PHY all=m
MICREL_PHY all=m
+DP83848_PHY all=m
DP83867_PHY all=m
+MICROCHIP_PHY all=m
FIXED_PHY all=y
MDIO_BITBANG all=m
MDIO_GPIO all=m
+MDIO_OCTEON all=m
MDIO_BCM_UNIMAC all=m
MICREL_KS8995MA all=m
@@ -4832,6 +4867,7 @@ USB_KAWETH all=m
USB_PEGASUS all=m
USB_RTL8150 all=m
USB_RTL8152 all=m
+USB_LAN78XX all=m
USB_USBNET all=m
USB_NET_AX8817X all=m
USB_NET_AX88179_178A all=m
@@ -4867,6 +4903,7 @@ USB_CDC_PHONET all=m
USB_IPHETH all=m
USB_SIERRA_NET all=m
USB_VL600 all=m
+USB_NET_CH9200 all=m
#-
#- *** FILE: drivers/net/wan/Kconfig ***
@@ -5280,6 +5317,7 @@ NFC_PORT100 all=m
#- file drivers/nfc/st21nfca/Kconfig goes here
#- file drivers/nfc/st-nci/Kconfig goes here
#- file drivers/nfc/nxp-nci/Kconfig goes here
+#- file drivers/nfc/s3fwrn5/Kconfig goes here
#-
#- *** FILE: drivers/nfc/microread/Kconfig ***
@@ -5309,10 +5347,16 @@ NFC_PN544_I2C all=m
NFC_PN544_MEI all=m
#-
+#- *** FILE: drivers/nfc/s3fwrn5/Kconfig ***
+#-
+NFC_S3FWRN5_I2C all=m
+
+#-
#- *** FILE: drivers/nfc/st-nci/Kconfig ***
#-
NFC_ST_NCI all=m
NFC_ST_NCI_I2C all=m
+NFC_ST_NCI_SPI all=m
#-
#- *** FILE: drivers/nfc/st21nfca/Kconfig ***
@@ -5347,6 +5391,11 @@ ND_BLK all=m
BTT all=y
#-
+#- *** FILE: drivers/nvmem/Kconfig ***
+#-
+NVMEM all=m
+
+#-
#- *** FILE: drivers/of/Kconfig ***
#-
OF all=n
@@ -5485,6 +5534,7 @@ PINCTRL_AMD all=y
#- file drivers/pinctrl/sh-pfc/Kconfig goes here
#- file drivers/pinctrl/spear/Kconfig goes here
#- file drivers/pinctrl/sunxi/Kconfig goes here
+#- file drivers/pinctrl/uniphier/Kconfig goes here
#- file drivers/pinctrl/vt8500/Kconfig goes here
#- file drivers/pinctrl/mediatek/Kconfig goes here
@@ -5565,6 +5615,7 @@ INTEL_RST all=m
INTEL_SMARTCONNECT all=m
PVPANIC all=m
INTEL_PMC_IPC all=m
+SURFACE_PRO3_BUTTON all=m
#-
#- *** FILE: drivers/pnp/Kconfig ***
@@ -5747,6 +5798,7 @@ REGULATOR_MAX8952 all=m
REGULATOR_MAX8973 all=m
REGULATOR_MC13783 all=m
REGULATOR_MC13892 all=m
+REGULATOR_MT6311 all=m
REGULATOR_MT6397 all=m
REGULATOR_PCAP all=m
REGULATOR_PCF50633 all=m
@@ -5925,6 +5977,7 @@ ISCSI_TCP all=m
#- file drivers/scsi/bnx2i/Kconfig goes here
#- file drivers/scsi/bnx2fc/Kconfig goes here
#- file drivers/scsi/be2iscsi/Kconfig goes here
+#- file drivers/scsi/cxlflash/Kconfig goes here
BLK_DEV_3W_XXXX_RAID all=m
SCSI_HPSA all=m
SCSI_3W_9XXX all=m
@@ -6093,7 +6146,7 @@ SCSI_CXGB4_ISCSI all=m
#-
#- *** FILE: drivers/scsi/device_handler/Kconfig ***
#-
-SCSI_DH all=m
+SCSI_DH all=y
SCSI_DH_RDAC all=m
SCSI_DH_HP_SW all=m
SCSI_DH_EMC all=m
@@ -6258,7 +6311,6 @@ STAGING all=y
#- file drivers/staging/vt6655/Kconfig goes here
#- file drivers/staging/vt6656/Kconfig goes here
#- file drivers/staging/iio/Kconfig goes here
-#- file drivers/staging/sm7xxfb/Kconfig goes here
#- file drivers/staging/sm750fb/Kconfig goes here
#- file drivers/staging/xgifb/Kconfig goes here
#- file drivers/staging/emxx_udc/Kconfig goes here
@@ -6267,9 +6319,9 @@ STAGING all=y
#- file drivers/staging/ste_rmi4/Kconfig goes here
#- file drivers/staging/nvec/Kconfig goes here
#- file drivers/staging/media/Kconfig goes here
+#- file drivers/staging/rdma/Kconfig goes here
#- file drivers/staging/android/Kconfig goes here
#- file drivers/staging/board/Kconfig goes here
-#- file drivers/staging/ozwpan/Kconfig goes here
#- file drivers/staging/gdm72xx/Kconfig goes here
#- file drivers/staging/gdm724x/Kconfig goes here
#- file drivers/staging/fwserial/Kconfig goes here
@@ -6286,6 +6338,7 @@ STAGING all=y
#- file drivers/staging/fbtft/Kconfig goes here
#- file drivers/staging/fsl-mc/Kconfig goes here
#- file drivers/staging/wilc1000/Kconfig goes here
+#- file drivers/staging/most/Kconfig goes here
#-
#- *** FILE: drivers/staging/comedi/Kconfig ***
@@ -6455,6 +6508,7 @@ FB_TFT_SSD1351 all=m
FB_TFT_ST7735R all=m
FB_TFT_TINYLCD all=m
FB_TFT_TLS8204 all=m
+FB_TFT_UC1611 all=m
FB_TFT_UC1701 all=m
FB_TFT_UPD161704 all=m
FB_TFT_WATTEROTT all=m
@@ -6668,15 +6722,58 @@ DVB_MN88472 all=m
DVB_MN88473 all=m
#-
-#- *** FILE: drivers/staging/mt29f_spinand/Kconfig ***
+#- *** FILE: drivers/staging/most/Kconfig ***
#-
-MTD_SPINAND_MT29F all=m
-MTD_SPINAND_ONDIEECC all=y
+MOST all=m
+#- file drivers/staging/most/mostcore/Kconfig goes here
+#- file drivers/staging/most/aim-cdev/Kconfig goes here
+#- file drivers/staging/most/aim-network/Kconfig goes here
+#- file drivers/staging/most/aim-sound/Kconfig goes here
+#- file drivers/staging/most/aim-v4l2/Kconfig goes here
+#- file drivers/staging/most/hdm-dim2/Kconfig goes here
+#- file drivers/staging/most/hdm-i2c/Kconfig goes here
+#- file drivers/staging/most/hdm-usb/Kconfig goes here
#-
-#- *** FILE: drivers/staging/ozwpan/Kconfig ***
+#- *** FILE: drivers/staging/most/aim-cdev/Kconfig ***
#-
-USB_WPAN_HCD all=m
+AIM_CDEV all=m
+
+#-
+#- *** FILE: drivers/staging/most/aim-network/Kconfig ***
+#-
+AIM_NETWORK all=m
+
+#-
+#- *** FILE: drivers/staging/most/aim-sound/Kconfig ***
+#-
+AIM_SOUND all=m
+
+#-
+#- *** FILE: drivers/staging/most/aim-v4l2/Kconfig ***
+#-
+AIM_V4L2 all=m
+
+#-
+#- *** FILE: drivers/staging/most/hdm-dim2/Kconfig ***
+#-
+HDM_DIM2 all=m
+
+#-
+#- *** FILE: drivers/staging/most/hdm-i2c/Kconfig ***
+#-
+HDM_I2C all=m
+
+#-
+#- *** FILE: drivers/staging/most/hdm-usb/Kconfig ***
+#-
+HDM_USB all=m
+
+#-
+#- *** FILE: drivers/staging/mt29f_spinand/Kconfig ***
+#-
+MTD_SPINAND_MT29F all=m
+MTD_SPINAND_ONDIEECC all=y
#-
#- *** FILE: drivers/staging/panel/Kconfig ***
@@ -6687,6 +6784,35 @@ PANEL_PROFILE all=5
PANEL_CHANGE_MESSAGE all=n
#-
+#- *** FILE: drivers/staging/rdma/Kconfig ***
+#-
+STAGING_RDMA all=y
+#- file drivers/staging/rdma/amso1100/Kconfig goes here
+#- file drivers/staging/rdma/ehca/Kconfig goes here
+#- file drivers/staging/rdma/hfi1/Kconfig goes here
+#- file drivers/staging/rdma/ipath/Kconfig goes here
+
+#-
+#- *** FILE: drivers/staging/rdma/amso1100/Kconfig ***
+#-
+INFINIBAND_AMSO1100 all=m sparc=
+INFINIBAND_AMSO1100_DEBUG all=n sparc=
+
+#-
+#- *** FILE: drivers/staging/rdma/hfi1/Kconfig ***
+#-
+INFINIBAND_HFI1 all=m
+HFI1_DEBUG_SDMA_ORDER all=n
+HFI1_VERBS_31BIT_PSN all=y
+SDMA_VERBOSITY all=n
+PRESCAN_RXQ all=y
+
+#-
+#- *** FILE: drivers/staging/rdma/ipath/Kconfig ***
+#-
+INFINIBAND_IPATH all=m
+
+#-
#- *** FILE: drivers/staging/rtl8188eu/Kconfig ***
#-
R8188EU all=m
@@ -6744,11 +6870,6 @@ SLICOSS all=m
FB_SM750 all=m
#-
-#- *** FILE: drivers/staging/sm7xxfb/Kconfig ***
-#-
-FB_SM7XX all=m
-
-#-
#- *** FILE: drivers/staging/speakup/Kconfig ***
#-
SPEAKUP all=m
@@ -6870,6 +6991,7 @@ X86_PKG_TEMP_THERMAL all=m
INTEL_SOC_DTS_THERMAL all=m
INTEL_QUARK_DTS_THERMAL i386=m
INT340X_THERMAL all=m
+INTEL_PCH_THERMAL all=m
#- file drivers/thermal/ti-soc-thermal/Kconfig goes here
#- file drivers/thermal/samsung/Kconfig goes here
#- file drivers/thermal/st/Kconfig goes here
@@ -7102,8 +7224,6 @@ USB_DWC3_OMAP all=m
USB_DWC3_EXYNOS all=m
USB_DWC3_PCI all=m
USB_DWC3_KEYSTONE all=m
-#- Debugging features
-USB_DWC3_DEBUG all=n
#-
#- *** FILE: drivers/usb/gadget/Kconfig ***
@@ -7298,6 +7418,7 @@ USB_MON all=m
#-
USB_MUSB_HDRC all=n
#- Platform Glue Layer
+#- MUSB DMA mode
#-
#- *** FILE: drivers/usb/phy/Kconfig ***
@@ -7495,6 +7616,7 @@ BACKLIGHT_PWM all=m
BACKLIGHT_DA903X all=m
BACKLIGHT_DA9052 all=m
BACKLIGHT_APPLE all=m
+BACKLIGHT_PM8941_WLED all=m
BACKLIGHT_SAHARA all=m
BACKLIGHT_WM831X all=m
BACKLIGHT_ADP8860 all=m
@@ -7658,6 +7780,7 @@ FB_SIMPLE all=y
#- file drivers/video/fbdev/omap2/Kconfig goes here
#- file drivers/video/fbdev/exynos/Kconfig goes here
#- file drivers/video/fbdev/mmp/Kconfig goes here
+FB_SM712 all=m
#-
#- *** FILE: drivers/video/fbdev/exynos/Kconfig ***
@@ -7848,6 +7971,7 @@ XEN_PCIDEV_BACKEND all=m
XEN_SCSI_BACKEND all=m
XEN_ACPI_PROCESSOR all=m
XEN_MCE_LOG all=y
+XEN_SYMS all=y
#-
#- *** FILE: fs/9p/Kconfig ***
@@ -7861,9 +7985,7 @@ XEN_MCE_LOG all=y
#- *** FILE: fs/Kconfig ***
#-
#- file fs/ext2/Kconfig goes here
-#- file fs/ext3/Kconfig goes here
#- file fs/ext4/Kconfig goes here
-#- file fs/jbd/Kconfig goes here
#- file fs/jbd2/Kconfig goes here
FS_MBCACHE all=m
#- file fs/reiserfs/Kconfig goes here
@@ -8084,19 +8206,13 @@ EXT2_FS_POSIX_ACL all=y
EXT2_FS_SECURITY all=y
#-
-#- *** FILE: fs/ext3/Kconfig ***
+#- *** FILE: fs/ext4/Kconfig ***
#-
EXT3_FS all=n
-EXT3_DEFAULTS_TO_ORDERED all=n
-EXT3_FS_XATTR all=y
EXT3_FS_POSIX_ACL all=y
EXT3_FS_SECURITY all=y
-
-#-
-#- *** FILE: fs/ext4/Kconfig ***
-#-
EXT4_FS all=m
-EXT4_USE_FOR_EXT23 all=y
+EXT4_USE_FOR_EXT2 all=y
EXT4_FS_POSIX_ACL all=y
EXT4_FS_SECURITY all=y
EXT4_ENCRYPTION all=m
@@ -8173,12 +8289,6 @@ JOLIET all=y
ZISOFS all=y
#-
-#- *** FILE: fs/jbd/Kconfig ***
-#-
-JBD all=m
-JBD_DEBUG all=n
-
-#-
#- *** FILE: fs/jbd2/Kconfig ***
#-
JBD2 all=m
@@ -8519,7 +8629,6 @@ TASK_IO_ACCOUNTING all=y
TREE_RCU all=y
RCU_EXPERT all=n
TASKS_RCU all=n
-RCU_USER_QS all=n
RCU_FANOUT all=32 alpha=64 ia64=64 ppc64=64 sparc64=64 x86_64=64
RCU_FANOUT_LEAF all=16
RCU_FAST_NO_HZ all=y
@@ -8537,6 +8646,7 @@ NUMA_BALANCING_DEFAULT_ENABLED all=y
CGROUPS all=y
CGROUP_DEBUG all=n
CGROUP_FREEZER all=y
+CGROUP_PIDS al=y
CGROUP_DEVICE all=y
CPUSETS all=y
PROC_PID_CPUSET all=n
@@ -8586,6 +8696,7 @@ EVENTFD all=y
BPF_SYSCALL all=y
SHMEM all=y
AIO all=y
+USERFAULTFD all=y
PCI_QUIRKS all=y
EMBEDDED all=n
PERF_EVENTS all=y
@@ -8596,7 +8707,6 @@ SLAB all=n
SLUB all=y
SLOB all=n
SLUB_CPU_PARTIAL all=y
-SYSTEM_TRUSTED_KEYRING all=y
PROFILING all=y
#- file arch/Kconfig goes here
SLABINFO all=y
@@ -8808,7 +8918,6 @@ SCHED_STACK_END_CHECK all=y
DEBUG_TIMEKEEPING all=n
TIMER_STATS all=y
DEBUG_RT_MUTEXES all=n
-RT_MUTEX_TESTER all=n
DEBUG_SPINLOCK all=n
DEBUG_MUTEXES all=n
DEBUG_WW_MUTEX_SLOWPATH all=n
@@ -8832,7 +8941,6 @@ RCU_TORTURE_TEST_SLOW_PREINIT all=n
RCU_TORTURE_TEST_SLOW_INIT all=n
RCU_TORTURE_TEST_SLOW_CLEANUP all=n
RCU_CPU_STALL_TIMEOUT all=60
-RCU_CPU_STALL_INFO all=n
RCU_TRACE all=n
RCU_EQS_DEBUG all=n
DEBUG_BLOCK_EXT_DEVT all=n
@@ -8863,6 +8971,7 @@ TEST_USER_COPY all=n
TEST_BPF all=n
TEST_FIRMWARE all=m
TEST_UDELAY all=m
+TEST_STATIC_KEYS all=m
#- file samples/Kconfig goes here
#- file lib/Kconfig.kgdb goes here
@@ -8951,6 +9060,7 @@ ZSMALLOC all=y
PGTABLE_MAPPING all=n
ZSMALLOC_STAT all=y
DEFERRED_STRUCT_PAGE_INIT all=n
+IDLE_PAGE_TRACKING all=y
#-
#- *** FILE: mm/Kconfig.debug ***
@@ -9104,6 +9214,7 @@ BT_BREDR all=y
#- file net/bluetooth/bnep/Kconfig goes here
#- file net/bluetooth/cmtp/Kconfig goes here
#- file net/bluetooth/hidp/Kconfig goes here
+BT_HS all=y
BT_LE all=y
BT_6LOWPAN all=y
BT_SELFTEST all=n
@@ -9279,7 +9390,6 @@ SYN_COOKIES all=y
NET_IPVTI all=m
NET_FOU all=m
NET_FOU_IP_TUNNELS all=y
-GENEVE_CORE all=m
INET_AH all=m
INET_ESP all=m
INET_IPCOMP all=m
@@ -9324,6 +9434,7 @@ NF_CONNTRACK_PROC_COMPAT all=y
NF_TABLES_IPV4 all=m
NFT_CHAIN_ROUTE_IPV4 all=m
NFT_REJECT_IPV4 all=m
+NFT_DUP_IPV4 all=m
NF_TABLES_ARP all=m
NF_LOG_ARP all=m
NF_LOG_IPV4 all=m
@@ -9366,6 +9477,7 @@ INET6_AH all=m
INET6_ESP all=m
INET6_IPCOMP all=m
IPV6_MIP6 all=y
+IPV6_ILA all=m
INET6_XFRM_TUNNEL all=m
INET6_TUNNEL all=m
INET6_XFRM_MODE_TRANSPORT all=m
@@ -9389,6 +9501,7 @@ IPV6_PIMSM_V2 all=y
NF_CONNTRACK_IPV6 all=m
NF_TABLES_IPV6 all=m
NFT_CHAIN_ROUTE_IPV6 all=m
+NFT_DUP_IPV6 all=m
NF_REJECT_IPV6 all=m
NF_LOG_IPV6 all=m
NF_NAT_IPV6 all=m
@@ -9497,6 +9610,7 @@ MAC802154 all=m
#-
NET_MPLS_GSO all=m
MPLS_ROUTING all=m
+MPLS_IPTUNNEL all=m
#-
#- *** FILE: net/netfilter/Kconfig ***
@@ -9671,6 +9785,7 @@ IP_VS_WRR all=m
IP_VS_LC all=m
IP_VS_WLC all=m
IP_VS_FO all=m
+IP_VS_OVF all==m
IP_VS_LBLC all=m
IP_VS_LBLCR all=m
IP_VS_DH all=m
@@ -9935,7 +10050,6 @@ DEFAULT_SECURITY_SELINUX all=n
DEFAULT_SECURITY_SMACK all=n
DEFAULT_SECURITY_TOMOYO all=n
DEFAULT_SECURITY_APPARMOR=n
-DEFAULT_SECURITY_YAMA all=n
DEFAULT_SECURITY_DAC all=y
DEFAULT_SECURITY all=""
@@ -10010,7 +10124,6 @@ SECURITY_TOMOYO_ACTIVATION_TRIGGER all="/sbin/init"
#- *** FILE: security/yama/Kconfig ***
#-
SECURITY_YAMA all=y
-SECURITY_YAMA_STACKED all=y
#-
#- *** FILE: sound/Kconfig ***
@@ -10360,6 +10473,7 @@ SND_SOC all=m
#- file sound/soc/sh/Kconfig goes here
#- file sound/soc/sirf/Kconfig goes here
#- file sound/soc/spear/Kconfig goes here
+#- file sound/soc/sti/Kconfig goes here
#- file sound/soc/tegra/Kconfig goes here
#- file sound/soc/txx9/Kconfig goes here
#- file sound/soc/ux500/Kconfig goes here
@@ -10397,8 +10511,10 @@ SND_SOC_CS4271 all=m
SND_SOC_CS4271_I2C all=m
SND_SOC_CS4271_SPI all=m
SND_SOC_CS42XX8_I2C all=m
+SND_SOC_CS4349 all=m
SND_SOC_HDMI_CODEC all=m
SND_SOC_ES8328 all=m
+SND_SOC_GTM601 all=m
SND_SOC_MAX98095 all=m
SND_SOC_MAX9850 all=m
SND_SOC_PCM1681 all=m
@@ -10417,6 +10533,7 @@ SND_SOC_SSM2602_I2C all=m
SND_SOC_SSM4567 all=m
SND_SOC_STA32X all=m
SND_SOC_STA350 all=m
+SND_SOC_STI_SAS all=m
SND_SOC_TAS2552 all=m
SND_SOC_TAS5086 all=m
SND_SOC_TAS571X all=m
@@ -10559,11 +10676,21 @@ AMD_XGBE_PHY all=m
ARM_AT91_ETHER all=m
BLK_DEV_CELLEB ppc64=m
BLK_DEV_XIP all=y
+DEFAULT_SECURITY_YAMA all=n
+DRM_I915_FBDEV all=y
+DRM_I915_KMS all=y
+DRM_PTN3460 all=m
DT3155_CCIR all=y
DT3155_STREAMING all=y
DWC3_HOST_USB3_LPM_ENABLE all=y
+EDAC_MCE_INJ all=m
EXT2_FS_XIP all=y
+EXT3_DEFAULTS_TO_ORDERED all=n
+EXT3_FS_XATTR all=y
+EXT4_USE_FOR_EXT23 all=y
+FB_SM7XX all=m
FS_XIP all=y
+GENEVE_CORE all=m
HID_HUION all=m
HVC_BEAT ppc64=n
I2O all=m sparc=n
@@ -10578,14 +10705,21 @@ I2O_PROC all=m
I2O_SCSI all=m
INIT_FALLBACK all=y
INTEL_MID_DMAC all=m
+JBD all=m
+JBD_DEBUG all=n
KEYS_DEBUG_PROC_KEYS all=n
+LEDS_PM8941_WLED all=m
LINE6_USB all=m
LINE6_USB_IMPULSE_RESPONSE all=n
MEDIA_PARPORT_SUPPORT all=y
NFC_ST21NFCB all=m
NFC_ST21NFCB_I2C all=m
PATA_SCC ppc64=m
+RCU_CPU_STALL_INFO all=n
RCU_FANOUT_EXACT all=n
+RCU_USER_QS all=n
+RT_MUTEX_TESTER all=n
+SECURITY_YAMA_STACKED all=y
SERIAL_MFD_HSU all=m
SERIAL_MRST_MAX3110 all=m
SND_HDA_INPUT_JACK all=y
@@ -10603,6 +10737,8 @@ UNISYS_VIRTPCI all=m
UNISYS_VISORCHANNEL all=m
UNISYS_VISORCHIPSET all=m
UNISYS_VISORUTIL all=m
+USB_DWC3_DEBUG all=n
+USB_WPAN_HCD all=m
VIDEO_BTCX all=m sparc=
VIDEO_BWQCAM all=m
VIDEO_CQCAM all=m
diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch
index f8c1e75..68d235c 100644
--- a/kernel-small_fixes.patch
+++ b/kernel-small_fixes.patch
@@ -27,76 +27,6 @@
fi
done
-From 30927520dbae297182990bb21d08762bcc35ce1d Mon Sep 17 00:00:00 2001
-From: Eric Dumazet <edumazet at google.com>
-Date: Wed, 9 Sep 2015 21:55:07 -0700
-Subject: [PATCH] tcp_cubic: better follow cubic curve after idle period
-
-Jana Iyengar found an interesting issue on CUBIC :
-
-The epoch is only updated/reset initially and when experiencing losses.
-The delta "t" of now - epoch_start can be arbitrary large after app idle
-as well as the bic_target. Consequentially the slope (inverse of
-ca->cnt) would be really large, and eventually ca->cnt would be
-lower-bounded in the end to 2 to have delayed-ACK slow-start behavior.
-
-This particularly shows up when slow_start_after_idle is disabled
-as a dangerous cwnd inflation (1.5 x RTT) after few seconds of idle
-time.
-
-Jana initial fix was to reset epoch_start if app limited,
-but Neal pointed out it would ask the CUBIC algorithm to recalculate the
-curve so that we again start growing steeply upward from where cwnd is
-now (as CUBIC does just after a loss). Ideally we'd want the cwnd growth
-curve to be the same shape, just shifted later in time by the amount of
-the idle period.
-
-Reported-by: Jana Iyengar <jri at google.com>
-Signed-off-by: Eric Dumazet <edumazet at google.com>
-Signed-off-by: Yuchung Cheng <ycheng at google.com>
-Signed-off-by: Neal Cardwell <ncardwell at google.com>
-Cc: Stephen Hemminger <stephen at networkplumber.org>
-Cc: Sangtae Ha <sangtae.ha at gmail.com>
-Cc: Lawrence Brakmo <lawrence at brakmo.org>
-Signed-off-by: David S. Miller <davem at davemloft.net>
----
- net/ipv4/tcp_cubic.c | 16 ++++++++++++++++
- 1 file changed, 16 insertions(+)
-
-diff --git a/net/ipv4/tcp_cubic.c b/net/ipv4/tcp_cubic.c
-index 28011fb1..c6ded6b 100644
---- a/net/ipv4/tcp_cubic.c
-+++ b/net/ipv4/tcp_cubic.c
-@@ -151,6 +151,21 @@ static void bictcp_init(struct sock *sk)
- tcp_sk(sk)->snd_ssthresh = initial_ssthresh;
- }
-
-+static void bictcp_cwnd_event(struct sock *sk, enum tcp_ca_event event)
-+{
-+ if (event == CA_EVENT_TX_START) {
-+ s32 delta = tcp_time_stamp - tcp_sk(sk)->lsndtime;
-+ struct bictcp *ca = inet_csk_ca(sk);
-+
-+ /* We were application limited (idle) for a while.
-+ * Shift epoch_start to keep cwnd growth to cubic curve.
-+ */
-+ if (ca->epoch_start && delta > 0)
-+ ca->epoch_start += delta;
-+ return;
-+ }
-+}
-+
- /* calculate the cubic root of x using a table lookup followed by one
- * Newton-Raphson iteration.
- * Avg err ~= 0.195%
-@@ -450,6 +465,7 @@ static struct tcp_congestion_ops cubictcp __read_mostly = {
- .cong_avoid = bictcp_cong_avoid,
- .set_state = bictcp_state,
- .undo_cwnd = bictcp_undo_cwnd,
-+ .cwnd_event = bictcp_cwnd_event,
- .pkts_acked = bictcp_acked,
- .owner = THIS_MODULE,
- .name = "cubic",
From 7a29ac474a47eb8cf212b45917683ae89d6fa13b Mon Sep 17 00:00:00 2001
From: Chris Mason <clm at fb.com>
Date: Tue, 10 Nov 2015 10:10:34 +1100
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/79b8bda9ad47aabbc62f9933f878976e61a8e183
More information about the pld-cvs-commit
mailing list