[packages/kernel] - up to 4.3.1
arekm
arekm at pld-linux.org
Thu Dec 10 18:45:39 CET 2015
commit b95c51470294fc508076f9bb98e28c31db8eabaa
Author: Arkadiusz Miśkiewicz <arekm at maven.pl>
Date: Thu Dec 10 18:45:32 2015 +0100
- up to 4.3.1
kernel-aufs4.patch | 283 ++++++++++++++++++++++++++++-------------------
kernel-small_fixes.patch | 1 -
kernel.spec | 4 +-
3 files changed, 172 insertions(+), 116 deletions(-)
---
diff --git a/kernel.spec b/kernel.spec
index cc2b3f0..e06a776 100644
--- a/kernel.spec
+++ b/kernel.spec
@@ -71,7 +71,7 @@
%define rel 1
%define basever 4.3
-%define postver .0
+%define postver .1
# define this to '-%{basever}' for longterm branch
%define versuffix %{nil}
@@ -120,7 +120,7 @@ Source0: http://www.kernel.org/pub/linux/kernel/v4.x/linux-%{basever}.tar.xz
# Source0-md5: 58b35794eee3b6d52ce7be39357801e7
%if "%{postver}" != ".0"
Patch0: http://www.kernel.org/pub/linux/kernel/v4.x/patch-%{version}.xz
-# Patch0-md5: 408f9975969da326b5804a04dbf0d4de
+# Patch0-md5: 6c2dcd8d314f687f317b44820151dd92
%endif
Source1: kernel.sysconfig
diff --git a/kernel-aufs4.patch b/kernel-aufs4.patch
index b69df80..1c0af20 100644
--- a/kernel-aufs4.patch
+++ b/kernel-aufs4.patch
@@ -9367,7 +9367,7 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c
+}
diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
--- /usr/share/empty/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/dir.c 2015-09-24 10:47:58.251386326 +0200
++++ linux/fs/aufs/dir.c 2015-12-10 17:59:16.836166410 +0100
@@ -0,0 +1,753 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -9486,9 +9486,9 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c
+ sb = a->dentry->d_sb;
+ if (d_really_is_negative(a->dentry))
+ goto out;
-+ aufs_read_lock(a->dentry, AuLock_DW | AuLock_DIR); /* noflush */
-+
+ /* no dir->i_mutex lock */
++ aufs_read_lock(a->dentry, AuLock_DW); /* noflush */
++
+ dir = d_inode(a->dentry);
+ bstart = au_ibstart(dir);
+ bindex = au_br_index(sb, a->brid);
@@ -14022,7 +14022,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c
+};
diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
--- /usr/share/empty/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/fstype.h 2015-09-24 10:47:58.254719746 +0200
++++ linux/fs/aufs/fstype.h 2015-12-10 17:59:16.836166410 +0100
@@ -0,0 +1,400 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -14052,8 +14052,8 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h
+
+#include <linux/fs.h>
+#include <linux/magic.h>
-+#include <linux/romfs_fs.h>
+#include <linux/nfs_fs.h>
++#include <linux/romfs_fs.h>
+
+static inline int au_test_aufs(struct super_block *sb)
+{
@@ -15773,8 +15773,8 @@ diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c
+}
diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
--- /usr/share/empty/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.c 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,500 @@
++++ linux/fs/aufs/inode.c 2015-12-10 17:59:16.836166410 +0100
+@@ -0,0 +1,528 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -15877,6 +15877,32 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
+ return err;
+}
+
++void au_refresh_iop(struct inode *inode, int force_getattr)
++{
++ int type;
++ struct au_sbinfo *sbi = au_sbi(inode->i_sb);
++ const struct inode_operations *iop
++ = force_getattr ? aufs_iop : sbi->si_iop_array;
++
++ if (inode->i_op == iop)
++ return;
++
++ switch (inode->i_mode & S_IFMT) {
++ case S_IFDIR:
++ type = AuIop_DIR;
++ break;
++ case S_IFLNK:
++ type = AuIop_SYMLINK;
++ break;
++ default:
++ type = AuIop_OTHER;
++ break;
++ }
++
++ inode->i_op = iop + type;
++ /* unnecessary smp_wmb() */
++}
++
+int au_refresh_hinode_self(struct inode *inode)
+{
+ int err, update;
@@ -15958,11 +15984,13 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
+ struct dentry *h_dentry;
+ struct inode *h_inode;
+ struct au_iinfo *iinfo;
++ struct inode_operations *iop;
+
+ IiMustWriteLock(inode);
+
+ err = 0;
+ isdir = 0;
++ iop = au_sbi(inode->i_sb)->si_iop_array;
+ bstart = au_dbstart(dentry);
+ h_dentry = au_h_dptr(dentry, bstart);
+ h_inode = d_inode(h_dentry);
@@ -15970,7 +15998,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
+ switch (mode & S_IFMT) {
+ case S_IFREG:
+ btail = au_dbtail(dentry);
-+ inode->i_op = &aufs_iop;
++ inode->i_op = iop + AuIop_OTHER;
+ inode->i_fop = &aufs_file_fop;
+ err = au_dy_iaop(inode, bstart, h_inode);
+ if (unlikely(err))
@@ -15979,19 +16007,19 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
+ case S_IFDIR:
+ isdir = 1;
+ btail = au_dbtaildir(dentry);
-+ inode->i_op = &aufs_dir_iop;
++ inode->i_op = iop + AuIop_DIR;
+ inode->i_fop = &aufs_dir_fop;
+ break;
+ case S_IFLNK:
+ btail = au_dbtail(dentry);
-+ inode->i_op = &aufs_symlink_iop;
++ inode->i_op = iop + AuIop_SYMLINK;
+ break;
+ case S_IFBLK:
+ case S_IFCHR:
+ case S_IFIFO:
+ case S_IFSOCK:
+ btail = au_dbtail(dentry);
-+ inode->i_op = &aufs_iop;
++ inode->i_op = iop + AuIop_OTHER;
+ init_special_inode(inode, mode, h_inode->i_rdev);
+ break;
+ default:
@@ -16277,8 +16305,8 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c
+}
diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
--- /usr/share/empty/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux/fs/aufs/inode.h 2015-09-24 10:47:58.254719746 +0200
-@@ -0,0 +1,673 @@
++++ linux/fs/aufs/inode.h 2015-12-10 17:59:16.836166410 +0100
+@@ -0,0 +1,681 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -16411,6 +16439,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
+
+/* inode.c */
+struct inode *au_igrab(struct inode *inode);
++void au_refresh_iop(struct inode *inode, int force_getattr);
+int au_refresh_hinode_self(struct inode *inode);
+int au_refresh_hinode(struct inode *inode, struct dentry *dentry);
+int au_ino(struct super_block *sb, aufs_bindex_t bindex, ino_t h_ino,
@@ -16432,7 +16461,14 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h
+}
+
+/* i_op.c */
-+extern struct inode_operations aufs_iop, aufs_symlink_iop, aufs_dir_iop;
++enum {
++ AuIop_SYMLINK,
++ AuIop_DIR,
++ AuIop_OTHER,
++ AuIop_Last
++};
++extern struct inode_operations aufs_iop[AuIop_Last],
++ aufs_iop_nogetattr[AuIop_Last];
+
+/* au_wr_dir flags */
+#define AuWrDir_ADD_ENTRY 1
@@ -18113,8 +18149,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-11-11 17:21:46.918863802 +0100
-@@ -0,0 +1,1482 @@
++++ linux/fs/aufs/i_op.c 2015-12-10 17:59:16.836166410 +0100
+@@ -0,0 +1,1484 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -19522,80 +19558,82 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c
+
+/* ---------------------------------------------------------------------- */
+
-+struct inode_operations aufs_symlink_iop = {
-+ .permission = aufs_permission,
++/* no getattr version will be set by module.c:aufs_init() */
++struct inode_operations aufs_iop_nogetattr[AuIop_Last],
++ aufs_iop[] = {
++ [AuIop_SYMLINK] = {
++ .permission = aufs_permission,
+#ifdef CONFIG_FS_POSIX_ACL
-+ .get_acl = aufs_get_acl,
-+ .set_acl = aufs_set_acl, /* unsupport for symlink? */
++ .get_acl = aufs_get_acl,
++ .set_acl = aufs_set_acl, /* unsupport for symlink? */
+#endif
+
-+ .setattr = aufs_setattr,
-+ .getattr = aufs_getattr,
++ .setattr = aufs_setattr,
++ .getattr = aufs_getattr,
+
+#ifdef CONFIG_AUFS_XATTR
-+ .setxattr = aufs_setxattr,
-+ .getxattr = aufs_getxattr,
-+ .listxattr = aufs_listxattr,
-+ .removexattr = aufs_removexattr,
++ .setxattr = aufs_setxattr,
++ .getxattr = aufs_getxattr,
++ .listxattr = aufs_listxattr,
++ .removexattr = aufs_removexattr,
+#endif
+
-+ .readlink = generic_readlink,
-+ .follow_link = aufs_follow_link,
-+ .put_link = aufs_put_link,
++ .readlink = generic_readlink,
++ .follow_link = aufs_follow_link,
++ .put_link = aufs_put_link,
+
-+ /* .update_time = aufs_update_time */
-+};
-+
-+struct inode_operations aufs_dir_iop = {
-+ .create = aufs_create,
-+ .lookup = aufs_lookup,
-+ .link = aufs_link,
-+ .unlink = aufs_unlink,
-+ .symlink = aufs_symlink,
-+ .mkdir = aufs_mkdir,
-+ .rmdir = aufs_rmdir,
-+ .mknod = aufs_mknod,
-+ .rename = aufs_rename,
-+
-+ .permission = aufs_permission,
++ /* .update_time = aufs_update_time */
++ },
++ [AuIop_DIR] = {
++ .create = aufs_create,
++ .lookup = aufs_lookup,
++ .link = aufs_link,
++ .unlink = aufs_unlink,
++ .symlink = aufs_symlink,
++ .mkdir = aufs_mkdir,
++ .rmdir = aufs_rmdir,
++ .mknod = aufs_mknod,
++ .rename = aufs_rename,
++
++ .permission = aufs_permission,
+#ifdef CONFIG_FS_POSIX_ACL
-+ .get_acl = aufs_get_acl,
-+ .set_acl = aufs_set_acl,
++ .get_acl = aufs_get_acl,
++ .set_acl = aufs_set_acl,
+#endif
+
-+ .setattr = aufs_setattr,
-+ .getattr = aufs_getattr,
++ .setattr = aufs_setattr,
++ .getattr = aufs_getattr,
+
+#ifdef CONFIG_AUFS_XATTR
-+ .setxattr = aufs_setxattr,
-+ .getxattr = aufs_getxattr,
-+ .listxattr = aufs_listxattr,
-+ .removexattr = aufs_removexattr,
++ .setxattr = aufs_setxattr,
++ .getxattr = aufs_getxattr,
++ .listxattr = aufs_listxattr,
++ .removexattr = aufs_removexattr,
+#endif
+
-+ .update_time = aufs_update_time,
-+ .atomic_open = aufs_atomic_open,
-+ .tmpfile = aufs_tmpfile
-+};
-+
-+struct inode_operations aufs_iop = {
-+ .permission = aufs_permission,
++ .update_time = aufs_update_time,
++ .atomic_open = aufs_atomic_open,
++ .tmpfile = aufs_tmpfile
++ },
++ [AuIop_OTHER] = {
++ .permission = aufs_permission,
+#ifdef CONFIG_FS_POSIX_ACL
-+ .get_acl = aufs_get_acl,
-+ .set_acl = aufs_set_acl,
++ .get_acl = aufs_get_acl,
++ .set_acl = aufs_set_acl,
+#endif
+
-+ .setattr = aufs_setattr,
-+ .getattr = aufs_getattr,
++ .setattr = aufs_setattr,
++ .getattr = aufs_getattr,
+
+#ifdef CONFIG_AUFS_XATTR
-+ .setxattr = aufs_setxattr,
-+ .getxattr = aufs_getxattr,
-+ .listxattr = aufs_listxattr,
-+ .removexattr = aufs_removexattr,
++ .setxattr = aufs_setxattr,
++ .getxattr = aufs_getxattr,
++ .listxattr = aufs_listxattr,
++ .removexattr = aufs_removexattr,
+#endif
+
-+ .update_time = aufs_update_time
++ .update_time = aufs_update_time
++ }
+};
diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c
--- /usr/share/empty/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100
@@ -20113,8 +20151,8 @@ 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-11-11 17:21:46.918863802 +0100
-@@ -0,0 +1,1017 @@
++++ linux/fs/aufs/i_op_ren.c 2015-12-10 17:59:16.836166410 +0100
+@@ -0,0 +1,1015 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -20959,11 +20997,9 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c
+ if (unlikely(d_really_is_positive(a->dst_dentry)
+ && !d_is_dir(a->dst_dentry)))
+ goto out_free;
-+ err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry,
-+ AuLock_DIR | flags);
-+ } else
-+ err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry,
-+ flags);
++ flags |= AuLock_DIRS;
++ }
++ err = aufs_read_and_write_lock2(a->dst_dentry, a->src_dentry, flags);
+ if (unlikely(err))
+ goto out_free;
+
@@ -21611,8 +21647,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-11-11 17:21:46.918863802 +0100
-@@ -0,0 +1,217 @@
++++ linux/fs/aufs/module.c 2015-12-10 17:59:16.839499823 +0100
+@@ -0,0 +1,221 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -21761,6 +21797,10 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c
+
+ au_dir_roflags = au_file_roflags(O_DIRECTORY | O_LARGEFILE);
+
++ memcpy(aufs_iop_nogetattr, aufs_iop, sizeof(aufs_iop));
++ for (i = 0; i < AuIop_Last; i++)
++ aufs_iop_nogetattr[i].getattr = NULL;
++
+ au_sbilist_init();
+ sysaufs_brs_init();
+ au_debug_init();
@@ -21940,7 +21980,7 @@ 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-11-11 17:21:46.918863802 +0100
++++ linux/fs/aufs/mvdown.c 2015-12-10 17:59:16.839499823 +0100
@@ -0,0 +1,703 @@
+/*
+ * Copyright (C) 2011-2015 Junjiro R. Okajima
@@ -22610,7 +22650,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c
+ }
+
+ mutex_lock_nested(&inode->i_mutex, I_MUTEX_CHILD);
-+ err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH);
++ err = aufs_read_lock(dentry, AuLock_DW | AuLock_FLUSH | AuLock_NOPLMW);
+ if (unlikely(err))
+ goto out_inode;
+
@@ -22647,7 +22687,7 @@ 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-11-11 17:21:46.918863802 +0100
++++ linux/fs/aufs/opts.c 2015-12-10 17:59:16.839499823 +0100
@@ -0,0 +1,1859 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -24482,7 +24522,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ err = rerr;
+
+ if (no_dreval != !!au_ftest_si(sbinfo, NO_DREVAL))
-+ au_fset_opts(opts->flags, REFRESH_DOP);
++ au_fset_opts(opts->flags, REFRESH_IDOP);
+
+ if (au_ftest_opts(opts->flags, TRUNC_XIB)) {
+ rerr = au_xib_trunc(sb);
@@ -24494,7 +24534,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c
+ if (!au_ftest_opts(opts->flags, REFRESH)
+ && (opts->given_udba
+ || au_opt_test(sbinfo->si_mntflags, XINO)
-+ || au_ftest_opts(opts->flags, REFRESH_DOP)
++ || au_ftest_opts(opts->flags, REFRESH_IDOP)
+ ))
+ au_fset_opts(opts->flags, REFRESH);
+
@@ -24510,7 +24550,7 @@ 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-11-11 17:21:46.918863802 +0100
++++ linux/fs/aufs/opts.h 2015-12-10 17:59:16.839499823 +0100
@@ -0,0 +1,211 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -24688,7 +24728,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 AuOpts_REFRESH_IDOP (1 << 4)
+#define au_ftest_opts(flags, name) ((flags) & AuOpts_##name)
+#define au_fset_opts(flags, name) \
+ do { (flags) |= AuOpts_##name; } while (0)
@@ -26176,8 +26216,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-11-11 17:21:46.922197217 +0100
-@@ -0,0 +1,363 @@
++++ linux/fs/aufs/sbinfo.c 2015-12-10 17:59:16.839499823 +0100
+@@ -0,0 +1,366 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -26306,6 +26346,9 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
+
+ au_sphl_init(&sbinfo->si_files);
+
++ /* with getattr by default */
++ sbinfo->si_iop_array = aufs_iop;
++
+ /* leave other members for sysaufs and si_mnt. */
+ sbinfo->si_sb = sb;
+ sb->s_fs_info = sbinfo;
@@ -26474,7 +26517,7 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c
+ if (unlikely(err))
+ goto out;
+
-+ di_write_lock2_child(d1, d2, au_ftest_lock(flags, DIR));
++ di_write_lock2_child(d1, d2, au_ftest_lock(flags, DIRS));
+
+ if (au_ftest_lock(flags, GEN)) {
+ sigen = au_sigen(sb);
@@ -26658,8 +26701,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-11-11 17:21:46.922197217 +0100
-@@ -0,0 +1,1035 @@
++++ linux/fs/aufs/super.c 2015-12-10 17:59:16.842833237 +0100
+@@ -0,0 +1,1047 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -27244,7 +27287,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, unsigned int do_dop)
++ const unsigned int dir_flags, unsigned int do_idop)
+{
+ int err;
+ struct dentry *parent;
@@ -27268,7 +27311,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ dput(parent);
+
+ if (!err) {
-+ if (do_dop)
++ if (do_idop)
+ au_refresh_dop(dentry, /*force_reval*/0);
+ } else
+ au_refresh_dop(dentry, /*force_reval*/1);
@@ -27277,7 +27320,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ return err;
+}
+
-+static int au_refresh_d(struct super_block *sb, unsigned int do_dop)
++static int au_refresh_d(struct super_block *sb, unsigned int do_idop)
+{
+ int err, i, j, ndentry, e;
+ unsigned int sigen;
@@ -27288,7 +27331,7 @@ 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)
++ if (do_idop)
+ au_refresh_dop(root, /*force_reval*/0);
+
+ err = au_dpages_init(&dpages, GFP_NOFS);
@@ -27307,7 +27350,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ for (j = 0; j < ndentry; j++) {
+ d = dentries[j];
+ e = au_do_refresh_d(d, sigen, sbinfo, dir_flags,
-+ do_dop);
++ do_idop);
+ if (unlikely(e && !err))
+ err = e;
+ /* go on even err */
@@ -27320,7 +27363,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ return err;
+}
+
-+static int au_refresh_i(struct super_block *sb)
++static int au_refresh_i(struct super_block *sb, unsigned int do_idop)
+{
+ int err, e;
+ unsigned int sigen;
@@ -27338,17 +27381,22 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ inode = array[ull];
+ if (unlikely(!inode))
+ break;
++
++ e = 0;
++ ii_write_lock_child(inode);
+ if (au_iigen(inode, NULL) != sigen) {
-+ ii_write_lock_child(inode);
+ e = au_refresh_hinode_self(inode);
-+ ii_write_unlock(inode);
+ if (unlikely(e)) {
++ au_refresh_iop(inode, /*force_getattr*/1);
+ pr_err("error %d, i%lu\n", e, inode->i_ino);
+ if (!err)
+ err = e;
+ /* go on even if err */
+ }
+ }
++ if (!e && do_idop)
++ au_refresh_iop(inode, /*force_getattr*/0);
++ ii_write_unlock(inode);
+ }
+
+ au_iarray_free(array, max);
@@ -27357,7 +27405,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, unsigned int do_dop)
++static void au_remount_refresh(struct super_block *sb, unsigned int do_idop)
+{
+ int err, e;
+ unsigned int udba;
@@ -27388,20 +27436,25 @@ 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 (do_idop) {
+ if (au_ftest_si(sbi, NO_DREVAL)) {
+ AuDebugOn(sb->s_d_op == &aufs_dop_noreval);
+ sb->s_d_op = &aufs_dop_noreval;
++ AuDebugOn(sbi->si_iop_array == aufs_iop_nogetattr);
++ sbi->si_iop_array = aufs_iop_nogetattr;
+ } else {
+ AuDebugOn(sb->s_d_op == &aufs_dop);
+ sb->s_d_op = &aufs_dop;
++ AuDebugOn(sbi->si_iop_array == aufs_iop);
++ sbi->si_iop_array = aufs_iop;
+ }
-+ pr_info("reset to %pf\n", sb->s_d_op);
++ pr_info("reset to %pf and %pf\n",
++ sb->s_d_op, sbi->si_iop_array);
+ }
+
+ di_write_unlock(root);
-+ err = au_refresh_d(sb, do_dop);
-+ e = au_refresh_i(sb);
++ err = au_refresh_d(sb, do_idop);
++ e = au_refresh_i(sb, do_idop);
+ if (unlikely(e && !err))
+ err = e;
+ /* aufs_write_lock() calls ..._child() */
@@ -27476,7 +27529,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_ftest_opts(opts.flags, REFRESH_DOP));
++ au_remount_refresh(sb, au_ftest_opts(opts.flags, REFRESH_IDOP));
+
+ if (au_ftest_opts(opts.flags, REFRESH_DYAOP)) {
+ mntflags = au_mntflags(sb);
@@ -27523,7 +27576,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ if (IS_ERR(inode))
+ goto out;
+
-+ inode->i_op = &aufs_dir_iop;
++ inode->i_op = aufs_iop + AuIop_DIR; /* with getattr by default */
+ inode->i_fop = &aufs_dir_fop;
+ inode->i_mode = S_IFDIR;
+ set_nlink(inode, 2);
@@ -27614,6 +27667,8 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c
+ sb->s_d_op = &aufs_dop_noreval;
+ pr_info("%pf\n", sb->s_d_op);
+ au_refresh_dop(root, /*force_reval*/0);
++ sbinfo->si_iop_array = aufs_iop_nogetattr;
++ au_refresh_iop(inode, /*force_getattr*/0);
+ }
+ aufs_write_unlock(root);
+ mutex_unlock(&inode->i_mutex);
@@ -27674,7 +27729,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, /*do_dop*/0);
++ au_remount_refresh(sb, /*do_idop*/0);
+ }
+ if (au_opt_test(sbinfo->si_mntflags, PLINK))
+ au_plink_put(sb, /*verbose*/1);
@@ -27697,8 +27752,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-11-11 17:21:46.922197217 +0100
-@@ -0,0 +1,640 @@
++++ linux/fs/aufs/super.h 2015-12-10 17:59:16.842833237 +0100
+@@ -0,0 +1,642 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
+ *
@@ -27892,6 +27947,9 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
+ /* file list */
+ struct au_sphlhead si_files;
+
++ /* with/without getattr, brother of sb->s_d_op */
++ struct inode_operations *si_iop_array;
++
+ /*
+ * sysfs and lifetime management.
+ * this is not a small structure and it may be a waste of memory in case
@@ -27923,7 +27981,6 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
+ * if it is false, refreshing dirs at access time is unnecesary
+ */
+#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 */
+
@@ -27961,7 +28018,7 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h
+#define AuLock_IR (1 << 1) /* read-lock inode */
+#define AuLock_IW (1 << 2) /* write-lock inode */
+#define AuLock_FLUSH (1 << 3) /* wait for 'nowait' tasks */
-+#define AuLock_DIR (1 << 4) /* target is a dir */
++#define AuLock_DIRS (1 << 4) /* target is a pair of dirs */
+#define AuLock_NOPLM (1 << 5) /* return err in plm mode */
+#define AuLock_NOPLMW (1 << 6) /* wait for plm mode ends */
+#define AuLock_GEN (1 << 7) /* test digen/iigen */
@@ -35015,7 +35072,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-11-11 17:22:06.926020273 +0100
++++ linux/include/uapi/linux/aufs_type.h 2015-12-10 17:59:16.856166891 +0100
@@ -0,0 +1,419 @@
+/*
+ * Copyright (C) 2005-2015 Junjiro R. Okajima
@@ -35058,7 +35115,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin
+
+#include <linux/limits.h>
+
-+#define AUFS_VERSION "4.3-20151109"
++#define AUFS_VERSION "4.3-20151116"
+
+/* todo? move this to linux-2.6.19/include/magic.h */
+#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's')
@@ -35680,10 +35737,10 @@ index 6d9864d..3322557 100644
#endif /* __KERNEL__ */
diff --git a/fs/aufs/super.c b/fs/aufs/super.c
-index 1b25343..3b0c6c5 100644
+index 3fe10d3..2f32d58 100644
--- a/fs/aufs/super.c
+++ b/fs/aufs/super.c
-@@ -831,7 +831,10 @@ static const struct super_operations aufs_sop = {
+@@ -841,7 +841,10 @@ static const struct super_operations aufs_sop = {
.statfs = aufs_statfs,
.put_super = aufs_put_super,
.sync_fs = aufs_sync_fs,
diff --git a/kernel-small_fixes.patch b/kernel-small_fixes.patch
index 20d4377..a0928ee 100644
--- a/kernel-small_fixes.patch
+++ b/kernel-small_fixes.patch
@@ -670,4 +670,3 @@ index 45dcbcb5c594..0975da8e3432 100644
--
2.6.2
-
================================================================
---- gitweb:
http://git.pld-linux.org/gitweb.cgi/packages/kernel.git/commitdiff/b95c51470294fc508076f9bb98e28c31db8eabaa
More information about the pld-cvs-commit
mailing list