From 523b37e3f08a25065f4facd124e137685c2da2dc Mon Sep 17 00:00:00 2001 From: =?utf8?q?Arkadiusz=20Mi=C5=9Bkiewicz?= Date: Mon, 20 Jan 2014 20:33:56 +0100 Subject: [PATCH] - initial 3.13; doesn't build (lack of vserver, imq, aufs and likely more) --- kernel-aufs3.patch | 1547 +++++++++++++++++++-------------------- kernel-multiarch.config | 160 +++- kernel.spec | 6 +- 3 files changed, 894 insertions(+), 819 deletions(-) diff --git a/kernel-aufs3.patch b/kernel-aufs3.patch index 7639034f..f3f1d5e6 100644 --- a/kernel-aufs3.patch +++ b/kernel-aufs3.patch @@ -22,7 +22,7 @@ index 4fe6df3..4a57676 100644 obj-$(CONFIG_EFIVAR_FS) += efivarfs/ +obj-$(CONFIG_AUFS_FS) += aufs/ diff --git a/include/uapi/linux/Kbuild b/include/uapi/linux/Kbuild -index 115add2..ce305b3 100644 +index 33d2b8f..b55eeb9 100644 --- a/include/uapi/linux/Kbuild +++ b/include/uapi/linux/Kbuild @@ -56,6 +56,7 @@ header-y += atmppp.h @@ -36,7 +36,7 @@ index 115add2..ce305b3 100644 aufs3.x-rcN base patch diff --git a/drivers/block/loop.c b/drivers/block/loop.c -index 40e7155..6e43ab0 100644 +index c8dac73..2e229ac 100644 --- a/drivers/block/loop.c +++ b/drivers/block/loop.c @@ -691,6 +691,24 @@ static inline int is_loop_device(struct file *file) @@ -64,41 +64,11 @@ index 40e7155..6e43ab0 100644 /* loop sysfs attributes */ static ssize_t loop_attr_show(struct device *dev, char *page, -diff --git a/fs/file_table.c b/fs/file_table.c -index abdd15a..da0ee1e 100644 ---- a/fs/file_table.c -+++ b/fs/file_table.c -@@ -36,7 +36,7 @@ struct files_stat_struct files_stat = { - .max_files = NR_FILE - }; - --DEFINE_STATIC_LGLOCK(files_lglock); -+DEFINE_LGLOCK(files_lglock); - - /* SLAB cache for file structures */ - static struct kmem_cache *filp_cachep __read_mostly; -@@ -360,7 +360,7 @@ static inline int file_list_cpu(struct file *file) - } - - /* helper for file_sb_list_add to reduce ifdefs */ --static inline void __file_sb_list_add(struct file *file, struct super_block *sb) -+inline void __file_sb_list_add(struct file *file, struct super_block *sb) - { - struct list_head *list; - #ifdef CONFIG_SMP -@@ -373,6 +373,7 @@ static inline void __file_sb_list_add(struct file *file, struct super_block *sb) - #endif - list_add(&file->f_u.fu_list, list); - } -+EXPORT_SYMBOL(__file_sb_list_add); - - /** - * file_sb_list_add - add a file to the sb's file list diff --git a/fs/inode.c b/fs/inode.c -index b33ba8e..9b24434 100644 +index 4bcdad3..bc83168 100644 --- a/fs/inode.c +++ b/fs/inode.c -@@ -1469,7 +1469,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode, +@@ -1497,7 +1497,7 @@ static int relatime_need_update(struct vfsmount *mnt, struct inode *inode, * This does the actual work of updating an inodes time or version. Must have * had called mnt_want_write() before calling this. */ @@ -108,7 +78,7 @@ index b33ba8e..9b24434 100644 if (inode->i_op->update_time) return inode->i_op->update_time(inode, time, flags); diff --git a/fs/splice.c b/fs/splice.c -index 3b7ee65..e147583 100644 +index 46a08f7..719ca3e 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); @@ -136,10 +106,10 @@ index 3b7ee65..e147583 100644 ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); diff --git a/include/linux/fs.h b/include/linux/fs.h -index 3f40547..36b235e 100644 +index 121f11f..39bf86d 100644 --- a/include/linux/fs.h +++ b/include/linux/fs.h -@@ -2594,6 +2594,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *); +@@ -2657,6 +2657,7 @@ extern int inode_change_ok(const struct inode *, struct iattr *); extern int inode_newsize_ok(const struct inode *, loff_t offset); extern void setattr_copy(struct inode *inode, const struct iattr *attr); @@ -164,29 +134,8 @@ index 74575cb..bfc6fb6 100644 #endif aufs3.x-rcN standalone patch -diff --git a/fs/file_table.c b/fs/file_table.c -index da0ee1e..0a02e12 100644 ---- a/fs/file_table.c -+++ b/fs/file_table.c -@@ -37,6 +37,7 @@ struct files_stat_struct files_stat = { - }; - - DEFINE_LGLOCK(files_lglock); -+EXPORT_SYMBOL(files_lglock); - - /* SLAB cache for file structures */ - static struct kmem_cache *filp_cachep __read_mostly; -@@ -410,6 +411,8 @@ void file_sb_list_del(struct file *file) - } - } - -+EXPORT_SYMBOL(file_sb_list_del); -+ - #ifdef CONFIG_SMP - - /* diff --git a/fs/inode.c b/fs/inode.c -index 9b24434..6ee4b0b 100644 +index bc83168..6dd1207 100644 --- a/fs/inode.c +++ b/fs/inode.c @@ -57,6 +57,7 @@ static struct hlist_head *inode_hashtable __read_mostly; @@ -197,7 +146,7 @@ index 9b24434..6ee4b0b 100644 /* * Empty aops. Can be used for the cases where the user does not -@@ -1485,6 +1486,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) +@@ -1513,6 +1514,7 @@ int update_time(struct inode *inode, struct timespec *time, int flags) mark_inode_dirty_sync(inode); return 0; } @@ -206,18 +155,10 @@ index 9b24434..6ee4b0b 100644 /** * touch_atime - update the access time diff --git a/fs/namespace.c b/fs/namespace.c -index da5c494..f40ae6f 100644 +index ac2ce8a..83b0135 100644 --- a/fs/namespace.c +++ b/fs/namespace.c -@@ -54,6 +54,7 @@ EXPORT_SYMBOL_GPL(fs_kobj); - * tree or hash is modified or when a vfsmount structure is modified. - */ - DEFINE_BRLOCK(vfsmount_lock); -+EXPORT_SYMBOL(vfsmount_lock); - - static inline unsigned long hash(struct vfsmount *mnt, struct dentry *dentry) - { -@@ -427,6 +428,7 @@ void __mnt_drop_write(struct vfsmount *mnt) +@@ -425,6 +425,7 @@ void __mnt_drop_write(struct vfsmount *mnt) mnt_dec_writers(real_mount(mnt)); preempt_enable(); } @@ -225,7 +166,7 @@ index da5c494..f40ae6f 100644 /** * mnt_drop_write - give up write access to a mount -@@ -1480,6 +1482,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, +@@ -1509,6 +1510,7 @@ int iterate_mounts(int (*f)(struct vfsmount *, void *), void *arg, } return 0; } @@ -306,10 +247,10 @@ index 923fe4a..176b435 100644 static int fsnotify_mark_destroy(void *ignored) { diff --git a/fs/open.c b/fs/open.c -index d420331..6dd3b03 100644 +index 4b3e1ed..ce49f2b 100644 --- a/fs/open.c +++ b/fs/open.c -@@ -61,6 +61,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, +@@ -62,6 +62,7 @@ int do_truncate(struct dentry *dentry, loff_t length, unsigned int time_attrs, mutex_unlock(&dentry->d_inode->i_mutex); return ret; } @@ -318,7 +259,7 @@ index d420331..6dd3b03 100644 long vfs_truncate(struct path *path, loff_t length) { diff --git a/fs/splice.c b/fs/splice.c -index e147583..789f6b2 100644 +index 719ca3e..6300dc8 100644 --- a/fs/splice.c +++ b/fs/splice.c @@ -1106,6 +1106,7 @@ long do_splice_from(struct pipe_inode_info *pipe, struct file *out, @@ -354,7 +295,7 @@ index b9d613e..ba3b618 100644 } +EXPORT_SYMBOL(cap_mmap_file); diff --git a/security/device_cgroup.c b/security/device_cgroup.c -index c123628..efc6f68 100644 +index 7c2a0a7..a37c054 100644 --- a/security/device_cgroup.c +++ b/security/device_cgroup.c @@ -7,6 +7,7 @@ @@ -365,7 +306,7 @@ index c123628..efc6f68 100644 #include #include #include -@@ -756,6 +757,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask) +@@ -745,6 +746,7 @@ int __devcgroup_inode_permission(struct inode *inode, int mask) return __devcgroup_check_permission(type, imajor(inode), iminor(inode), access); } @@ -374,7 +315,7 @@ index c123628..efc6f68 100644 int devcgroup_inode_mknod(int mode, dev_t dev) { diff --git a/security/security.c b/security/security.c -index 4dc31f4..1f272bc 100644 +index 15b6928..ae6eba6 100644 --- a/security/security.c +++ b/security/security.c @@ -407,6 +407,7 @@ int security_path_rmdir(struct path *dir, struct dentry *dentry) @@ -548,10 +489,10 @@ diff -urN /usr/share/empty/Documentation/ABI/testing/sysfs-aufs linux/Documentat + will be empty. About XINO files, see the aufs manual. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt linux/Documentation/filesystems/aufs/design/01intro.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/01intro.txt 2013-07-06 13:20:47.730197761 +0200 -@@ -0,0 +1,162 @@ ++++ linux/Documentation/filesystems/aufs/design/01intro.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,161 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -564,8 +505,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt lin +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Introduction +---------------------------------------- @@ -714,10 +654,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/01intro.txt lin +about it. But currently I have implemented it in kernel space. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt linux/Documentation/filesystems/aufs/design/02struct.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/02struct.txt 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,243 @@ ++++ linux/Documentation/filesystems/aufs/design/02struct.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,242 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -730,8 +670,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt li +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Basic Aufs Internal Structure + @@ -961,10 +900,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/02struct.txt li +For this purpose, use "aumvdown" command in aufs-util.git. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt linux/Documentation/filesystems/aufs/design/03lookup.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/03lookup.txt 2013-07-06 13:20:47.730197761 +0200 -@@ -0,0 +1,106 @@ ++++ linux/Documentation/filesystems/aufs/design/03lookup.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,105 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -977,8 +916,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt li +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Lookup in a Branch +---------------------------------------------------------------------- @@ -1071,10 +1009,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/03lookup.txt li + by over-mounting something (or another method). diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt linux/Documentation/filesystems/aufs/design/04branch.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/04branch.txt 2013-07-06 13:20:47.730197761 +0200 -@@ -0,0 +1,76 @@ ++++ linux/Documentation/filesystems/aufs/design/04branch.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,75 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1087,8 +1025,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt li +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Branch Manipulation + @@ -1151,10 +1088,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/04branch.txt li + same named entry on the upper branch. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt linux/Documentation/filesystems/aufs/design/05wbr_policy.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt 2013-07-06 13:20:47.730197761 +0200 -@@ -0,0 +1,65 @@ ++++ linux/Documentation/filesystems/aufs/design/05wbr_policy.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,64 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1167,8 +1104,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.tx +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Policies to Select One among Multiple Writable Branches +---------------------------------------------------------------------- @@ -1220,10 +1156,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/05wbr_policy.tx + copyup policy. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linux/Documentation/filesystems/aufs/design/06mmap.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/06mmap.txt 2013-07-06 13:20:47.730197761 +0200 -@@ -0,0 +1,47 @@ ++++ linux/Documentation/filesystems/aufs/design/06mmap.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,46 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1236,8 +1172,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +mmap(2) -- File Memory Mapping +---------------------------------------------------------------------- @@ -1271,10 +1206,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/06mmap.txt linu +switching the approach. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt linux/Documentation/filesystems/aufs/design/07export.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/07export.txt 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,59 @@ ++++ linux/Documentation/filesystems/aufs/design/07export.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,58 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1287,8 +1222,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt li +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Export Aufs via NFS +---------------------------------------------------------------------- @@ -1334,10 +1268,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/07export.txt li + lookup_one_len(), vfs_getattr(), encode_fh() and others. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linux/Documentation/filesystems/aufs/design/08shwh.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/08shwh.txt 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,53 @@ ++++ linux/Documentation/filesystems/aufs/design/08shwh.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,52 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1350,8 +1284,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linu +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Show Whiteout Mode (shwh) +---------------------------------------------------------------------- @@ -1391,10 +1324,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/08shwh.txt linu +initramfs will use it to replace the old one at the next boot. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt linux/Documentation/filesystems/aufs/design/10dynop.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/10dynop.txt 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,47 @@ ++++ linux/Documentation/filesystems/aufs/design/10dynop.txt 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,46 @@ + -+# Copyright (C) 2010-2013 Junjiro R. Okajima ++# Copyright (C) 2010-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1407,8 +1340,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt lin +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Dynamically customizable FS operations +---------------------------------------------------------------------- @@ -1442,10 +1374,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/10dynop.txt lin +vm_operations_struct for regular files only. diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/99plan.txt linux/Documentation/filesystems/aufs/design/99plan.txt --- /usr/share/empty/Documentation/filesystems/aufs/design/99plan.txt 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/design/99plan.txt 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,96 @@ ++++ linux/Documentation/filesystems/aufs/design/99plan.txt 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,95 @@ + -+# Copyright (C) 2005-2013 Junjiro R. Okajima ++# Copyright (C) 2005-2014 Junjiro R. Okajima +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by @@ -1458,8 +1390,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/99plan.txt linu +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License -+# along with this program; if not, write to the Free Software -+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++# along with this program. If not, see . + +Plan + @@ -1542,8 +1473,8 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/design/99plan.txt linu +Otherwise from /new. diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documentation/filesystems/aufs/README --- /usr/share/empty/Documentation/filesystems/aufs/README 1970-01-01 01:00:00.000000000 +0100 -+++ linux/Documentation/filesystems/aufs/README 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,347 @@ ++++ linux/Documentation/filesystems/aufs/README 2014-01-20 20:16:14.729463171 +0100 +@@ -0,0 +1,344 @@ + +Aufs3 -- advanced multi layered unification filesystem version 3.x +http://aufs.sf.net @@ -1714,9 +1645,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta +1. +- apply ./aufs3-kbuild.patch to your kernel source files. +- apply ./aufs3-base.patch too. -+- apply ./aufs3-proc_map.patch too, if you want to make /proc/PID/maps (and -+ others including lsof(1)) show the file path on aufs instead of the -+ path on the branch fs. ++- apply ./aufs3-mmap.patch too. +- apply ./aufs3-standalone.patch too, if you have a plan to set + CONFIG_AUFS_FS=m. otherwise you don't need ./aufs3-standalone.patch. +- copy ./{Documentation,fs,include/uapi/linux/aufs_type.h} files to your @@ -1736,9 +1665,7 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta +2. +- module only (CONFIG_AUFS_FS=m). +- apply ./aufs3-base.patch to your kernel source files. -+- apply ./aufs3-proc_map.patch too to your kernel source files, -+ if you want to make /proc/PID/maps (and others including lsof(1)) show -+ the file path on aufs instead of the path on the branch fs. ++- apply ./aufs3-mmap.patch too. +- apply ./aufs3-standalone.patch too. +- build your kernel, don't forget "make headers_install", and reboot. +- edit ./config.mk and set other aufs configurations if necessary. @@ -1873,7 +1800,8 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta +Alessandro Gorreta made a donation (2013/4). +lauri kasvandik made a donation (2013/5). +"pemasu from Finland" made a donation (2013/7). -+The Parted Magic Project made a donation (2013/9). ++The Parted Magic Project made a donation (2013/9 and 11). ++Pavel Barta made a donation (2013/10). + +Thank you very much. +Donations are always, including future donations, very important and @@ -1893,10 +1821,10 @@ diff -urN /usr/share/empty/Documentation/filesystems/aufs/README linux/Documenta +# End: ; diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h --- /usr/share/empty/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/aufs.h 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,60 @@ ++++ linux/fs/aufs/aufs.h 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,59 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -1909,8 +1837,7 @@ diff -urN /usr/share/empty/fs/aufs/aufs.h linux/fs/aufs/aufs.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -1957,10 +1884,10 @@ 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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,1212 @@ ++++ linux/fs/aufs/branch.c 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,1219 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -1973,8 +1900,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -2326,7 +2252,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + + /* + * a limit for rmdir/rename a dir -+ * cf. AUFS_MAX_NAMELEN in include/linux/aufs_type.h ++ * cf. AUFS_MAX_NAMELEN in include/uapi/linux/aufs_type.h + */ + err = vfs_statfs(&br->br_path, &kst); + if (unlikely(err)) @@ -2335,8 +2261,8 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + if (kst.f_namelen >= NAME_MAX) + err = au_br_init_wh(sb, br, perm); + else -+ pr_err("%.*s(%s), unsupported namelen %ld\n", -+ AuDLNPair(au_br_dentry(br)), ++ pr_err("%pd(%s), unsupported namelen %ld\n", ++ au_br_dentry(br), + au_sbtype(au_br_dentry(br)->d_sb), kst.f_namelen); + +out: @@ -2601,7 +2527,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + && au_h_dptr(d, bindex) + && au_test_dbusy(d, bstart, bend)) { + err = -EBUSY; -+ AuVerbose(verbose, "busy %.*s\n", AuDLNPair(d)); ++ AuVerbose(verbose, "busy %pd\n", d); + AuDbgDentry(d); + } + di_read_unlock(d, AuLock_IR); @@ -2965,22 +2891,25 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c +{ + unsigned long long n; + struct file **p, *f; ++ struct au_sphlhead *files; ++ struct au_finfo *finfo; + struct super_block *sb = arg; + + n = 0; + p = a; -+ lg_global_lock(&files_lglock); -+ do_file_list_for_each_entry(sb, f) { -+ if (au_fi(f) -+ && file_count(f) ++ files = &au_sbi(sb)->si_files; ++ spin_lock(&files->spin); ++ hlist_for_each_entry(finfo, &files->head, fi_hlist) { ++ f = finfo->fi_file; ++ if (file_count(f) + && !special_file(file_inode(f)->i_mode)) { + get_file(f); + *p++ = f; + n++; + AuDebugOn(n > max); + } -+ } while_file_list_for_each_entry; -+ lg_global_unlock(&files_lglock); ++ } ++ spin_unlock(&files->spin); + + return n; +} @@ -3026,12 +2955,11 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + for (ull = 0; ull < max; ull++) { + file = array[ull]; + -+ /* AuDbg("%.*s\n", AuDLNPair(file->f_dentry)); */ ++ /* AuDbg("%pD\n", file); */ + fi_read_lock(file); + if (unlikely(au_test_mmapped(file))) { + err = -EBUSY; -+ AuVerbose(verbose, "mmapped %.*s\n", -+ AuDLNPair(file->f_dentry)); ++ AuVerbose(verbose, "mmapped %pD\n", file); + AuDbgFile(file); + FiMustNoWaiters(file); + fi_read_unlock(file); @@ -3066,7 +2994,13 @@ diff -urN /usr/share/empty/fs/aufs/branch.c linux/fs/aufs/branch.c + continue; + + /* todo: already flushed? */ -+ /* cf. fs/super.c:mark_files_ro() */ ++ /* ++ * fs/super.c:mark_files_ro() is gone, but aufs keeps its ++ * approach which resets f_mode and calls mnt_drop_write() and ++ * file_release_write() for each file, because the branch ++ * attribute in aufs world is totally different from the native ++ * fs rw/ro mode. ++ */ + /* fi_read_lock(file); */ + hfile = &au_fi(file)->fi_htop; + hf = hfile->hf_file; @@ -3173,10 +3107,10 @@ 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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,265 @@ ++++ linux/fs/aufs/branch.h 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,264 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -3189,8 +3123,7 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -3442,8 +3375,8 @@ diff -urN /usr/share/empty/fs/aufs/branch.h linux/fs/aufs/branch.h +#endif /* __AUFS_BRANCH_H__ */ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk --- /usr/share/empty/fs/aufs/conf.mk 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/conf.mk 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,38 @@ ++++ linux/fs/aufs/conf.mk 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,37 @@ + +AuConfStr = CONFIG_AUFS_FS=${CONFIG_AUFS_FS} + @@ -3458,7 +3391,6 @@ diff -urN /usr/share/empty/fs/aufs/conf.mk linux/fs/aufs/conf.mk + HNOTIFY HFSNOTIFY \ + EXPORT INO_T_64 \ + RDU \ -+ PROC_MAP \ + SP_IATTR \ + SHWH \ + BR_RAMFS \ @@ -3484,10 +3416,10 @@ 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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,1268 @@ ++++ linux/fs/aufs/cpup.c 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,1277 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -3500,8 +3432,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -3632,7 +3563,8 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + attr.ia_valid = ATTR_FORCE | ATTR_MTIME | ATTR_MTIME_SET + | ATTR_ATIME | ATTR_ATIME_SET; + -+ err = vfsub_notify_change(&dt->dt_h_path, &attr); ++ /* no delegation since this is a directory */ ++ err = vfsub_notify_change(&dt->dt_h_path, &attr, /*delegated*/NULL); + if (unlikely(err)) + pr_warn("restoring timestamps failed(%d). ignored\n", err); +} @@ -3689,13 +3621,14 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + sbits = !!(h_isrc->i_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_idst, h_isrc->i_flags); + } -+ err = vfsub_notify_change(&h_path, &ia); ++ /* no delegation since it is just created */ ++ err = vfsub_notify_change(&h_path, &ia, /*delegated*/NULL); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path.dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; -+ err = vfsub_notify_change(&h_path, &ia); ++ err = vfsub_notify_change(&h_path, &ia, /*delegated*/NULL); + } + + return err; @@ -3792,7 +3725,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + ia->ia_file = dst; + h_mtx = &file_inode(dst)->i_mutex; + mutex_lock_nested(h_mtx, AuLsc_I_CHILD2); -+ err = vfsub_notify_change(&dst->f_path, ia); ++ /* no delegation since it is just created */ ++ err = vfsub_notify_change(&dst->f_path, ia, ++ /*delegated*/NULL); + mutex_unlock(h_mtx); + } + } @@ -3849,20 +3784,18 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + struct dentry *dentry; + int force_wr; + struct file *file; -+ void *label, *label_file; ++ void *label; + } *f, file[] = { + { + .bindex = cpg->bsrc, + .flags = O_RDONLY | O_NOATIME | O_LARGEFILE, -+ .label = &&out, -+ .label_file = &&out_src ++ .label = &&out + }, + { + .bindex = cpg->bdst, + .flags = O_WRONLY | O_NOATIME | O_LARGEFILE, + .force_wr = !!au_ftest_cpup(cpg->flags, RWDST), -+ .label = &&out_src, -+ .label_file = &&out_dst ++ .label = &&out_src + } + }; + struct super_block *sb; @@ -3877,18 +3810,15 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + err = PTR_ERR(f->file); + if (IS_ERR(f->file)) + goto *f->label; -+ err = -EINVAL; -+ if (unlikely(!f->file->f_op)) -+ goto *f->label_file; + } + + /* try stopping to update while we copyup */ + IMustLock(file[SRC].dentry->d_inode); + err = au_copy_file(file[DST].file, file[SRC].file, cpg->len); + -+out_dst: + fput(file[DST].file); + au_sbr_put(sb, file[DST].bindex); ++ +out_src: + fput(file[SRC].file); + au_sbr_put(sb, file[SRC].bindex); @@ -4096,8 +4026,9 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + h_parent = h_dentry->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; + IMustLock(h_dir); -+ AuDbg("%.*s %.*s\n", AuDLNPair(h_dentry), AuDLNPair(h_path->dentry)); -+ err = vfsub_rename(h_dir, h_dentry, h_dir, h_path); ++ AuDbg("%pd %pd\n", h_dentry, h_path->dentry); ++ /* no delegation since it is just created */ ++ err = vfsub_rename(h_dir, h_dentry, h_dir, h_path, /*delegated*/NULL); + dput(h_path->dentry); + +out: @@ -4117,7 +4048,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + aufs_bindex_t old_ibstart; + unsigned char isdir, plink; + struct dentry *h_src, *h_dst, *h_parent; -+ struct inode *dst_inode, *h_dir, *inode; ++ struct inode *dst_inode, *h_dir, *inode, *delegated; + struct super_block *sb; + struct au_branch *br; + /* to reuduce stack size */ @@ -4182,11 +4113,17 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + } + + a->h_path.dentry = h_dst; -+ err = vfsub_link(h_src, h_dir, &a->h_path); ++ delegated = NULL; ++ err = vfsub_link(h_src, h_dir, &a->h_path, &delegated); + if (!err && au_ftest_cpup(cpg->flags, RENAME)) + err = au_do_ren_after_cpup(cpg, &a->h_path); + if (do_dt) + au_dtime_revert(&a->dt); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } + dput(h_src); + goto out_parent; + } else @@ -4254,9 +4191,11 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + a->h_path.dentry = h_dst; + rerr = 0; + if (h_dst->d_inode) { -+ if (!isdir) -+ rerr = vfsub_unlink(h_dir, &a->h_path, /*force*/0); -+ else ++ if (!isdir) { ++ /* no delegation since it is just created */ ++ rerr = vfsub_unlink(h_dir, &a->h_path, ++ /*delegated*/NULL, /*force*/0); ++ } else + rerr = vfsub_rmdir(h_dir, &a->h_path); + } + au_dtime_revert(&a->dt); @@ -4538,13 +4477,15 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c + + dget(wh_dentry); + h_path.dentry = wh_dentry; -+ if (!S_ISDIR(wh_dentry->d_inode->i_mode)) -+ err = vfsub_unlink(h_parent->d_inode, &h_path, /*force*/0); -+ else ++ if (!S_ISDIR(wh_dentry->d_inode->i_mode)) { ++ /* no delegation since it is just created */ ++ err = vfsub_unlink(h_parent->d_inode, &h_path, ++ /*delegated*/NULL, /*force*/0); ++ } else + err = vfsub_rmdir(h_parent->d_inode, &h_path); + if (unlikely(err)) { -+ AuIOErr("failed remove copied-up tmp file %.*s(%d)\n", -+ AuDLNPair(wh_dentry), err); ++ AuIOErr("failed remove copied-up tmp file %pd(%d)\n", ++ wh_dentry, err); + err = -EIO; + } + au_dtime_revert(&dt); @@ -4756,10 +4697,10 @@ diff -urN /usr/share/empty/fs/aufs/cpup.c linux/fs/aufs/cpup.c +} diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h --- /usr/share/empty/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/cpup.h 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,95 @@ ++++ linux/fs/aufs/cpup.h 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,94 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -4772,8 +4713,7 @@ diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -4855,10 +4795,10 @@ diff -urN /usr/share/empty/fs/aufs/cpup.h linux/fs/aufs/cpup.h +#endif /* __AUFS_CPUP_H__ */ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c --- /usr/share/empty/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dbgaufs.c 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,433 @@ ++++ linux/fs/aufs/dbgaufs.c 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,432 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -4871,8 +4811,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -5292,10 +5231,10 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.c linux/fs/aufs/dbgaufs.c +} diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h --- /usr/share/empty/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dbgaufs.h 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,49 @@ ++++ linux/fs/aufs/dbgaufs.h 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,48 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -5308,8 +5247,7 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -5345,10 +5283,10 @@ diff -urN /usr/share/empty/fs/aufs/dbgaufs.h linux/fs/aufs/dbgaufs.h +#endif /* __DBGAUFS_H__ */ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c --- /usr/share/empty/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dcsub.c 2013-10-26 16:51:29.579631476 +0200 ++++ linux/fs/aufs/dcsub.c 2014-01-20 20:16:14.732796615 +0100 @@ -0,0 +1,243 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -5361,8 +5299,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -5455,6 +5392,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c + return err; +} + ++/* try d_walk() in linux/fs/dcache.c */ +int au_dcsub_pages(struct au_dcsub_pages *dpages, struct dentry *root, + au_dpages_test test, void *arg) +{ @@ -5546,7 +5484,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c + goto out; + + /* -+ * vfsmount_lock is unnecessary since this is a traverse in a single ++ * RCU for vfsmount is unnecessary since this is a traverse in a single + * mount + */ + while (!IS_ROOT(dentry)) { @@ -5592,10 +5530,10 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.c linux/fs/aufs/dcsub.c +} diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h --- /usr/share/empty/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dcsub.h 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,94 @@ ++++ linux/fs/aufs/dcsub.h 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,98 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -5608,8 +5546,7 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -5652,6 +5589,11 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h + +/* ---------------------------------------------------------------------- */ + ++/* ++ * todo: in linux-3.13, several similar (but faster) helpers are added to ++ * include/linux/dcache.h. Try them (in the future). ++ */ ++ +static inline int au_d_hashed_positive(struct dentry *d) +{ + int err; @@ -5690,10 +5632,10 @@ diff -urN /usr/share/empty/fs/aufs/dcsub.h linux/fs/aufs/dcsub.h +#endif /* __AUFS_DCSUB_H__ */ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c --- /usr/share/empty/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/debug.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,518 @@ ++++ linux/fs/aufs/debug.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,517 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -5706,8 +5648,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -5879,11 +5820,11 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c + } + /* do not call dget_parent() here */ + /* note: access d_xxx without d_lock */ -+ dpri("d%d: %.*s?/%.*s, %s, cnt %d, flags 0x%x\n", -+ bindex, -+ AuDLNPair(dentry->d_parent), AuDLNPair(dentry), ++ dpri("d%d: %p, %pd2?, %s, cnt %d, flags 0x%x, %shashed\n", ++ bindex, dentry, dentry, + dentry->d_sb ? au_sbtype(dentry->d_sb) : "??", -+ d_count(dentry), dentry->d_flags); ++ d_count(dentry), dentry->d_flags, ++ d_unhashed(dentry) ? "un" : ""); + hn = -1; + if (bindex >= 0 && dentry->d_inode && au_test_aufs(dentry->d_sb)) { + struct au_iinfo *iinfo = au_ii(dentry->d_inode); @@ -6212,10 +6153,10 @@ diff -urN /usr/share/empty/fs/aufs/debug.c linux/fs/aufs/debug.c +} diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h --- /usr/share/empty/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/debug.h 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,249 @@ ++++ linux/fs/aufs/debug.h 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,247 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -6228,8 +6169,7 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -6320,7 +6260,6 @@ diff -urN /usr/share/empty/fs/aufs/debug.h linux/fs/aufs/debug.h + +/* dirty macros for debug print, use with "%.*s" and caution */ +#define AuLNPair(qstr) (qstr)->len, (qstr)->name -+#define AuDLNPair(d) AuLNPair(&(d)->d_name) + +/* ---------------------------------------------------------------------- */ + @@ -6465,10 +6404,10 @@ 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 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,1065 @@ ++++ linux/fs/aufs/dentry.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,1081 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -6481,8 +6420,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -6678,8 +6616,8 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + if (unlikely(!au_opt_test(au_mntflags(dentry->d_sb), UDBA_NONE) + && au_dbstart(dentry) < 0)) { + err = -EIO; -+ AuIOErr("both of real entry and whiteout found, %.*s, err %d\n", -+ AuDLNPair(dentry), err); ++ AuIOErr("both of real entry and whiteout found, %pd, err %d\n", ++ dentry, err); + } + +out_parent: @@ -6733,8 +6671,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + goto out; + if (unlikely(h_dentry->d_inode)) { + err = -EIO; -+ AuIOErr("%.*s should be negative on b%d.\n", -+ AuDLNPair(h_dentry), bindex); ++ AuIOErr("%pd should be negative on b%d.\n", h_dentry, bindex); + dput(h_dentry); + goto out; + } @@ -6991,8 +6928,8 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + /* shrink_dcache_parent(dentry); */ + err = au_hide_children(dentry); + if (unlikely(err)) -+ AuIOErr("%.*s, failed hiding children, ignored %d\n", -+ AuDLNPair(dentry), err); ++ AuIOErr("%pd, failed hiding children, ignored %d\n", ++ dentry, err); + } + au_do_hide(dentry); +} @@ -7223,8 +7160,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + au_update_digen(dentry); +out: + if (unlikely(err && !(dentry->d_flags & DCACHE_NFSFS_RENAMED))) { -+ AuIOErr("failed refreshing %.*s, %d\n", -+ AuDLNPair(dentry), err); ++ AuIOErr("failed refreshing %pd, %d\n", dentry, err); + AuDbgDentry(dentry); + } + AuTraceErr(err); @@ -7267,7 +7203,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + int err; + umode_t mode, h_mode; + aufs_bindex_t bindex, btail, bstart, ibs, ibe; -+ unsigned char plus, unhashed, is_root, h_plus; ++ unsigned char plus, unhashed, is_root, h_plus, h_nfs; + struct inode *h_inode, *h_cached_inode; + struct dentry *h_dentry; + struct qstr *name, *h_name; @@ -7305,18 +7241,25 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + if (!h_dentry) + continue; + -+ AuDbg("b%d, %.*s\n", bindex, AuDLNPair(h_dentry)); ++ AuDbg("b%d, %pd\n", bindex, h_dentry); ++ h_nfs = !!au_test_nfs(h_dentry->d_sb); + spin_lock(&h_dentry->d_lock); + h_name = &h_dentry->d_name; + if (unlikely(do_udba + && !is_root -+ && (unhashed != !!d_unhashed(h_dentry) -+ || name->len != h_name->len -+ || memcmp(name->name, h_name->name, name->len)) ++ && ((!h_nfs ++ && (unhashed != !!d_unhashed(h_dentry) ++ || name->len != h_name->len ++ || memcmp(name->name, h_name->name, ++ name->len))) ++ || (h_nfs ++ && !(flags & LOOKUP_OPEN) ++ && (h_dentry->d_flags ++ & DCACHE_NFSFS_RENAMED))) + )) { -+ AuDbg("unhash 0x%x 0x%x, %.*s %.*s\n", -+ unhashed, d_unhashed(h_dentry), -+ AuDLNPair(dentry), AuDLNPair(h_dentry)); ++ AuDbg("unhash 0x%x 0x%x, %pd %pd\n", ++ unhashed, d_unhashed(h_dentry), ++ dentry, h_dentry); + spin_unlock(&h_dentry->d_lock); + goto err; + } @@ -7346,8 +7289,17 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + if (inode && ibs <= bindex && bindex <= ibe) + h_cached_inode = au_h_iptr(inode, bindex); + -+ if (unlikely(plus != h_plus -+ || mode != h_mode ++ if (!h_nfs) { ++ if (unlikely(plus != h_plus)) ++ goto err; ++ } else { ++ if (unlikely(!(h_dentry->d_flags & DCACHE_NFSFS_RENAMED) ++ && !is_root ++ && !IS_ROOT(h_dentry) ++ && unhashed != d_unhashed(h_dentry))) ++ goto err; ++ } ++ if (unlikely(mode != h_mode + || h_cached_inode != h_inode)) + goto err; + continue; @@ -7357,6 +7309,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + break; + } + ++ AuTraceErr(err); + return err; +} + @@ -7482,7 +7435,9 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + di_downgrade_lock(dentry, AuLock_IR); + + err = -EINVAL; -+ if (inode && (IS_DEADDIR(inode) || !inode->i_nlink)) ++ if (!(flags & LOOKUP_OPEN) ++ && inode ++ && (IS_DEADDIR(inode) || !inode->i_nlink)) + goto out_inval; + + do_udba = !au_opt_test(au_mntflags(sb), UDBA_NONE); @@ -7500,8 +7455,8 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + err = h_d_revalidate(dentry, inode, flags, do_udba); + if (unlikely(!err && do_udba && au_dbstart(dentry) < 0)) { + err = -EIO; -+ AuDbg("both of real entry and whiteout found, %.*s, err %d\n", -+ AuDLNPair(dentry), err); ++ AuDbg("both of real entry and whiteout found, %p, err %d\n", ++ dentry, err); + } + goto out_inval; + @@ -7513,7 +7468,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c + valid = !err; +out: + if (!valid) { -+ AuDbg("%.*s invalid, %d\n", AuDLNPair(dentry), valid); ++ AuDbg("%pd invalid, %d\n", dentry, valid); + d_drop(dentry); + } + return valid; @@ -7534,10 +7489,10 @@ diff -urN /usr/share/empty/fs/aufs/dentry.c linux/fs/aufs/dentry.c +}; 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 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,234 @@ ++++ linux/fs/aufs/dentry.h 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,233 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -7550,8 +7505,7 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -7772,10 +7726,10 @@ diff -urN /usr/share/empty/fs/aufs/dentry.h linux/fs/aufs/dentry.h +#endif /* __AUFS_DENTRY_H__ */ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c --- /usr/share/empty/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dinfo.c 2013-10-26 16:51:29.579631476 +0200 -@@ -0,0 +1,543 @@ ++++ linux/fs/aufs/dinfo.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,542 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -7788,8 +7742,7 @@ diff -urN /usr/share/empty/fs/aufs/dinfo.c linux/fs/aufs/dinfo.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -8319,10 +8272,10 @@ 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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,645 @@ ++++ linux/fs/aufs/dir.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,639 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -8335,8 +8288,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -8476,11 +8428,8 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + + FiMustWriteLock(file); + ++ err = 0; + dentry = file->f_dentry; -+ err = au_alive_dir(dentry); -+ if (unlikely(err)) -+ goto out; -+ + file->f_version = dentry->d_inode->i_version; + bindex = au_dbstart(dentry); + au_set_fbstart(file, bindex); @@ -8510,7 +8459,6 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + au_set_fbstart(file, -1); + au_set_fbend_dir(file, -1); + -+out: + return err; +} + @@ -8688,8 +8636,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c + struct inode *inode, *h_inode; + struct super_block *sb; + -+ AuDbg("%.*s, ctx{%pf, %llu}\n", -+ AuDLNPair(file->f_dentry), ctx->actor, ctx->pos); ++ AuDbg("%pD, ctx{%pf, %llu}\n", file, ctx->actor, ctx->pos); + + dentry = file->f_dentry; + inode = dentry->d_inode; @@ -8968,10 +8915,10 @@ diff -urN /usr/share/empty/fs/aufs/dir.c linux/fs/aufs/dir.c +}; diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h --- /usr/share/empty/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dir.h 2013-10-26 16:51:29.582964925 +0200 -@@ -0,0 +1,137 @@ ++++ linux/fs/aufs/dir.h 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,136 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -8984,8 +8931,7 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -9109,10 +9055,10 @@ diff -urN /usr/share/empty/fs/aufs/dir.h linux/fs/aufs/dir.h +#endif /* __AUFS_DIR_H__ */ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c --- /usr/share/empty/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dynop.c 2013-10-26 16:51:29.582964925 +0200 -@@ -0,0 +1,380 @@ ++++ linux/fs/aufs/dynop.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,379 @@ +/* -+ * Copyright (C) 2010-2013 Junjiro R. Okajima ++ * Copyright (C) 2010-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -9125,8 +9071,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -9493,10 +9438,10 @@ diff -urN /usr/share/empty/fs/aufs/dynop.c linux/fs/aufs/dynop.c +} diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h --- /usr/share/empty/fs/aufs/dynop.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/dynop.h 2013-07-06 13:20:47.740198107 +0200 -@@ -0,0 +1,76 @@ ++++ linux/fs/aufs/dynop.h 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,75 @@ +/* -+ * Copyright (C) 2010-2013 Junjiro R. Okajima ++ * Copyright (C) 2010-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -9509,8 +9454,7 @@ diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -9573,10 +9517,10 @@ diff -urN /usr/share/empty/fs/aufs/dynop.h linux/fs/aufs/dynop.h +#endif /* __AUFS_DYNOP_H__ */ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c --- /usr/share/empty/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/export.c 2013-10-26 16:51:29.582964925 +0200 -@@ -0,0 +1,832 @@ ++++ linux/fs/aufs/export.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,831 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -9589,8 +9533,7 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -9878,9 +9821,9 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.c + }; + + get_fs_root(current->fs, &root); -+ br_read_lock(&vfsmount_lock); ++ rcu_read_lock(); + err = iterate_mounts(au_compare_mnt, &args, root.mnt); -+ br_read_unlock(&vfsmount_lock); ++ rcu_read_unlock(); + path_put(&root); + AuDebugOn(!err); + AuDebugOn(!args.mnt); @@ -10409,10 +10352,10 @@ diff -urN /usr/share/empty/fs/aufs/export.c linux/fs/aufs/export.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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,725 @@ ++++ linux/fs/aufs/file.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,724 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -10425,8 +10368,7 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -11138,10 +11080,10 @@ diff -urN /usr/share/empty/fs/aufs/file.c linux/fs/aufs/file.c +}; diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h --- /usr/share/empty/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/file.h 2013-10-26 16:51:32.273040419 +0200 ++++ linux/fs/aufs/file.h 2014-01-20 20:16:14.736130059 +0100 @@ -0,0 +1,312 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -11154,8 +11096,7 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -11204,6 +11145,9 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h + atomic_t fi_mmapped; + }; + struct au_fidir *fi_hdir; /* for dir only */ ++ ++ struct hlist_node fi_hlist; ++ struct file *fi_file; /* very ugly */ +} ____cacheline_aligned_in_smp; + +/* ---------------------------------------------------------------------- */ @@ -11440,24 +11384,22 @@ diff -urN /usr/share/empty/fs/aufs/file.h linux/fs/aufs/file.h +static inline void au_vm_prfile_set(struct vm_area_struct *vma, + struct file *file) +{ -+#ifdef CONFIG_AUFS_PROC_MAP + get_file(file); + vma->vm_prfile = file; +#ifndef CONFIG_MMU + get_file(file); + vma->vm_region->vm_prfile = file; +#endif -+#endif +} + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c --- /usr/share/empty/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/finfo.c 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,157 @@ ++++ linux/fs/aufs/finfo.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,156 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -11470,8 +11412,7 @@ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -11615,10 +11556,10 @@ diff -urN /usr/share/empty/fs/aufs/finfo.c linux/fs/aufs/finfo.c +} diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c --- /usr/share/empty/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/f_op.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,726 @@ ++++ linux/fs/aufs/f_op.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,718 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -11631,8 +11572,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -11655,11 +11595,8 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + + FiMustWriteLock(file); + ++ err = 0; + dentry = file->f_dentry; -+ err = au_d_alive(dentry); -+ if (unlikely(err)) -+ goto out; -+ + finfo = au_fi(file); + memset(&finfo->fi_htop, 0, sizeof(finfo->fi_htop)); + atomic_set(&finfo->fi_mmapped, 0); @@ -11671,16 +11608,12 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + au_set_fbstart(file, bindex); + au_set_h_fptr(file, bindex, h_file); + au_update_figen(file); -+ if (!(file->f_mode & FMODE_WRITE)) { -+ lg_local_lock(&files_lglock); -+ __file_sb_list_add(file, dentry->d_sb); -+ lg_local_unlock(&files_lglock); -+ } ++ finfo->fi_file = file; ++ au_sphl_add(&finfo->fi_hlist, &au_sbi(dentry->d_sb)->si_files); + /* todo: necessary? */ + /* file->f_ra = h_file->f_ra; */ + } + -+out: + return err; +} + @@ -11690,9 +11623,8 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + int err; + struct super_block *sb; + -+ AuDbg("%.*s, f_flags 0x%x, f_mode 0x%x\n", -+ AuDLNPair(file->f_dentry), vfsub_file_flags(file), -+ file->f_mode); ++ AuDbg("%pD, f_flags 0x%x, f_mode 0x%x\n", ++ file, vfsub_file_flags(file), file->f_mode); + + sb = file->f_dentry->d_sb; + si_read_lock(sb, AuLock_FLUSH); @@ -11707,6 +11639,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + aufs_bindex_t bindex; + + finfo = au_fi(file); ++ au_sphl_del(&finfo->fi_hlist, &au_sbi(file->f_dentry->d_sb)->si_files); + bindex = finfo->fi_btop; + if (bindex >= 0) + au_set_h_fptr(file, bindex, NULL); @@ -12246,7 +12179,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + + err = -ENOSYS; + h_file = au_hf_top(file); -+ if (h_file->f_op && h_file->f_op->aio_fsync) { ++ if (h_file->f_op->aio_fsync) { + struct mutex *h_mtx; + + h_mtx = &file_inode(h_file)->i_mutex; @@ -12289,7 +12222,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c + goto out; + + h_file = au_hf_top(file); -+ if (h_file->f_op && h_file->f_op->fasync) ++ if (h_file->f_op->fasync) + err = h_file->f_op->fasync(fd, h_file, flag); + + di_read_unlock(dentry, AuLock_IR); @@ -12345,10 +12278,10 @@ diff -urN /usr/share/empty/fs/aufs/f_op.c linux/fs/aufs/f_op.c +}; diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c --- /usr/share/empty/fs/aufs/f_op_sp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/f_op_sp.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,383 @@ ++++ linux/fs/aufs/f_op_sp.c 2014-01-20 20:16:14.736130059 +0100 +@@ -0,0 +1,382 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -12361,8 +12294,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -12610,7 +12542,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c + .flags = AuCpup_DTIME + }; + -+ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ AuDbg("%pd\n", dentry); + + di_read_unlock(dentry, AuLock_IR); + di_write_lock_child(dentry); @@ -12647,7 +12579,7 @@ diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.c + goto out; + + dentry = file->f_dentry; -+ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ AuDbg("%pd\n", dentry); + + /* + * try copying-up. @@ -12732,10 +12664,10 @@ diff -urN /usr/share/empty/fs/aufs/f_op_sp.c linux/fs/aufs/f_op_sp.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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,470 @@ ++++ linux/fs/aufs/fstype.h 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,469 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -12748,8 +12680,7 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -13206,10 +13137,10 @@ diff -urN /usr/share/empty/fs/aufs/fstype.h linux/fs/aufs/fstype.h +#endif /* __AUFS_FSTYPE_H__ */ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c --- /usr/share/empty/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hfsnotify.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,296 @@ ++++ linux/fs/aufs/hfsnotify.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,295 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -13222,8 +13153,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -13506,10 +13436,10 @@ diff -urN /usr/share/empty/fs/aufs/hfsnotify.c linux/fs/aufs/hfsnotify.c +}; diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c --- /usr/share/empty/fs/aufs/hfsplus.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hfsplus.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,57 @@ ++++ linux/fs/aufs/hfsplus.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,56 @@ +/* -+ * Copyright (C) 2010-2013 Junjiro R. Okajima ++ * Copyright (C) 2010-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -13522,8 +13452,7 @@ diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -13567,10 +13496,10 @@ diff -urN /usr/share/empty/fs/aufs/hfsplus.c linux/fs/aufs/hfsplus.c +} diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c --- /usr/share/empty/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/hnotify.c 2013-10-26 16:51:29.582964925 +0200 -@@ -0,0 +1,712 @@ ++++ linux/fs/aufs/hnotify.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,710 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -13583,8 +13512,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -13929,8 +13857,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c + if (au_ftest_hnjob(a->flags, MNTPNT) + && a->dentry + && d_mountpoint(a->dentry)) -+ pr_warn("mount-point %.*s is removed or renamed\n", -+ AuDLNPair(a->dentry)); ++ pr_warn("mount-point %pd is removed or renamed\n", a->dentry); + + return 0; +} @@ -13950,7 +13877,7 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c + dentry = NULL; + spin_lock(&parent->d_lock); + list_for_each_entry(d, &parent->d_subdirs, d_u.d_child) { -+ /* AuDbg("%.*s\n", AuDLNPair(d)); */ ++ /* AuDbg("%pd\n", d); */ + spin_lock_nested(&d->d_lock, DENTRY_D_LOCK_NESTED); + dname = &d->d_name; + if (dname->len != nlen || memcmp(dname->name, name, nlen)) @@ -14283,10 +14210,10 @@ diff -urN /usr/share/empty/fs/aufs/hnotify.c linux/fs/aufs/hnotify.c +} diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c --- /usr/share/empty/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/iinfo.c 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,276 @@ ++++ linux/fs/aufs/iinfo.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,275 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -14299,8 +14226,7 @@ diff -urN /usr/share/empty/fs/aufs/iinfo.c linux/fs/aufs/iinfo.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -14563,10 +14489,10 @@ 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 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,492 @@ ++++ linux/fs/aufs/inode.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,491 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -14579,8 +14505,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -14995,8 +14920,8 @@ diff -urN /usr/share/empty/fs/aufs/inode.c linux/fs/aufs/inode.c + + if (unlikely(au_test_fs_unique_ino(h_dentry->d_inode))) + AuWarn1("Warning: Un-notified UDBA or repeatedly renamed dir," -+ " b%d, %s, %.*s, hi%lu, i%lu.\n", -+ bstart, au_sbtype(h_dentry->d_sb), AuDLNPair(dentry), ++ " b%d, %s, %pd, hi%lu, i%lu.\n", ++ bstart, au_sbtype(h_dentry->d_sb), dentry, + (unsigned long)h_ino, (unsigned long)ino); + ino = 0; + err = au_xino_write(sb, bstart, h_ino, /*ino*/0); @@ -15059,10 +14984,10 @@ 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 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,600 @@ ++++ linux/fs/aufs/inode.h 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,599 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -15075,8 +15000,7 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -15663,10 +15587,10 @@ diff -urN /usr/share/empty/fs/aufs/inode.h linux/fs/aufs/inode.h +#endif /* __AUFS_INODE_H__ */ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c --- /usr/share/empty/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/ioctl.c 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,202 @@ ++++ linux/fs/aufs/ioctl.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,201 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -15679,8 +15603,7 @@ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -15869,10 +15792,10 @@ diff -urN /usr/share/empty/fs/aufs/ioctl.c linux/fs/aufs/ioctl.c +#endif diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c --- /usr/share/empty/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/i_op_add.c 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,739 @@ ++++ linux/fs/aufs/i_op_add.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,762 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -15885,8 +15808,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -15944,8 +15866,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + wh = au_wh_create(dentry, bwh, wh_dentry->d_parent); + rerr = PTR_ERR(wh); + if (IS_ERR(wh)) { -+ AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd reverting whiteout failed(%d, %d)\n", ++ dentry, err, rerr); + err = -EIO; + } else + dput(wh); @@ -16032,7 +15954,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + unsigned int udba; + aufs_bindex_t bcpup; + -+ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ AuDbg("%pd\n", dentry); + + err = au_wr_dir(dentry, src_dentry, wr_dir_args); + bcpup = err; @@ -16117,7 +16039,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + struct au_wr_dir_args wr_dir_args; + } *a; + -+ AuDbg("%.*s\n", AuDLNPair(dentry)); ++ AuDbg("%pd\n", dentry); + IMustLock(dir); + + err = -ENOMEM; @@ -16167,10 +16089,12 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + /* revert */ + if (unlikely(created && err && a->h_path.dentry->d_inode)) { + int rerr; -+ rerr = vfsub_unlink(h_dir, &a->h_path, /*force*/0); ++ /* no delegation since it is just created */ ++ rerr = vfsub_unlink(h_dir, &a->h_path, /*delegated*/NULL, ++ /*force*/0); + if (rerr) { -+ AuIOErr("%.*s revert failure(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd revert failure(%d, %d)\n", ++ dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&a->dt); @@ -16278,7 +16202,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + unsigned char plink; + aufs_bindex_t bend; + struct dentry *h_src_dentry; -+ struct inode *h_inode, *inode; ++ struct inode *h_inode, *inode, *delegated; + struct super_block *sb; + struct file *h_file; + @@ -16339,8 +16263,14 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + + } + if (h_src_dentry) { ++ delegated = NULL; + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), -+ &a->h_path); ++ &a->h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } + dput(h_src_dentry); + } else { + AuIOErr("no dentry found for hi%lu on b%d\n", @@ -16364,7 +16294,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + struct au_dtime dt; + struct au_link_args *a; + struct dentry *wh_dentry, *h_src_dentry; -+ struct inode *inode; ++ struct inode *inode, *delegated; + struct super_block *sb; + struct au_wr_dir_args wr_dir_args = { + /* .force_btgt = -1, */ @@ -16421,9 +16351,16 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + if (a->bdst < a->bsrc + /* && h_src_dentry->d_sb != a->h_path.dentry->d_sb */) + err = au_cpup_or_link(src_dentry, dentry, a); -+ else ++ else { ++ delegated = NULL; + err = vfsub_link(h_src_dentry, au_pinned_h_dir(&a->pin), -+ &a->h_path); ++ &a->h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } ++ } + dput(h_src_dentry); + } else { + /* @@ -16447,10 +16384,18 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + if (!err) { + h_src_dentry = au_h_dptr(src_dentry, a->bdst); + err = -ENOENT; -+ if (h_src_dentry && h_src_dentry->d_inode) ++ if (h_src_dentry && h_src_dentry->d_inode) { ++ delegated = NULL; + err = vfsub_link(h_src_dentry, + au_pinned_h_dir(&a->pin), -+ &a->h_path); ++ &a->h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry" ++ " for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } ++ } + } + } + if (unlikely(err)) @@ -16476,10 +16421,11 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + goto out_unpin; /* success */ + +out_revert: -+ rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, /*force*/0); ++ /* no delegation since it is just created */ ++ rerr = vfsub_unlink(au_pinned_h_dir(&a->pin), &a->h_path, ++ /*delegated*/NULL, /*force*/0); + if (unlikely(rerr)) { -+ AuIOErr("%.*s reverting failed(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd reverting failed(%d, %d)\n", dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&dt); @@ -16579,8 +16525,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + rerr = au_diropq_remove(dentry, bindex); + mutex_unlock(h_mtx); + if (rerr) { -+ AuIOErr("%.*s reverting diropq failed(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd reverting diropq failed(%d, %d)\n", ++ dentry, err, rerr); + err = -EIO; + } + } @@ -16589,8 +16535,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_add.c linux/fs/aufs/i_op_add.c + AuLabel(revert dir); + rerr = vfsub_rmdir(au_pinned_h_dir(&a->pin), &h_path); + if (rerr) { -+ AuIOErr("%.*s reverting dir failed(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd reverting dir failed(%d, %d)\n", ++ dentry, err, rerr); + err = -EIO; + } + au_dtime_revert(&a->dt); @@ -16612,10 +16558,10 @@ 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 2013-10-26 16:51:32.273040419 +0200 -@@ -0,0 +1,1118 @@ ++++ linux/fs/aufs/i_op.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,1127 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -16628,8 +16574,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -17356,7 +17301,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c +static int aufs_setattr(struct dentry *dentry, struct iattr *ia) +{ + int err; -+ struct inode *inode; ++ struct inode *inode, *delegated; + struct super_block *sb; + struct file *file; + struct au_icpup_args *a; @@ -17436,8 +17381,18 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c + mutex_unlock(&a->h_inode->i_mutex); + err = vfsub_trunc(&a->h_path, ia->ia_size, ia->ia_valid, f); + mutex_lock_nested(&a->h_inode->i_mutex, AuLsc_I_CHILD); -+ } else -+ err = vfsub_notify_change(&a->h_path, ia); ++ } else { ++ delegated = NULL; ++ while (1) { ++ err = vfsub_notify_change(&a->h_path, ia, &delegated); ++ if (delegated) { ++ err = break_deleg_wait(&delegated); ++ if (!err) ++ continue; ++ } ++ break; ++ } ++ } + if (!err) + au_cpup_attr_changeable(inode); + @@ -17734,10 +17689,10 @@ diff -urN /usr/share/empty/fs/aufs/i_op.c linux/fs/aufs/i_op.c +}; 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 -+++ linux/fs/aufs/i_op_del.c 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,502 @@ ++++ linux/fs/aufs/i_op_del.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,506 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -17750,8 +17705,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -17978,8 +17932,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c + + err = au_whtmp_rmdir(dir, bindex, h_dentry, whlist); + if (unlikely(err)) { -+ AuIOErr("rmdir %.*s, b%d failed, %d. ignored\n", -+ AuDLNPair(h_dentry), bindex, err); ++ AuIOErr("rmdir %pd, b%d failed, %d. ignored\n", ++ h_dentry, bindex, err); + err = 0; + } + @@ -18026,8 +17980,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c + return 0; + } + -+ AuIOErr("%.*s reverting whiteout failed(%d, %d)\n", -+ AuDLNPair(dentry), err, rerr); ++ AuIOErr("%pd reverting whiteout failed(%d, %d)\n", dentry, err, rerr); + return -EIO; +} + @@ -18037,7 +17990,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c +{ + int err; + aufs_bindex_t bwh, bindex, bstart; -+ struct inode *inode, *h_dir; ++ struct inode *inode, *h_dir, *delegated; + struct dentry *parent, *wh_dentry; + /* to reuduce stack size */ + struct { @@ -18081,7 +18034,13 @@ diff -urN /usr/share/empty/fs/aufs/i_op_del.c linux/fs/aufs/i_op_del.c + dget(a->h_path.dentry); + if (bindex == bstart) { + h_dir = au_pinned_h_dir(&a->pin); -+ err = vfsub_unlink(h_dir, &a->h_path, /*force*/0); ++ delegated = NULL; ++ err = vfsub_unlink(h_dir, &a->h_path, &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + } else { + /* dir inode is locked */ + h_dir = wh_dentry->d_parent->d_inode; @@ -18240,10 +18199,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,1009 @@ ++++ linux/fs/aufs/i_op_ren.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,1032 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -18256,8 +18215,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -18356,29 +18314,36 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + au_hn_imtx_unlock(a->src_hinode); + au_set_dbdiropq(a->src_dentry, a->src_bdiropq); + if (rerr) -+ RevertFailure("remove diropq %.*s", AuDLNPair(a->src_dentry)); ++ RevertFailure("remove diropq %pd", a->src_dentry); +} + +static void au_ren_rev_rename(int err, struct au_ren_args *a) +{ + int rerr; ++ struct inode *delegated; + + a->h_path.dentry = vfsub_lkup_one(&a->src_dentry->d_name, + a->src_h_parent); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { -+ RevertFailure("lkup one %.*s", AuDLNPair(a->src_dentry)); ++ RevertFailure("lkup one %pd", a->src_dentry); + return; + } + ++ delegated = NULL; + rerr = vfsub_rename(a->dst_h_dir, + au_h_dptr(a->src_dentry, a->btgt), -+ a->src_h_dir, &a->h_path); ++ a->src_h_dir, &a->h_path, &delegated); ++ if (unlikely(rerr == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal rename\n"); ++ iput(delegated); ++ } + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + /* au_set_h_dptr(a->src_dentry, a->btgt, NULL); */ + if (rerr) -+ RevertFailure("rename %.*s", AuDLNPair(a->src_dentry)); ++ RevertFailure("rename %pd", a->src_dentry); +} + +static void au_ren_rev_cpup(int err, struct au_ren_args *a) @@ -18386,22 +18351,25 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + int rerr; + + a->h_path.dentry = a->dst_h_dentry; -+ rerr = vfsub_unlink(a->dst_h_dir, &a->h_path, /*force*/0); ++ /* no delegation since it is just created */ ++ rerr = vfsub_unlink(a->dst_h_dir, &a->h_path, /*delegated*/NULL, ++ /*force*/0); + au_set_h_dptr(a->src_dentry, a->btgt, NULL); + au_set_dbstart(a->src_dentry, a->src_bstart); + if (rerr) -+ RevertFailure("unlink %.*s", AuDLNPair(a->dst_h_dentry)); ++ RevertFailure("unlink %pd", a->dst_h_dentry); +} + +static void au_ren_rev_whtmp(int err, struct au_ren_args *a) +{ + int rerr; ++ struct inode *delegated; + + a->h_path.dentry = vfsub_lkup_one(&a->dst_dentry->d_name, + a->dst_h_parent); + rerr = PTR_ERR(a->h_path.dentry); + if (IS_ERR(a->h_path.dentry)) { -+ RevertFailure("lkup one %.*s", AuDLNPair(a->dst_dentry)); ++ RevertFailure("lkup one %pd", a->dst_dentry); + return; + } + if (a->h_path.dentry->d_inode) { @@ -18410,13 +18378,20 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + return; + } + -+ rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path); ++ delegated = NULL; ++ rerr = vfsub_rename(a->dst_h_dir, a->h_dst, a->dst_h_dir, &a->h_path, ++ &delegated); ++ if (unlikely(rerr == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal rename\n"); ++ iput(delegated); ++ } + d_drop(a->h_path.dentry); + dput(a->h_path.dentry); + if (!rerr) + au_set_h_dptr(a->dst_dentry, a->btgt, dget(a->h_dst)); + else -+ RevertFailure("rename %.*s", AuDLNPair(a->h_dst)); ++ RevertFailure("rename %pd", a->h_dst); +} + +static void au_ren_rev_whsrc(int err, struct au_ren_args *a) @@ -18427,7 +18402,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + rerr = au_wh_unlink_dentry(a->src_h_dir, &a->h_path, a->src_dentry); + au_set_dbwh(a->src_dentry, a->src_bwh); + if (rerr) -+ RevertFailure("unlink %.*s", AuDLNPair(a->src_wh_dentry)); ++ RevertFailure("unlink %pd", a->src_wh_dentry); +} +#undef RevertFailure + @@ -18442,6 +18417,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c +{ + int err; + struct dentry *d; ++ struct inode *delegated; + + d = a->src_dentry; + if (au_dbstart(d) == a->btgt) { @@ -18450,8 +18426,14 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + && au_dbdiropq(d) == a->btgt) + au_fclr_ren(a->flags, DIROPQ); + AuDebugOn(au_dbstart(d) != a->btgt); ++ delegated = NULL; + err = vfsub_rename(a->src_h_dir, au_h_dptr(d, a->btgt), -+ a->dst_h_dir, &a->h_path); ++ a->dst_h_dir, &a->h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal rename\n"); ++ iput(delegated); ++ } + } else + BUG(); + @@ -18475,8 +18457,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + || au_test_fs_remote(a->h_dst->d_sb)) { + err = au_whtmp_rmdir(dir, a->btgt, a->h_dst, &a->whlist); + if (unlikely(err)) -+ pr_warn("failed removing whtmp dir %.*s (%d), " -+ "ignored.\n", AuDLNPair(a->h_dst), err); ++ pr_warn("failed removing whtmp dir %pd (%d), " ++ "ignored.\n", a->h_dst, err); + } else { + au_nhash_wh_free(&a->thargs->whlist); + a->thargs->whlist = a->whlist; @@ -19049,7 +19031,7 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c + /* reduce stack space */ + struct au_ren_args *a; + -+ AuDbg("%.*s, %.*s\n", AuDLNPair(_src_dentry), AuDLNPair(_dst_dentry)); ++ AuDbg("%pd, %pd\n", _src_dentry, _dst_dentry); + IMustLock(_src_dir); + IMustLock(_dst_dir); + @@ -19253,8 +19235,8 @@ diff -urN /usr/share/empty/fs/aufs/i_op_ren.c linux/fs/aufs/i_op_ren.c +} diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig --- /usr/share/empty/fs/aufs/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/Kconfig 2013-07-06 13:20:47.736864659 +0200 -@@ -0,0 +1,202 @@ ++++ linux/fs/aufs/Kconfig 2014-01-20 20:16:14.732796615 +0100 +@@ -0,0 +1,179 @@ +config AUFS_FS + tristate "Aufs (Advanced multi layered unification filesystem) support" + help @@ -19356,29 +19338,6 @@ diff -urN /usr/share/empty/fs/aufs/Kconfig linux/fs/aufs/Kconfig + shows better performance in most cases. + See detail in aufs.5. + -+config AUFS_PROC_MAP -+ bool "support for /proc/maps and lsof(1)" -+ depends on PROC_FS -+ help -+ When you issue mmap(2) in aufs, it is actually a direct mmap(2) -+ call to the file on the branch fs since the file in aufs is -+ purely virtual. And the file path printed in /proc/maps (and -+ others) will be the path on the branch fs. In most cases, it -+ does no harm. But some utilities like lsof(1) may confuse since -+ the utility or user may expect the file path in aufs to be -+ printed. -+ To address this issue, aufs provides a patch which introduces a -+ new member called vm_prfile into struct vm_are_struct. The patch -+ is meaningless without enabling this configuration since nobody -+ sets the new vm_prfile member. -+ If you don't apply the patch, then enabling this configuration -+ will cause a compile error. -+ This approach is fragile since if someone else make some changes -+ around vm_file, then vm_prfile may not work anymore. As a -+ workaround such case, aufs provides this configuration. If you -+ disable it, then lsof(1) may produce incorrect result but the -+ problem will be gone even if the aufs patch is applied (I hope). -+ +config AUFS_SP_IATTR + bool "Respect the attributes (mtime/ctime mainly) of special files" + help @@ -19459,10 +19418,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,146 @@ ++++ linux/fs/aufs/loop.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,145 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -19475,8 +19434,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -19609,10 +19567,10 @@ diff -urN /usr/share/empty/fs/aufs/loop.c linux/fs/aufs/loop.c +} diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h --- /usr/share/empty/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/loop.h 2013-10-26 16:51:29.586298347 +0200 -@@ -0,0 +1,53 @@ ++++ linux/fs/aufs/loop.h 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,52 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -19625,8 +19583,7 @@ diff -urN /usr/share/empty/fs/aufs/loop.h linux/fs/aufs/loop.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -19724,7 +19681,7 @@ diff -urN /usr/share/empty/fs/aufs/magic.mk linux/fs/aufs/magic.mk +endif diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile --- /usr/share/empty/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/Makefile 2013-10-26 16:51:32.273040419 +0200 ++++ linux/fs/aufs/Makefile 2014-01-20 20:16:14.732796615 +0100 @@ -0,0 +1,42 @@ + +include ${src}/magic.mk @@ -19738,9 +19695,9 @@ diff -urN /usr/share/empty/fs/aufs/Makefile linux/fs/aufs/Makefile +ccflags-y += -DDEBUG +# sparse requires the full pathname +ifdef M -+ccflags-y += -include ${M}/../../include/linux/aufs_type.h ++ccflags-y += -include ${M}/../../include/uapi/linux/aufs_type.h +else -+ccflags-y += -include ${srctree}/include/linux/aufs_type.h ++ccflags-y += -include ${srctree}/include/uapi/linux/aufs_type.h +endif + +obj-$(CONFIG_AUFS_FS) += aufs.o @@ -19770,10 +19727,10 @@ 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 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,203 @@ ++++ linux/fs/aufs/module.c 2014-01-20 20:16:14.739463504 +0100 +@@ -0,0 +1,202 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -19786,8 +19743,7 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -19977,10 +19933,10 @@ diff -urN /usr/share/empty/fs/aufs/module.c linux/fs/aufs/module.c +module_exit(aufs_exit); diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h --- /usr/share/empty/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/module.h 2013-07-06 13:20:47.750198454 +0200 -@@ -0,0 +1,105 @@ ++++ linux/fs/aufs/module.h 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,104 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -19993,8 +19949,7 @@ diff -urN /usr/share/empty/fs/aufs/module.h linux/fs/aufs/module.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -20086,10 +20041,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,610 @@ ++++ linux/fs/aufs/mvdown.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,627 @@ +/* -+ * Copyright (C) 2011-2013 Junjiro R. Okajima ++ * Copyright (C) 2011-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -20102,8 +20057,11 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . ++ */ ++ ++/* ++ * move-down, opposite of copy-up + */ + +#include "aufs.h" @@ -20257,6 +20215,7 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c + int err; + struct path h_path; + struct au_branch *br; ++ struct inode *delegated; + + br = au_sbr(a->sb, a->mvd_bdst); + h_path.dentry = au_wh_lkup(a->mvd_h_dst_parent, &a->dentry->d_name, br); @@ -20269,8 +20228,14 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c + err = 0; + if (h_path.dentry->d_inode) { + h_path.mnt = au_br_mnt(br); ++ delegated = NULL; + err = vfsub_unlink(a->mvd_h_dst_parent->d_inode, &h_path, -+ /*force*/0); ++ &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + if (unlikely(err)) + AU_MVD_PR(dmsg, "wh_unlink failed\n"); + } @@ -20290,10 +20255,17 @@ diff -urN /usr/share/empty/fs/aufs/mvdown.c linux/fs/aufs/mvdown.c +{ + int err; + struct path h_path; ++ struct inode *delegated; + + h_path.mnt = au_sbr_mnt(a->sb, a->mvd_bsrc); + h_path.dentry = au_h_dptr(a->dentry, a->mvd_bsrc); -+ err = vfsub_unlink(a->mvd_h_src_dir, &h_path, /*force*/0); ++ delegated = NULL; ++ err = vfsub_unlink(a->mvd_h_src_dir, &h_path, &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + if (unlikely(err)) + AU_MVD_PR(dmsg, "unlink failed\n"); + @@ -20700,10 +20672,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,1704 @@ ++++ linux/fs/aufs/opts.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,1701 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -20716,8 +20688,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -21267,9 +21238,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.c linux/fs/aufs/opts.c + break; + case Opt_xino: + u.xino = &opt->xino; -+ AuDbg("xino {%s %.*s}\n", -+ u.xino->path, -+ AuDLNPair(u.xino->file->f_dentry)); ++ AuDbg("xino {%s %pD}\n", u.xino->path, u.xino->file); + break; + case Opt_trunc_xino: + AuLabel(trunc_xino); @@ -22408,10 +22377,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,211 @@ ++++ linux/fs/aufs/opts.h 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,210 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -22424,8 +22393,7 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -22623,10 +22591,10 @@ diff -urN /usr/share/empty/fs/aufs/opts.h linux/fs/aufs/opts.h +#endif /* __AUFS_OPTS_H__ */ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c --- /usr/share/empty/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/plink.c 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,520 @@ ++++ linux/fs/aufs/plink.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,532 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -22639,8 +22607,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -22885,7 +22852,7 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c + struct path h_path = { + .mnt = au_br_mnt(br) + }; -+ struct inode *h_dir; ++ struct inode *h_dir, *delegated; + + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_CHILD2); @@ -22900,14 +22867,27 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c + /* todo: is it really safe? */ + if (h_path.dentry->d_inode + && h_path.dentry->d_inode != h_dentry->d_inode) { -+ err = vfsub_unlink(h_dir, &h_path, /*force*/0); ++ delegated = NULL; ++ err = vfsub_unlink(h_dir, &h_path, &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + dput(h_path.dentry); + h_path.dentry = NULL; + if (!err) + goto again; + } -+ if (!err && !h_path.dentry->d_inode) -+ err = vfsub_link(h_dentry, h_dir, &h_path); ++ if (!err && !h_path.dentry->d_inode) { ++ delegated = NULL; ++ err = vfsub_link(h_dentry, h_dir, &h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } ++ } + dput(h_path.dentry); + +out: @@ -23147,10 +23127,10 @@ diff -urN /usr/share/empty/fs/aufs/plink.c linux/fs/aufs/plink.c +} diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c --- /usr/share/empty/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/poll.c 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,56 @@ ++++ linux/fs/aufs/poll.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,55 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -23163,8 +23143,7 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -23194,7 +23173,7 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c + /* it is not an error if h_file has no operation */ + mask = DEFAULT_POLLMASK; + h_file = au_hf_top(file); -+ if (h_file->f_op && h_file->f_op->poll) ++ if (h_file->f_op->poll) + mask = h_file->f_op->poll(h_file, wait); + + di_read_unlock(dentry, AuLock_IR); @@ -23207,10 +23186,10 @@ diff -urN /usr/share/empty/fs/aufs/poll.c linux/fs/aufs/poll.c +} diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c --- /usr/share/empty/fs/aufs/procfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/procfs.c 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,170 @@ ++++ linux/fs/aufs/procfs.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,169 @@ +/* -+ * Copyright (C) 2010-2013 Junjiro R. Okajima ++ * Copyright (C) 2010-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -23223,8 +23202,7 @@ diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -23381,10 +23359,10 @@ diff -urN /usr/share/empty/fs/aufs/procfs.c linux/fs/aufs/procfs.c +} diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c --- /usr/share/empty/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/rdu.c 2013-10-26 16:51:29.586298347 +0200 -@@ -0,0 +1,389 @@ ++++ linux/fs/aufs/rdu.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,388 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -23397,8 +23375,7 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -23534,7 +23511,7 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c + arg.end += rdu->sz; + + err = -ENOTDIR; -+ if (unlikely(!file->f_op || !file->f_op->iterate)) ++ if (unlikely(!file->f_op->iterate)) + goto out; + + err = security_file_permission(file, MAY_READ); @@ -23774,10 +23751,10 @@ diff -urN /usr/share/empty/fs/aufs/rdu.c linux/fs/aufs/rdu.c +#endif diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h --- /usr/share/empty/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/rwsem.h 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,188 @@ ++++ linux/fs/aufs/rwsem.h 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,187 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -23790,8 +23767,7 @@ diff -urN /usr/share/empty/fs/aufs/rwsem.h linux/fs/aufs/rwsem.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -23966,10 +23942,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,350 @@ ++++ linux/fs/aufs/sbinfo.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,351 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -23982,8 +23958,7 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -24087,6 +24062,8 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c + init_waitqueue_head(&sbinfo->si_plink_wq); + spin_lock_init(&sbinfo->si_plink_maint_lock); + ++ au_sphl_init(&sbinfo->si_files); ++ + /* leave other members for sysaufs and si_mnt. */ + sbinfo->si_sb = sb; + sb->s_fs_info = sbinfo; @@ -24320,10 +24297,10 @@ diff -urN /usr/share/empty/fs/aufs/sbinfo.c linux/fs/aufs/sbinfo.c +} diff -urN /usr/share/empty/fs/aufs/spl.h linux/fs/aufs/spl.h --- /usr/share/empty/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/spl.h 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,112 @@ ++++ linux/fs/aufs/spl.h 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,111 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -24336,8 +24313,7 @@ diff -urN /usr/share/empty/fs/aufs/spl.h linux/fs/aufs/spl.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -24436,10 +24412,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,1002 @@ ++++ linux/fs/aufs/super.c 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,1001 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -24452,8 +24428,7 @@ diff -urN /usr/share/empty/fs/aufs/super.c linux/fs/aufs/super.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -25442,10 +25417,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,568 @@ ++++ linux/fs/aufs/super.h 2014-01-20 20:16:14.742796949 +0100 +@@ -0,0 +1,571 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -25458,8 +25433,7 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -25541,7 +25515,8 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h + } au_si_pid; + + /* -+ * dirty approach to protect sb->sb_inodes and ->s_files from remount. ++ * dirty approach to protect sb->sb_inodes and ->s_files (gone) from ++ * remount. + */ + atomic_long_t si_ninodes, si_nfiles; + @@ -25619,6 +25594,9 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h + spinlock_t si_plink_maint_lock; + pid_t si_plink_maint_pid; + ++ /* file list */ ++ struct au_sphlhead si_files; ++ + /* + * sysfs and lifetime management. + * this is not a small structure and it may be a waste of memory in case @@ -26014,10 +25992,10 @@ diff -urN /usr/share/empty/fs/aufs/super.h linux/fs/aufs/super.h +#endif /* __AUFS_SUPER_H__ */ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c --- /usr/share/empty/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysaufs.c 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,105 @@ ++++ linux/fs/aufs/sysaufs.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,104 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -26030,8 +26008,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -26123,10 +26100,10 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.c linux/fs/aufs/sysaufs.c +} diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h --- /usr/share/empty/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/sysaufs.h 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,104 @@ ++++ linux/fs/aufs/sysaufs.h 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,103 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -26139,8 +26116,7 @@ diff -urN /usr/share/empty/fs/aufs/sysaufs.h linux/fs/aufs/sysaufs.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -26231,10 +26207,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,297 @@ ++++ linux/fs/aufs/sysfs.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,296 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -26247,8 +26223,7 @@ diff -urN /usr/share/empty/fs/aufs/sysfs.c linux/fs/aufs/sysfs.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -26532,10 +26507,10 @@ 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 2013-07-06 13:20:47.753531903 +0200 -@@ -0,0 +1,151 @@ ++++ linux/fs/aufs/sysrq.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,154 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -26548,8 +26523,7 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -26567,6 +26541,8 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c + char *plevel; + struct au_sbinfo *sbinfo; + struct file *file; ++ struct au_sphlhead *files; ++ struct au_finfo *finfo; + + plevel = au_plevel; + au_plevel = KERN_WARNING; @@ -26622,14 +26598,16 @@ diff -urN /usr/share/empty/fs/aufs/sysrq.c linux/fs/aufs/sysrq.c + } +#endif + pr("files\n"); -+ lg_global_lock(&files_lglock); -+ do_file_list_for_each_entry(sb, file) { ++ files = &au_sbi(sb)->si_files; ++ spin_lock(&files->spin); ++ hlist_for_each_entry(finfo, &files->head, fi_hlist) { + umode_t mode; ++ file = finfo->fi_file; + mode = file_inode(file)->i_mode; + if (!special_file(mode) || au_special_file(mode)) + au_dpri_file(file); -+ } while_file_list_for_each_entry; -+ lg_global_unlock(&files_lglock); ++ } ++ spin_unlock(&files->spin); + pr("done\n"); + +#undef pr @@ -26687,10 +26665,10 @@ 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 2013-10-26 16:51:29.586298347 +0200 -@@ -0,0 +1,888 @@ ++++ linux/fs/aufs/vdir.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,887 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -26703,8 +26681,7 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -27579,10 +27556,10 @@ diff -urN /usr/share/empty/fs/aufs/vdir.c linux/fs/aufs/vdir.c +} diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c --- /usr/share/empty/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/vfsub.c 2013-10-26 16:51:29.586298347 +0200 -@@ -0,0 +1,772 @@ ++++ linux/fs/aufs/vfsub.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,782 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -27595,8 +27572,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -27831,7 +27807,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + return -EMLINK; +} + -+int vfsub_link(struct dentry *src_dentry, struct inode *dir, struct path *path) ++int vfsub_link(struct dentry *src_dentry, struct inode *dir, struct path *path, ++ struct inode **delegated_inode) +{ + int err; + struct dentry *d; @@ -27851,7 +27828,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + goto out; + + lockdep_off(); -+ err = vfs_link(src_dentry, dir, path->dentry); ++ err = vfs_link(src_dentry, dir, path->dentry, delegated_inode); + lockdep_on(); + if (!err) { + struct path tmp = *path; @@ -27873,7 +27850,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c +} + +int vfsub_rename(struct inode *src_dir, struct dentry *src_dentry, -+ struct inode *dir, struct path *path) ++ struct inode *dir, struct path *path, ++ struct inode **delegated_inode) +{ + int err; + struct path tmp = { @@ -27893,7 +27871,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + goto out; + + lockdep_off(); -+ err = vfs_rename(src_dir, src_dentry, dir, path->dentry); ++ err = vfs_rename(src_dir, src_dentry, dir, path->dentry, ++ delegated_inode); + lockdep_on(); + if (!err) { + int did; @@ -28044,7 +28023,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + int err; + + err = 0; -+ if (file->f_op && file->f_op->flush) { ++ if (file->f_op->flush) { + if (!au_test_nfs(file->f_dentry->d_sb)) + err = file->f_op->flush(file, id); + else { @@ -28063,8 +28042,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c +{ + int err; + -+ AuDbg("%.*s, ctx{%pf, %llu}\n", -+ AuDLNPair(file->f_dentry), ctx->actor, ctx->pos); ++ AuDbg("%pD, ctx{%pf, %llu}\n", file, ctx->actor, ctx->pos); + + lockdep_off(); + err = iterate_dir(file, ctx); @@ -28230,6 +28208,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + int *errp; + struct path *path; + struct iattr *ia; ++ struct inode **delegated_inode; +}; + +static void call_notify_change(void *args) @@ -28242,20 +28221,23 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + + *a->errp = -EPERM; + if (!IS_IMMUTABLE(h_inode) && !IS_APPEND(h_inode)) { -+ *a->errp = notify_change(a->path->dentry, a->ia); ++ *a->errp = notify_change(a->path->dentry, a->ia, ++ a->delegated_inode); + if (!*a->errp) + vfsub_update_h_iattr(a->path, /*did*/NULL); /*ignore*/ + } + AuTraceErr(*a->errp); +} + -+int vfsub_notify_change(struct path *path, struct iattr *ia) ++int vfsub_notify_change(struct path *path, struct iattr *ia, ++ struct inode **delegated_inode) +{ + int err; + struct notify_change_args args = { -+ .errp = &err, -+ .path = path, -+ .ia = ia ++ .errp = &err, ++ .path = path, ++ .ia = ia, ++ .delegated_inode = delegated_inode + }; + + call_notify_change(&args); @@ -28263,13 +28245,15 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + return err; +} + -+int vfsub_sio_notify_change(struct path *path, struct iattr *ia) ++int vfsub_sio_notify_change(struct path *path, struct iattr *ia, ++ struct inode **delegated_inode) +{ + int err, wkq_err; + struct notify_change_args args = { -+ .errp = &err, -+ .path = path, -+ .ia = ia ++ .errp = &err, ++ .path = path, ++ .ia = ia, ++ .delegated_inode = delegated_inode + }; + + wkq_err = au_wkq_wait(call_notify_change, &args); @@ -28285,6 +28269,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + int *errp; + struct inode *dir; + struct path *path; ++ struct inode **delegated_inode; +}; + +static void call_unlink(void *args) @@ -28310,7 +28295,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + ihold(h_inode); + + lockdep_off(); -+ *a->errp = vfs_unlink(a->dir, d); ++ *a->errp = vfs_unlink(a->dir, d, a->delegated_inode); + lockdep_on(); + if (!*a->errp) { + struct path tmp = { @@ -28332,13 +28317,15 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.c linux/fs/aufs/vfsub.c + * @dir: must be locked. + * @dentry: target dentry. + */ -+int vfsub_unlink(struct inode *dir, struct path *path, int force) ++int vfsub_unlink(struct inode *dir, struct path *path, ++ struct inode **delegated_inode, int force) +{ + int err; + struct unlink_args args = { -+ .errp = &err, -+ .dir = dir, -+ .path = path ++ .errp = &err, ++ .dir = dir, ++ .path = path, ++ .delegated_inode = delegated_inode + }; + + if (!force) @@ -28355,10 +28342,10 @@ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,312 @@ ++++ linux/fs/aufs/vfsub.h 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,282 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -28371,8 +28358,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -28391,41 +28377,8 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h + +/* copied from linux/fs/internal.h */ +/* todo: BAD approach!! */ -+extern struct lglock vfsmount_lock; +extern void __mnt_drop_write(struct vfsmount *); +extern spinlock_t inode_sb_list_lock; -+void __file_sb_list_add(struct file *file, struct super_block *sb); -+ -+/* copied from linux/fs/file_table.c */ -+extern struct lglock files_lglock; -+#ifdef CONFIG_SMP -+/* -+ * These macros iterate all files on all CPUs for a given superblock. -+ * files_lglock must be held globally. -+ */ -+#define do_file_list_for_each_entry(__sb, __file) \ -+{ \ -+ int i; \ -+ for_each_possible_cpu(i) { \ -+ struct list_head *list; \ -+ list = per_cpu_ptr((__sb)->s_files, i); \ -+ list_for_each_entry((__file), list, f_u.fu_list) -+ -+#define while_file_list_for_each_entry \ -+ } \ -+} -+ -+#else -+ -+#define do_file_list_for_each_entry(__sb, __file) \ -+{ \ -+ struct list_head *list; \ -+ list = &(sb)->s_files; \ -+ list_for_each_entry((__file), list, f_u.fu_list) -+ -+#define while_file_list_for_each_entry \ -+} -+#endif + +/* ---------------------------------------------------------------------- */ + @@ -28433,7 +28386,7 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h +/* default MAX_LOCKDEP_SUBCLASSES(8) is not enough */ +/* reduce? gave up. */ +enum { -+ AuLsc_I_Begin = I_MUTEX_QUOTA, /* 4 */ ++ AuLsc_I_Begin = I_MUTEX_NONDIR2, /* 4 */ + AuLsc_I_PARENT, /* lower inode, parent first */ + AuLsc_I_PARENT2, /* copyup dirs */ + AuLsc_I_PARENT3, /* copyup wh */ @@ -28532,9 +28485,10 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h + const char *symname); +int vfsub_mknod(struct inode *dir, struct path *path, int mode, dev_t dev); +int vfsub_link(struct dentry *src_dentry, struct inode *dir, -+ struct path *path); ++ struct path *path, struct inode **delegated_inode); +int vfsub_rename(struct inode *src_hdir, struct dentry *src_dentry, -+ struct inode *hdir, struct path *path); ++ struct inode *hdir, struct path *path, ++ struct inode **delegated_inode); +int vfsub_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_rmdir(struct inode *dir, struct path *path); + @@ -28663,18 +28617,21 @@ diff -urN /usr/share/empty/fs/aufs/vfsub.h linux/fs/aufs/vfsub.h + +int vfsub_sio_mkdir(struct inode *dir, struct path *path, int mode); +int vfsub_sio_rmdir(struct inode *dir, struct path *path); -+int vfsub_sio_notify_change(struct path *path, struct iattr *ia); -+int vfsub_notify_change(struct path *path, struct iattr *ia); -+int vfsub_unlink(struct inode *dir, struct path *path, int force); ++int vfsub_sio_notify_change(struct path *path, struct iattr *ia, ++ struct inode **delegated_inode); ++int vfsub_notify_change(struct path *path, struct iattr *ia, ++ struct inode **delegated_inode); ++int vfsub_unlink(struct inode *dir, struct path *path, ++ struct inode **delegated_inode, int force); + +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c --- /usr/share/empty/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wbr_policy.c 2013-10-26 16:51:32.276373845 +0200 ++++ linux/fs/aufs/wbr_policy.c 2014-01-20 20:16:14.749463838 +0100 @@ -0,0 +1,756 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -28687,8 +28644,7 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -28713,13 +28669,14 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c + ia.ia_gid = h_isrc->i_gid; + sbits = !!(ia.ia_mode & (S_ISUID | S_ISGID)); + au_cpup_attr_flags(h_path->dentry->d_inode, h_isrc->i_flags); -+ err = vfsub_sio_notify_change(h_path, &ia); ++ /* no delegation since it is just created */ ++ err = vfsub_sio_notify_change(h_path, &ia, /*delegated*/NULL); + + /* is this nfs only? */ + if (!err && sbits && au_test_nfs(h_path->dentry->d_sb)) { + ia.ia_valid = ATTR_FORCE | ATTR_MODE; + ia.ia_mode = h_isrc->i_mode; -+ err = vfsub_sio_notify_change(h_path, &ia); ++ err = vfsub_sio_notify_change(h_path, &ia, /*delegated*/NULL); + } + + return err; @@ -28849,8 +28806,8 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c + rerr = au_diropq_remove(dentry, bdst); + mutex_unlock(&h_inode->i_mutex); + if (unlikely(rerr)) { -+ AuIOErr("failed removing diropq for %.*s b%d (%d)\n", -+ AuDLNPair(dentry), bdst, rerr); ++ AuIOErr("failed removing diropq for %pd b%d (%d)\n", ++ dentry, bdst, rerr); + err = -EIO; + goto out; + } @@ -28859,8 +28816,8 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c + if (au_ftest_cpdown(*flags, MADE_DIR)) { + rerr = vfsub_sio_rmdir(au_h_iptr(dir, bdst), &h_path); + if (unlikely(rerr)) { -+ AuIOErr("failed removing %.*s b%d (%d)\n", -+ AuDLNPair(dentry), bdst, rerr); ++ AuIOErr("failed removing %pd b%d (%d)\n", ++ dentry, bdst, rerr); + err = -EIO; + } + } @@ -29431,10 +29388,10 @@ diff -urN /usr/share/empty/fs/aufs/wbr_policy.c linux/fs/aufs/wbr_policy.c +}; diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c --- /usr/share/empty/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/whout.c 2013-07-06 13:20:47.760198800 +0200 -@@ -0,0 +1,1022 @@ ++++ linux/fs/aufs/whout.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,1052 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -29447,8 +29404,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -29522,8 +29478,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + goto out_wh; /* success */ + + err = -EIO; -+ AuIOErr("%.*s Invalid whiteout entry type 0%o.\n", -+ AuDLNPair(wh_dentry), wh_dentry->d_inode->i_mode); ++ AuIOErr("%pd Invalid whiteout entry type 0%o.\n", ++ wh_dentry, wh_dentry->d_inode->i_mode); + +out_wh: + dput(wh_dentry); @@ -29611,7 +29567,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + struct path h_path = { + .mnt = au_br_mnt(br) + }; -+ struct inode *h_dir; ++ struct inode *h_dir, *delegated; + struct dentry *h_parent; + + h_parent = h_dentry->d_parent; /* dir inode is locked */ @@ -29624,8 +29580,14 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + goto out; + + /* under the same dir, no need to lock_rename() */ -+ err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path); ++ delegated = NULL; ++ err = vfsub_rename(h_dir, h_dentry, h_dir, &h_path, &delegated); + AuTraceErr(err); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal rename\n"); ++ iput(delegated); ++ } + dput(h_path.dentry); + +out: @@ -29640,7 +29602,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + +static int do_unlink_wh(struct inode *h_dir, struct path *h_path) +{ -+ int force; ++ int err, force; ++ struct inode *delegated; + + /* + * forces superio when the dir has a sticky bit. @@ -29648,7 +29611,14 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + */ + force = (h_dir->i_mode & S_ISVTX) + && !uid_eq(current_fsuid(), h_path->dentry->d_inode->i_uid); -+ return vfsub_unlink(h_dir, h_path, force); ++ delegated = NULL; ++ err = vfsub_unlink(h_dir, h_path, &delegated, force); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } ++ return err; +} + +int au_wh_unlink_dentry(struct inode *h_dir, struct path *h_path, @@ -29694,17 +29664,25 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + const int isdir) +{ + int err; ++ struct inode *delegated; + + if (!whpath->dentry->d_inode) + return; + + if (isdir) + err = vfsub_rmdir(h_dir, whpath); -+ else -+ err = vfsub_unlink(h_dir, whpath, /*force*/0); ++ else { ++ delegated = NULL; ++ err = vfsub_unlink(h_dir, whpath, &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } ++ } + if (unlikely(err)) -+ pr_warn("failed removing %.*s (%d), ignored.\n", -+ AuDLNPair(whpath->dentry), err); ++ pr_warn("failed removing %pd (%d), ignored.\n", ++ whpath->dentry, err); +} + +static int test_linkable(struct dentry *h_root) @@ -29714,8 +29692,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + if (h_dir->i_op->link) + return 0; + -+ pr_err("%.*s (%s) doesn't support link(2), use noplink and rw+nolwh\n", -+ AuDLNPair(h_root), au_sbtype(h_root->d_sb)); ++ pr_err("%pd (%s) doesn't support link(2), use noplink and rw+nolwh\n", ++ h_root, au_sbtype(h_root->d_sb)); + return -ENOSYS; +} + @@ -29734,7 +29712,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + } else if (S_ISDIR(path->dentry->d_inode->i_mode)) + err = 0; + else -+ pr_err("unknown %.*s exists\n", AuDLNPair(path->dentry)); ++ pr_err("unknown %pd exists\n", path->dentry); + + return err; +} @@ -29829,8 +29807,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + } else if (S_ISREG(base[AuBrWh_BASE].dentry->d_inode->i_mode)) + err = 0; + else -+ pr_err("unknown %.*s/%.*s exists\n", -+ AuDLNPair(h_root), AuDLNPair(base[AuBrWh_BASE].dentry)); ++ pr_err("unknown %pd2 exists\n", base[AuBrWh_BASE].dentry); + if (unlikely(err)) + goto out; + @@ -29933,8 +29910,8 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + goto out; /* success */ + +out_err: -+ pr_err("an error(%d) on the writable branch %.*s(%s)\n", -+ err, AuDLNPair(h_root), au_sbtype(h_root->d_sb)); ++ pr_err("an error(%d) on the writable branch %pd(%s)\n", ++ err, h_root, au_sbtype(h_root->d_sb)); +out: + for (i = 0; i < AuBrWh_Last; i++) + dput(base[i].dentry); @@ -29960,7 +29937,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + struct path h_path; + struct reinit_br_wh *a = arg; + struct au_wbr *wbr; -+ struct inode *dir; ++ struct inode *dir, *delegated; + struct dentry *h_root; + struct au_hinode *hdir; + @@ -29987,10 +29964,16 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + if (!err) { + h_path.dentry = wbr->wbr_whbase; + h_path.mnt = au_br_mnt(a->br); -+ err = vfsub_unlink(hdir->hi_inode, &h_path, /*force*/0); ++ delegated = NULL; ++ err = vfsub_unlink(hdir->hi_inode, &h_path, &delegated, ++ /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + } else { -+ pr_warn("%.*s is moved, ignored\n", -+ AuDLNPair(wbr->wbr_whbase)); ++ pr_warn("%pd is moved, ignored\n", wbr->wbr_whbase); + err = 0; + } + dput(wbr->wbr_whbase); @@ -30060,7 +30043,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + struct au_branch *br; + struct au_wbr *wbr; + struct dentry *h_parent; -+ struct inode *h_dir; ++ struct inode *h_dir, *delegated; + + h_parent = wh->d_parent; /* dir inode is locked */ + h_dir = h_parent->d_inode; @@ -30071,7 +30054,13 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + wbr = br->br_wbr; + wbr_wh_read_lock(wbr); + if (wbr->wbr_whbase) { -+ err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path); ++ delegated = NULL; ++ err = vfsub_link(wbr->wbr_whbase, h_dir, &h_path, &delegated); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal link\n"); ++ iput(delegated); ++ } + if (!err || err != -EMLINK) + goto out; + @@ -30380,8 +30369,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + return 0; /* success */ + } + -+ pr_warn("failed removing %.*s(%d), ignored\n", -+ AuDLNPair(wh_dentry), err); ++ pr_warn("failed removing %pd(%d), ignored\n", wh_dentry, err); + return err; +} + @@ -30450,17 +30438,16 @@ diff -urN /usr/share/empty/fs/aufs/whout.c linux/fs/aufs/whout.c + args->wh_dentry = dget(wh_dentry); + wkq_err = au_wkq_nowait(call_rmdir_whtmp, args, sb, /*flags*/0); + if (unlikely(wkq_err)) { -+ pr_warn("rmdir error %.*s (%d), ignored\n", -+ AuDLNPair(wh_dentry), wkq_err); ++ pr_warn("rmdir error %pd (%d), ignored\n", wh_dentry, wkq_err); + au_whtmp_rmdir_free(args); + } +} diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h --- /usr/share/empty/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/whout.h 2013-07-06 13:20:47.760198800 +0200 -@@ -0,0 +1,87 @@ ++++ linux/fs/aufs/whout.h 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,86 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -30473,8 +30460,7 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -30548,10 +30534,10 @@ diff -urN /usr/share/empty/fs/aufs/whout.h linux/fs/aufs/whout.h +#endif /* __AUFS_WHOUT_H__ */ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c --- /usr/share/empty/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wkq.c 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,213 @@ ++++ linux/fs/aufs/wkq.c 2014-01-20 20:16:14.749463838 +0100 +@@ -0,0 +1,212 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -30564,8 +30550,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -30765,10 +30750,10 @@ diff -urN /usr/share/empty/fs/aufs/wkq.c linux/fs/aufs/wkq.c +} diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h --- /usr/share/empty/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/fs/aufs/wkq.h 2013-07-06 13:20:47.760198800 +0200 -@@ -0,0 +1,92 @@ ++++ linux/fs/aufs/wkq.h 2014-01-20 20:16:14.752797282 +0100 +@@ -0,0 +1,91 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -30781,8 +30766,7 @@ diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -30861,10 +30845,10 @@ diff -urN /usr/share/empty/fs/aufs/wkq.h linux/fs/aufs/wkq.h +#endif /* __AUFS_WKQ_H__ */ 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,1312 @@ ++++ linux/fs/aufs/xino.c 2014-01-20 20:16:14.752797282 +0100 +@@ -0,0 +1,1314 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -30877,8 +30861,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +/* @@ -31003,7 +30986,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +{ + struct file *file; + struct dentry *base, *parent; -+ struct inode *dir; ++ struct inode *dir, *delegated; + struct qstr *name; + struct path path; + int err; @@ -31018,8 +31001,8 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + path.dentry = vfsub_lookup_one_len(name->name, parent, name->len); + if (IS_ERR(path.dentry)) { + file = (void *)path.dentry; -+ pr_err("%.*s lookup err %ld\n", -+ AuLNPair(name), PTR_ERR(path.dentry)); ++ pr_err("%pd lookup err %ld\n", ++ base, PTR_ERR(path.dentry)); + goto out; + } + @@ -31027,7 +31010,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + err = vfs_create(dir, path.dentry, S_IRUGO | S_IWUGO, NULL); + if (unlikely(err)) { + file = ERR_PTR(err); -+ pr_err("%.*s create err %d\n", AuLNPair(name), err); ++ pr_err("%pd create err %d\n", base, err); + goto out_dput; + } + @@ -31036,13 +31019,19 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + O_RDWR | O_CREAT | O_EXCL | O_LARGEFILE + /* | __FMODE_NONOTIFY */); + if (IS_ERR(file)) { -+ pr_err("%.*s open err %ld\n", AuLNPair(name), PTR_ERR(file)); ++ pr_err("%pd open err %ld\n", base, PTR_ERR(file)); + goto out_dput; + } + -+ err = vfsub_unlink(dir, &file->f_path, /*force*/0); ++ delegated = NULL; ++ err = vfsub_unlink(dir, &file->f_path, &delegated, /*force*/0); ++ if (unlikely(err == -EWOULDBLOCK)) { ++ pr_warn("cannot retry for NFSv4 delegation" ++ " for an internal unlink\n"); ++ iput(delegated); ++ } + if (unlikely(err)) { -+ pr_err("%.*s unlink err %d\n", AuLNPair(name), err); ++ pr_err("%pd unlink err %d\n", base, err); + goto out_fput; + } + @@ -31050,7 +31039,7 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + /* no one can touch copy_src xino */ + err = au_copy_file(file, copy_src, vfsub_f_size_read(copy_src)); + if (unlikely(err)) { -+ pr_err("%.*s copy err %d\n", AuLNPair(name), err); ++ pr_err("%pd copy err %d\n", base, err); + goto out_fput; + } + } @@ -31611,7 +31600,8 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c + h_dir = h_parent->d_inode; + mutex_lock_nested(&h_dir->i_mutex, AuLsc_I_PARENT); + /* mnt_want_write() is unnecessary here */ -+ err = vfsub_unlink(h_dir, &file->f_path, /*force*/0); ++ /* no delegation since it is just created */ ++ err = vfsub_unlink(h_dir, &file->f_path, /*delegated*/NULL, /*force*/0); + mutex_unlock(&h_dir->i_mutex); + dput(h_parent); + if (unlikely(err)) { @@ -31853,12 +31843,10 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +{ + const struct file_operations *fop = h_file->f_op; + -+ if (fop) { -+ if (fop->read) -+ return fop->read; -+ if (fop->aio_read) -+ return do_sync_read; -+ } ++ if (fop->read) ++ return fop->read; ++ if (fop->aio_read) ++ return do_sync_read; + return ERR_PTR(-ENOSYS); +} + @@ -31866,12 +31854,10 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +{ + const struct file_operations *fop = h_file->f_op; + -+ if (fop) { -+ if (fop->write) -+ return fop->write; -+ if (fop->aio_write) -+ return do_sync_write; -+ } ++ if (fop->write) ++ return fop->write; ++ if (fop->aio_write) ++ return do_sync_write; + return ERR_PTR(-ENOSYS); +} + @@ -32175,35 +32161,12 @@ diff -urN /usr/share/empty/fs/aufs/xino.c linux/fs/aufs/xino.c +out: + return err; +} -diff -urN /usr/share/empty/include/linux/aufs_type.h linux/include/linux/aufs_type.h ---- /usr/share/empty/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux/include/linux/aufs_type.h 2013-07-06 13:20:47.760198800 +0200 -@@ -0,0 +1,19 @@ -+/* -+ * Copyright (C) 2012-2013 Junjiro R. Okajima -+ * -+ * This program, aufs is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+#include 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 2013-10-26 16:51:32.276373845 +0200 -@@ -0,0 +1,282 @@ ++++ linux/include/uapi/linux/aufs_type.h 2014-01-20 20:16:14.752797282 +0100 +@@ -0,0 +1,281 @@ +/* -+ * Copyright (C) 2005-2013 Junjiro R. Okajima ++ * Copyright (C) 2005-2014 Junjiro R. Okajima + * + * This program, aufs is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by @@ -32216,8 +32179,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License -+ * along with this program; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA ++ * along with this program. If not, see . + */ + +#ifndef __AUFS_TYPE_H__ @@ -32244,7 +32206,7 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin + +#include + -+#define AUFS_VERSION "3.x-rcN-20131014" ++#define AUFS_VERSION "3.x-rcN-20140120" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') @@ -32484,3 +32446,4 @@ diff -urN /usr/share/empty/include/uapi/linux/aufs_type.h linux/include/uapi/lin + struct aufs_mvdown) + +#endif /* __AUFS_TYPE_H__ */ + diff --git a/kernel-multiarch.config b/kernel-multiarch.config index 6ced3f15..f7185993 100644 --- a/kernel-multiarch.config +++ b/kernel-multiarch.config @@ -3,6 +3,7 @@ #- *** FILE: arch/* - ARCH SPECIFIC OPTIONS *** #- ARCH_MEMORY_PROBE all=n +EARLY_PRINTK_EFI all=n KVM_DEBUG_FS all=n KVM_DEVICE_ASSIGNMENT all=y PHYSICAL_ALIGN all=0x1000000 @@ -194,7 +195,6 @@ A11Y_BRAILLE_CONSOLE=y ACPI ia64=y x86=y ACPI_SLEEP x86=y ACPI_PROCFS all=y -ACPI_PROCFS_POWER ia64=y x86=y ACPI_EC_DEBUGFS all=m ACPI_AC x86=m ACPI_BATTERY x86=m @@ -211,7 +211,6 @@ ACPI_NUMA ia64=y x86_64=y ACPI_CUSTOM_DSDT_FILE all="" ACPI_CUSTOM_DSDT all=n ACPI_INITRD_TABLE_OVERRIDE all=y -ACPI_BLACKLIST_YEAR all=0 ACPI_DEBUG all=n ACPI_PCI_SLOT all=y X86_PM_TIMER x86=y @@ -220,6 +219,7 @@ ACPI_SBS x86=m ACPI_CUSTOM_METHOD all=m ACPI_BGRT all=y #- file drivers/acpi/apei/Kconfig goes here +ACPI_EXTLOG all=m #- #- *** FILE: drivers/acpi/apei/Kconfig *** @@ -403,6 +403,7 @@ BCMA_DEBUG all=n #- *** FILE: drivers/block/Kconfig *** #- BLK_DEV all=y +BLK_DEV_NULL_BLK all=m BLK_DEV_FD all=m sparc=y MAC_FLOPPY ppc=m PARIDE all=m @@ -420,6 +421,7 @@ BLK_DEV_CRYPTOLOOP all=n #- file drivers/block/drbd/Kconfig goes here BLK_DEV_NBD all=m BLK_DEV_NVME all=m +BLK_DEV_SKD all=m BLK_DEV_OSD all=m BLK_DEV_SX8 all=m BLK_DEV_RAM all=y @@ -544,6 +546,7 @@ RAW_DRIVER all=m MAX_RAW_DEVS all=1024 HPET all=y HPET_MMAP all=y +HPET_MMAP_DEFAULT all=y HANGCHECK_TIMER all=m ppc64=n MMTIMER ia64=m #- file drivers/char/tpm/Kconfig goes here @@ -612,7 +615,9 @@ IPWIRELESS all=m TCG_TPM all=m x86=y ia64=y #* TCG_TIS forced to 'y' by IMA TCG_TIS all=m x86=y ia64=y +TCG_TIS_I2C_ATMEL all=m TCG_TIS_I2C_INFINEON all=m +TCG_TIS_I2C_NUVOTON all=m TCG_NSC all=m TCG_ATMEL all=m TCG_INFINEON all=m @@ -850,7 +855,7 @@ GPIO_ADP5588 all=m GPIO_CS5535 all=m GPIO_BT8XX all=m GPIO_AMD8111 all=m -GPIO_LANGWELL all=n +GPIO_INTEL_MID all=y GPIO_PCH all=m GPIO_ML_IOH all=m GPIO_TIMBERDALE all=y @@ -881,9 +886,7 @@ DRM_RADEON all=m #- file drivers/gpu/drm/radeon/Kconfig goes here #- file drivers/gpu/drm/nouveau/Kconfig goes here DRM_I810 i386=m x86_64=m -DRM_I915 i386=m x86_64=m -DRM_I915_KMS all=y -DRM_I915_PRELIMINARY_HW_SUPPORT all=y +#- file drivers/gpu/drm/i915/Kconfig goes here DRM_MGA all=m DRM_SIS all=m DRM_VIA all=m @@ -895,12 +898,14 @@ DRM_SAVAGE all=m #- file drivers/gpu/drm/ast/Kconfig goes here #- file drivers/gpu/drm/mgag200/Kconfig goes here #- file drivers/gpu/drm/cirrus/Kconfig goes here +#- file drivers/gpu/drm/armada/Kconfig goes here #- file drivers/gpu/drm/rcar-du/Kconfig goes here #- file drivers/gpu/drm/shmobile/Kconfig goes here #- file drivers/gpu/drm/omapdrm/Kconfig goes here #- file drivers/gpu/drm/tilcdc/Kconfig goes here #- file drivers/gpu/drm/qxl/Kconfig goes here #- file drivers/gpu/drm/msm/Kconfig goes here +#- file drivers/gpu/drm/tegra/Kconfig goes here #- #- *** FILE: drivers/gpu/drm/ast/Kconfig *** @@ -926,6 +931,14 @@ DRM_I2C_CH7006 all=m DRM_I2C_SIL164 all=m 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 + #- #- *** FILE: drivers/gpu/drm/mgag200/Kconfig *** #- @@ -1029,6 +1042,7 @@ HID_ROCCAT all=m HID_SAITEK all=m HID_SAMSUNG all=m HID_SONY all=m +SONY_FF all=y HID_SPEEDLINK all=m HID_STEELSERIES all=m HID_SUNPLUS all=m @@ -1446,6 +1460,7 @@ AD7887 all=m AD7923 all=m MAX1363 all=m MCP320X all=m +MCP3422 all=m NAU7802 all=m TI_ADC081C all=m TI_AM335X_ADC all=m @@ -1456,11 +1471,6 @@ VIPERBOARD_ADC all=m #- AD8366 all=m -#- -#- *** FILE: drivers/iio/common/hid-sensors/Kconfig *** -#- -HID_SENSOR_ENUM_BASE_QUIRKS all=y - #- #- *** FILE: drivers/iio/dac/Kconfig *** #- @@ -1515,15 +1525,20 @@ INV_MPU6050_IIO all=m #- ADJD_S311 all=m APDS9300 all=m +CM36651 all=m +GP2AP020A00F all=m HID_SENSOR_ALS all=m SENSORS_LM3533 all=m +TCS3472 all=m SENSORS_TSL2563 all=m +TSL4531 all=m VCNL4000 all=m #- #- *** FILE: drivers/iio/magnetometer/Kconfig *** #- AK8975 all=m +MAG3110 all=m HID_SENSOR_MAGNETOMETER_3D all=m IIO_ST_MAGN_3AXIS all=m @@ -1549,7 +1564,6 @@ IIO_SYSFS_TRIGGER all=m INFINIBAND all=m sparc=n INFINIBAND_USER_MAD all=m sparc= INFINIBAND_USER_ACCESS all=m sparc= -INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING all=n INFINIBAND_USER_MEM all=y sparc= INFINIBAND_ADDR_TRANS all=y sparc= #- file drivers/infiniband/hw/mthca/Kconfig goes here @@ -1844,6 +1858,7 @@ SERIO_XILINX_XPS_PS2 all=m SERIO_ALTERA_PS2 all=m SERIO_PS2MULT all=m SERIO_ARC_PS2 all=m +HYPERV_KEYBOARD all=m #- #- *** FILE: drivers/input/tablet/Kconfig *** @@ -1933,7 +1948,9 @@ TOUCHSCREEN_W90X900 all=m TOUCHSCREEN_PCAP all=m TOUCHSCREEN_ST1232 all=m TOUCHSCREEN_STMPE all=m +TOUCHSCREEN_SUR40 all=m TOUCHSCREEN_TPS6507X all=m +TOUCHSCREEN_ZFORCE all=m #- #- *** FILE: drivers/iommu/Kconfig *** @@ -2118,6 +2135,7 @@ LEDS_LP8501 all=m LEDS_CLEVO_MAIL all=m LEDS_PCA955X all=m LEDS_PCA963X all=m +LEDS_PCA9685 all=m LEDS_WM831X_STATUS all=m LEDS_WM8350 all=m LEDS_DA903X all=m @@ -2214,8 +2232,8 @@ DM_CACHE all=m DM_CACHE_MQ all=m DM_CACHE_CLEANER all=m DM_MIRROR all=m -DM_RAID all=m DM_LOG_USERSPACE all=m +DM_RAID all=m DM_ZERO all=m DM_MULTIPATH all=m DM_MULTIPATH_QL all=m @@ -2231,7 +2249,6 @@ DM_SWITCH all=m #- BCACHE all=m BCACHE_DEBUG all=n -BCACHE_EDEBUG all=n BCACHE_CLOSURES_DEBUG all=n #- @@ -2411,7 +2428,7 @@ VIDEO_NOON010PC30 all=m #- Video improvement chips VIDEO_UPD64031A all=m VIDEO_UPD64083 all=m -#- Miscelaneous helper chips +#- Miscellaneous helper chips #- file drivers/media/i2c/soc_camera/Kconfig goes here #- @@ -3186,6 +3203,7 @@ SRAM all=n #- file drivers/misc/altera-stapl/Kconfig goes here #- file drivers/misc/mei/Kconfig goes here #- file drivers/misc/vmw_vmci/Kconfig goes here +#- file drivers/misc/mic/Kconfig goes here #- #- *** FILE: drivers/misc/altera-stapl/Kconfig *** @@ -3227,6 +3245,14 @@ SENSORS_LIS3_I2C all=m INTEL_MEI all=m INTEL_MEI_ME all=y +#- +#- *** FILE: drivers/misc/mic/Kconfig *** +#- +#- Intel MIC Host Driver +INTEL_MIC_HOST all=m +#- Intel MIC Card Driver +INTEL_MIC_CARD all=m + #- #- *** FILE: drivers/misc/ti-st/Kconfig *** #- @@ -3356,7 +3382,6 @@ MTD_DATAFLASH all=m ppc=n ppc64=n sparc=n MTD_DATAFLASH_WRITE_VERIFY all=y MTD_DATAFLASH_OTP all=y MTD_M25P80 all=m ppc=n ppc64=n sparc=n -M25PXX_USE_FAST_READ all=y MTD_SST25L all=m MTD_SLRAM all=m MTD_PHRAM all=m @@ -4296,6 +4321,7 @@ USB_NET_AX88179_178A all=m USB_NET_CDCETHER all=m USB_NET_CDC_EEM all=m USB_NET_CDC_NCM all=m +USB_NET_HUAWEI_CDC_NCM all=m USB_NET_CDC_MBIM all=m USB_NET_DM9601 all=m USB_NET_SR9700 all=m @@ -4417,6 +4443,7 @@ ATH_DEBUG all=n #- file drivers/net/wireless/ath/ar5523/Kconfig goes here #- file drivers/net/wireless/ath/wil6210/Kconfig goes here #- file drivers/net/wireless/ath/ath10k/Kconfig goes here +#- file drivers/net/wireless/ath/wcn36xx/Kconfig goes here #- #- *** FILE: drivers/net/wireless/ath/ar5523/Kconfig *** @@ -4467,6 +4494,12 @@ CARL9170 all=m CARL9170_LEDS all=y CARL9170_HWRNG all=y +#- +#- *** FILE: drivers/net/wireless/ath/wcn36xx/Kconfig *** +#- +WCN36XX all=m +WCN36XX_DEBUGFS all=n + #- #- *** FILE: drivers/net/wireless/ath/wil6210/Kconfig *** #- @@ -4687,6 +4720,7 @@ NFC_PN533 all=m NFC_WILINK all=m NFC_MEI_PHY all=m NFC_SIM all=m +NFC_PORT100 all=m #- file drivers/nfc/pn544/Kconfig goes here #- file drivers/nfc/microread/Kconfig goes here @@ -4812,6 +4846,14 @@ PCMCIA_PROBE alpha=y i386=y ELECTRA_CF ppc64=m PCCARD_NONSTATIC all=y +#- +#- *** FILE: drivers/phy/Kconfig *** +#- +GENERIC_PHY all=m +PHY_EXYNOS_MIPI_VIDEO all=m +OMAP_USB2 all=m +TWL4030_USB all=m + #- #- *** FILE: drivers/pinctrl/Kconfig *** #- @@ -4824,6 +4866,12 @@ PINCTRL_BAYTRAIL all=y #- file drivers/pinctrl/spear/Kconfig goes here #- file drivers/pinctrl/vt8500/Kconfig goes here +#- +#- *** FILE: drivers/platform/chrome/Kconfig *** +#- +CHROME_PLATFORMS all=y +CHROMEOS_LAPTOP all=m + #- #- *** FILE: drivers/platform/x86/Kconfig *** #- @@ -4831,7 +4879,6 @@ X86_PLATFORM_DEVICES i386=y x86_64=y ACER_WMI all=m ACERHDF all=m ASUS_LAPTOP i386=m x86_64=m -CHROMEOS_LAPTOP all=m DELL_LAPTOP all=m DELL_WMI all=m DELL_WMI_AIO all=m @@ -4942,6 +4989,7 @@ CHARGER_GPIO all=m CHARGER_MANAGER all=y CHARGER_BQ2415X all=m CHARGER_BQ24190 all=m +CHARGER_BQ24735 all=m CHARGER_SMB347 all=m AB8500_BM all=n BATTERY_GOLDFISH all=m @@ -4958,6 +5006,12 @@ POWER_AVS all=y #- POWER_RESET all=y +#- +#- *** FILE: drivers/powercap/Kconfig *** +#- +POWERCAP all=y +INTEL_RAPL all=m + #- #- *** FILE: drivers/pps/Kconfig *** #- @@ -5016,7 +5070,6 @@ RAPIDIO_CPS_GEN2 all=y #- REGULATOR all=y REGULATOR_DEBUG all=n -REGULATOR_DUMMY all=n REGULATOR_FIXED_VOLTAGE all=m REGULATOR_VIRTUAL_CONSUMER all=m REGULATOR_USERSPACE_CONSUMER all=m @@ -5556,6 +5609,7 @@ STAGING all=y #- file drivers/staging/fwserial/Kconfig goes here #- file drivers/staging/goldfish/Kconfig goes here #- file drivers/staging/netlogic/Kconfig goes here +#- file drivers/staging/mt29f_spinand/Kconfig goes here #- file drivers/staging/dwc2/Kconfig goes here #- file drivers/staging/lustre/Kconfig goes here #- file drivers/staging/btmtk_usb/Kconfig goes here @@ -5997,6 +6051,12 @@ USB_MSI3101 all=m #- SOLO6X10 all=m +#- +#- *** FILE: drivers/staging/mt29f_spinand/Kconfig *** +#- +MTD_SPINAND_MT29F all=m +MTD_SPINAND_ONDIEECC all=y + #- #- *** FILE: drivers/staging/ozwpan/Kconfig *** #- @@ -6482,6 +6542,7 @@ USB_CONFIGFS_ECM_SUBSET all=y USB_CONFIGFS_RNDIS all=y USB_CONFIGFS_EEM all=y USB_CONFIGFS_PHONET all=y +USB_CONFIGFS_MASS_STORAGE all=y USB_ZERO all=m USB_ZERO_HNPTEST all=n USB_AUDIO all=m @@ -6607,13 +6668,11 @@ USB_PHY all=y AB8500_USB all=m NOP_USB_XCEIV all=m OMAP_CONTROL_USB all=m -OMAP_USB2 all=m OMAP_USB3 all=m AM335X_PHY_USB all=m SAMSUNG_USBPHY all=m SAMSUNG_USB2PHY all=m SAMSUNG_USB3PHY all=m -TWL4030_USB all=m USB_GPIO_VBUS all=m USB_ISP1301 all=m USB_MV_OTG all=m @@ -6753,9 +6812,9 @@ VHOST_SCSI all=m #- #- file drivers/char/agp/Kconfig goes here #- file drivers/gpu/vga/Kconfig goes here +#- file drivers/gpu/host1x/Kconfig goes here #- file drivers/gpu/drm/Kconfig goes here #- file drivers/gpu/misc/Kconfig goes here -#- file drivers/gpu/host1x/Kconfig goes here VGASTATE all=m VIDEO_OUTPUT_CONTROL all=m FB all=y @@ -6924,7 +6983,7 @@ BACKLIGHT_WM831X all=m BACKLIGHT_ADP8860 all=m BACKLIGHT_ADP8870 all=m BACKLIGHT_PCF50633 all=m -BACKLIGHT_LM3630 all=m +BACKLIGHT_LM3630A all=m BACKLIGHT_LM3639 all=m BACKLIGHT_LP855X all=m BACKLIGHT_OT200 all=m @@ -7378,6 +7437,7 @@ F2FS_STAT_FS all=y F2FS_FS_XATTR all=y F2FS_FS_POSIX_ACL all=y F2FS_FS_SECURITY all=y +F2FS_CHECK_FS all=y #- #- *** FILE: fs/fat/Kconfig *** @@ -7680,6 +7740,11 @@ ROMFS_BACKED_BY_BLOCK all=y #- *** FILE: fs/squashfs/Kconfig *** #- SQUASHFS all=m +SQUASHFS_FILE_CACHE all=n +SQUASHFS_FILE_DIRECT all=y +SQUASHFS_DECOMP_SINGLE all=n +SQUASHFS_DECOMP_MULTI all=n +SQUASHFS_DECOMP_MULTI_PERCPU all=y SQUASHFS_XATTR all=y SQUASHFS_ZLIB all=y SQUASHFS_LZO all=y @@ -7754,7 +7819,6 @@ POSIX_MQUEUE all=y FHANDLE all=y AUDIT all=y AUDITSYSCALL all=y -AUDIT_LOGINUID_IMMUTABLE all=n #- file kernel/irq/Kconfig goes here #- file kernel/time/Kconfig goes here TICK_CPU_ACCOUNTING all=n @@ -7846,6 +7910,7 @@ PROFILING all=y SLABINFO all=y RT_MUTEXES all=y BASE_SMALL all=0 +SYSTEM_TRUSTED_KEYRING all=y MODULES all=y MODULE_FORCE_LOAD all=y MODULE_UNLOAD all=y @@ -7959,6 +8024,7 @@ CRC7 all=m LIBCRC32C all=m CRC8 all=m AUDIT_GENERIC alpha=y i386=y +RANDOM32_SELFTEST all=y ZLIB_INFLATE all=y ZLIB_DEFLATE all=m LZO_COMPRESS all=y @@ -8003,6 +8069,7 @@ DEBUG_SECTION_MISMATCH all=n FRAME_POINTER i386=y x86_64=y DEBUG_FORCE_WEAK_PER_CPU all=n MAGIC_SYSRQ all=y +MAGIC_SYSRQ_DEFAULT_ENABLE all=0x1 DEBUG_KERNEL all=y #- file mm/Kconfig.debug goes here DEBUG_OBJECTS all=n @@ -8063,6 +8130,7 @@ KPROBES_SANITY_TEST all=n BACKTRACE_SELF_TEST all=m RBTREE_TEST all=m INTERVAL_TREE_TEST all=m +PERCPU_TEST all=m ATOMIC64_SELFTEST all=n ASYNC_RAID6_TEST all=m TEST_STRING_HELPERS all=m @@ -8219,6 +8287,7 @@ BRIDGE_NETFILTER all=y #- file net/vmw_vsock/Kconfig goes here #- file net/netlink/Kconfig goes here #- file net/mpls/Kconfig goes here +#- file net/hsr/Kconfig goes here RFS_ACCEL all=y NETPRIO_CGROUP all=m BPF_JIT all=y @@ -8316,6 +8385,7 @@ BRIDGE_VLAN_FILTERING all=y #- #- *** FILE: net/bridge/netfilter/Kconfig *** #- +NF_TABLES_BRIDGE all=m BRIDGE_NF_EBTABLES all=m BRIDGE_EBT_BROUTE all=m BRIDGE_EBT_T_FILTER all=m @@ -8406,6 +8476,11 @@ DNS_RESOLVER all=m #- NET_DSA all=y +#- +#- *** FILE: net/hsr/Kconfig *** +#- +HSR all=m + #- #- *** FILE: net/ieee802154/Kconfig *** #- @@ -8475,6 +8550,11 @@ TCP_MD5SIG all=y #- NF_CONNTRACK_IPV4 all=m NF_CONNTRACK_PROC_COMPAT all=y +NF_TABLES_IPV4 all=m +NFT_REJECT_IPV4 all=m +NFT_CHAIN_ROUTE_IPV4 all=m +NFT_CHAIN_NAT_IPV4 all=m +NF_TABLES_ARP all=m IP_NF_IPTABLES all=m IP_NF_MATCH_AH all=m IP_NF_MATCH_ECN all=m @@ -8503,7 +8583,6 @@ IP_NF_ARP_MANGLE all=m #- *** FILE: net/ipv6/Kconfig *** #- IPV6 all=y -IPV6_PRIVACY all=y IPV6_ROUTER_PREF all=y IPV6_ROUTE_INFO all=y IPV6_OPTIMISTIC_DAD all=y @@ -8517,6 +8596,7 @@ INET6_XFRM_MODE_TRANSPORT all=m INET6_XFRM_MODE_TUNNEL all=m INET6_XFRM_MODE_BEET all=m INET6_XFRM_MODE_ROUTEOPTIMIZATION all=m +IPV6_VTI all=m IPV6_SIT all=m IPV6_SIT_6RD all=y IPV6_TUNNEL all=m @@ -8531,6 +8611,9 @@ IPV6_PIMSM_V2 all=y #- *** FILE: net/ipv6/netfilter/Kconfig *** #- NF_CONNTRACK_IPV6 all=m +NF_TABLES_IPV6 all=m +NFT_CHAIN_ROUTE_IPV6 all=m +NFT_CHAIN_NAT_IPV6 all=m IP6_NF_IPTABLES all=m IP6_NF_MATCH_AH all=m IP6_NF_MATCH_EUI64 all=m @@ -8668,6 +8751,17 @@ NF_CT_NETLINK_TIMEOUT all=m NF_CT_NETLINK_HELPER all=m NETFILTER_NETLINK_QUEUE_CT all=y NF_NAT all=m +NF_TABLES all=m +NFT_EXTHDR all=m +NFT_META all=m +NFT_CT all=m +NFT_RBTREE all=m +NFT_HASH all=m +NFT_COUNTER all=m +NFT_LOG all=m +NFT_LIMIT all=m +NFT_NAT all=m +NFT_COMPAT all=m NETFILTER_XTABLES all=m #- Xtables combined modules NETFILTER_XT_MARK all=m @@ -8755,7 +8849,9 @@ IP_SET_HASH_IP all=m IP_SET_HASH_IPPORT all=m IP_SET_HASH_IPPORTIP all=m IP_SET_HASH_IPPORTNET all=m +IP_SET_HASH_NETPORTNET all=m IP_SET_HASH_NET all=m +IP_SET_HASH_NETNET all=m IP_SET_HASH_NETPORT all=m IP_SET_HASH_NETIFACE all=m IP_SET_LIST_SET all=m @@ -8804,6 +8900,7 @@ NETLINK_DIAG all=m #- *** FILE: net/nfc/Kconfig *** #- NFC all=m +NFC_DIGITAL all=m #- file net/nfc/nci/Kconfig goes here #- file net/nfc/hci/Kconfig goes here #- file drivers/nfc/Kconfig goes here @@ -8902,6 +8999,7 @@ NET_CLS_RSVP all=m NET_CLS_RSVP6 all=m NET_CLS_FLOW all=m NET_CLS_CGROUP all=y +NET_CLS_BPF all=m NET_EMATCH all=y NET_EMATCH_STACK all=32 NET_EMATCH_CMP all=m @@ -9047,6 +9145,8 @@ IMA all=n #- *** FILE: security/keys/Kconfig *** #- KEYS all=y +PERSISTENT_KEYRINGS all=y +BIG_KEYS all=y TRUSTED_KEYS all=m ENCRYPTED_KEYS all=m KEYS_DEBUG_PROC_KEYS all=n @@ -9189,6 +9289,7 @@ SND_AC97_POWER_SAVE_DEFAULT all=0 #- SND_FIREWIRE all=y SND_FIREWIRE_LIB all=m +SND_DICE all=m SND_FIREWIRE_SPEAKERS all=m SND_ISIGHT all=m SND_SCS1X all=m @@ -9499,6 +9600,8 @@ INITRAMFS_COMPRESSION_LZMA all=n ABYSS all=m sparc= AC3200 alpha=m i386=m ACPI_ASUS i386=m x86_64=m +ACPI_BLACKLIST_YEAR all=0 +ACPI_PROCFS_POWER ia64=y x86=y ACPI_PROC_EVENT all=y AD2S120X all=m AD2S1210_GPIO_INPUT all=n @@ -9515,9 +9618,12 @@ ARPD all=n ASUS_OLED all=m AT1700 alpha=m i386=m ATH6K_LEGACY all=n +AUDIT_LOGINUID_IMMUTABLE all=n B43_BCMA_EXTRA all=y +BACKLIGHT_LM3630 all=m BACKLIGHT_PROGEAR i386=m x86_64=m BATTERY_BQ20Z75 all=m +BCACHE_EDEBUG all=n BLK_DEV_UB all=n BLK_DEV_XD alpha=m i386=m BRCMFMAC_SDIO_OOB all=y @@ -9583,6 +9689,7 @@ EXT4_FS_XATTR all=y FAIR_SHARE all=y GPIO_BASIC_MMIO all=m GPIO_BASIC_MMIO_CORE all=m +GPIO_LANGWELL all=n HID_PS3REMOTE all=m HID_QUANTA all=m HID_ROCCAT_ARVO all=m @@ -9592,6 +9699,7 @@ HID_ROCCAT_KONE all=m HID_ROCCAT_KONEPLUS all=m HID_ROCCAT_KOVAPLUS all=m HID_ROCCAT_PYRA all=m +HID_SENSOR_ENUM_BASE_QUIRKS all=y HID_SUPPORT all=y HID_WACOM_POWER_SUPPLY all=y HID_WIIMOTE_EXT all=y @@ -9622,10 +9730,12 @@ IIO_GPIO_TRIGGER all=m IIO_RING_BUFFER all=y IIO_ST_HWMON all=m IIO_SW_RING all=m +INFINIBAND_EXPERIMENTAL_UVERBS_FLOW_STEERING all=n INPUT_ATI_REMOTE all=m sparc=n IP6_NF_QUEUE all=m IP6_NF_TARGET_LOG all=m IPDDP_DECAP all=y +IPV6_PRIVACY all=y IP_NF_QUEUE all=m IP_NF_TARGET_LOG all=m IRQ_TIME_ACCOUN all=y @@ -9665,6 +9775,7 @@ LNE390 alpha=m i386=m LOGIWII_FF all=y LOOPBACK_TARGET_CDB_DEBUG all=n LP486E alpha=m i386=m +M25PXX_USE_FAST_READ all=y MADGEMC all=m MAX1363_RING_BUFFER all=y MCA_LEGACY i386=y @@ -9730,6 +9841,7 @@ RAMOOPS all=m RAPIDIO_TSI500 all=y RAR_REGISTER all=y REGULATOR_BQ24022 all=m +REGULATOR_DUMMY all=n RIO all=m RIO_OLDPCI all=n ia64=y ppc=y ppc64=y RISCOM8 all=m diff --git a/kernel.spec b/kernel.spec index d3e999d4..2ecb5ca0 100644 --- a/kernel.spec +++ b/kernel.spec @@ -68,8 +68,8 @@ %endif %define rel 0.1 -%define basever 3.12 -%define postver .3 +%define basever 3.13 +%define postver .0 # __alt_kernel is list of features, empty string if none set # _alt kernel is defined as: %{nil}%{?alt_kernel:-%{?alt_kernel}} (defined in rpm.macros) @@ -109,7 +109,7 @@ Epoch: 3 License: GPL v2 Group: Base/Kernel Source0: http://www.kernel.org/pub/linux/kernel/v3.x/linux-%{basever}.tar.xz -# Source0-md5: cc6ee608854e0da4b64f6c1ff8b6398c +# Source0-md5: 0ecbaf65c00374eb4a826c2f9f37606f %if "%{postver}" != ".0" Patch0: http://www.kernel.org/pub/linux/kernel/v3.x/patch-%{version}.xz # Patch0-md5: b7a603bf67e69936cf049fc6b37d9085 -- 2.44.0