]> git.pld-linux.org Git - packages/kernel.git/commitdiff
- up to 4.3.1 auto/th/kernel-4.3.1-1 auto/th/kernel-nopae-4.3.1-1
authorArkadiusz Miśkiewicz <arekm@maven.pl>
Thu, 10 Dec 2015 17:45:32 +0000 (18:45 +0100)
committerArkadiusz Miśkiewicz <arekm@maven.pl>
Thu, 10 Dec 2015 17:45:32 +0000 (18:45 +0100)
kernel-aufs4.patch
kernel-small_fixes.patch
kernel.spec

index b69df80199a800f6b8dc39fd0744f5c37ca0789c..1c0af207bf18ea2b5f747ea59298350e108bac9b 100644 (file)
@@ -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,
index 20d437763ad0951a9efb2738a4f9a5d8da8b18b4..a0928ee62871ca10c67827acbc6519ca0355b3af 100644 (file)
@@ -670,4 +670,3 @@ index 45dcbcb5c594..0975da8e3432 100644
 -- 
 2.6.2
 
-  
index cc2b3f04bba9b192da6e9f8ab2d41aaa80874c89..e06a7761c6eab30062187146b83d9c03ef31bc6c 100644 (file)
@@ -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
 
This page took 0.145835 seconds and 4 git commands to generate.