diff --git a/debian/changelog b/debian/changelog index c22db0665..22737e2eb 100644 --- a/debian/changelog +++ b/debian/changelog @@ -4,7 +4,7 @@ linux (3.13~rc4-1~exp1) UNRELEASED; urgency=low [ Ben Hutchings ] * [rt] Disable until it is updated for 3.13 or later - * aufs: Disable until it is updated for Linux 3.13 + * aufs: Update to aufs3.x-rcN-20131223 [ Aurelien Jarno ] * [mipsel] Remove r5k-cobalt flavour. diff --git a/debian/patches/features/all/aufs3/aufs3-add.patch b/debian/patches/features/all/aufs3/aufs3-add.patch index c2e429f63..6b5c638e5 100644 --- a/debian/patches/features/all/aufs3/aufs3-add.patch +++ b/debian/patches/features/all/aufs3/aufs3-add.patch @@ -1,7 +1,7 @@ From: J. R. Okajima -Date: Tue Nov 5 13:13:07 2013 +0900 -Subject: aufs3.12-20131111 -Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/4a7364f2f7c6db8bb880d7aefbeb34efc1d66ad4/tree/ +Date: Wed Dec 18 12:37:33 2013 +0900 +Subject: aufs3.x-rcN-20131223 +Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/7b136a27b021da9010d8b6c101939dd298e46be7/tree/ Bug-Debian: http://bugs.debian.org/541828 Patch generated by debian/patches/features/all/aufs3/gen-patch @@ -94,7 +94,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see the aufs manual. --- a/Documentation/filesystems/aufs/README 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/README 2013-11-03 20:29:04.115645964 +0000 ++++ b/Documentation/filesystems/aufs/README 2013-12-26 11:50:18.050562502 +0000 @@ -0,0 +1,344 @@ + +Aufs3 -- advanced multi layered unification filesystem version 3.x @@ -421,7 +421,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +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. @@ -441,8 +441,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# mode: text; +# End: ; --- a/Documentation/filesystems/aufs/design/01intro.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/01intro.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,162 @@ ++++ b/Documentation/filesystems/aufs/design/01intro.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,161 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -457,8 +457,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------- @@ -606,8 +605,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +helper, instead of doing in kernel space. Actually I am still thinking +about it. But currently I have implemented it in kernel space. --- a/Documentation/filesystems/aufs/design/02struct.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/02struct.txt 2013-10-28 03:48:03.320849456 +0000 -@@ -0,0 +1,243 @@ ++++ b/Documentation/filesystems/aufs/design/02struct.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,242 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -622,8 +621,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 + @@ -852,8 +850,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +For this purpose, use "aumvdown" command in aufs-util.git. --- a/Documentation/filesystems/aufs/design/03lookup.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/03lookup.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,106 @@ ++++ b/Documentation/filesystems/aufs/design/03lookup.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,105 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -868,8 +866,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------------------------------------- @@ -961,8 +958,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + aufs performance when system surely hide the aufs branches from user, + by over-mounting something (or another method). --- a/Documentation/filesystems/aufs/design/04branch.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/04branch.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,76 @@ ++++ b/Documentation/filesystems/aufs/design/04branch.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,75 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -977,8 +974,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 + @@ -1040,8 +1036,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + - a regular file on the branch is opened for write and there is no + same named entry on the upper branch. --- a/Documentation/filesystems/aufs/design/05wbr_policy.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/05wbr_policy.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,65 @@ ++++ b/Documentation/filesystems/aufs/design/05wbr_policy.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,64 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -1056,8 +1052,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------------------------------------- @@ -1108,8 +1103,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + one. If the selected branch is readonly, then aufs follows the + copyup policy. --- a/Documentation/filesystems/aufs/design/06mmap.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/06mmap.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,47 @@ ++++ b/Documentation/filesystems/aufs/design/06mmap.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,46 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -1124,8 +1119,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------------------------------------- @@ -1158,8 +1152,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +approach, aufs met a hard problem and I could not solve it without +switching the approach. --- a/Documentation/filesystems/aufs/design/07export.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/07export.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,59 @@ ++++ b/Documentation/filesystems/aufs/design/07export.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,58 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -1174,8 +1168,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------------------------------------- @@ -1220,8 +1213,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +- readdir(): call lockdep_on/off() because filldir in NFSD calls + lookup_one_len(), vfs_getattr(), encode_fh() and others. --- a/Documentation/filesystems/aufs/design/08shwh.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/08shwh.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,53 @@ ++++ b/Documentation/filesystems/aufs/design/08shwh.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,52 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -1236,8 +1229,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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) +---------------------------------------------------------------------- @@ -1276,8 +1268,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +This new squashfs archive can be stored on the boot device and the +initramfs will use it to replace the old one at the next boot. --- a/Documentation/filesystems/aufs/design/10dynop.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/10dynop.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,47 @@ ++++ b/Documentation/filesystems/aufs/design/10dynop.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,46 @@ + +# Copyright (C) 2010-2013 Junjiro R. Okajima +# @@ -1292,8 +1284,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 +---------------------------------------------------------------------- @@ -1326,8 +1317,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +Currently this approach is applied to file_operations and +vm_operations_struct for regular files only. --- a/Documentation/filesystems/aufs/design/99plan.txt 1970-01-01 01:00:00.000000000 +0100 -+++ b/Documentation/filesystems/aufs/design/99plan.txt 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,96 @@ ++++ b/Documentation/filesystems/aufs/design/99plan.txt 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,95 @@ + +# Copyright (C) 2005-2013 Junjiro R. Okajima +# @@ -1342,8 +1333,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +# 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 + @@ -1652,8 +1642,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o --- a/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/aufs.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,60 @@ ++++ b/fs/aufs/aufs.h 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,59 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -1668,8 +1658,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -1715,8 +1704,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ --- a/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/branch.c 2013-11-03 20:29:04.119645964 +0000 -@@ -0,0 +1,1212 @@ ++++ b/fs/aufs/branch.c 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,1220 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -1731,8 +1720,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -2723,22 +2711,25 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + 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; +} @@ -2824,7 +2815,13 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -2930,8 +2927,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/branch.h 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,265 @@ ++++ b/fs/aufs/branch.h 2013-12-26 11:50:18.050562502 +0000 +@@ -0,0 +1,264 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -2946,8 +2943,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -3238,8 +3234,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +-include ${srctree}/${src}/conf_priv.mk --- a/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/cpup.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,1268 @@ ++++ b/fs/aufs/cpup.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,1277 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -3254,8 +3250,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -3386,7 +3381,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); +} @@ -3443,13 +3439,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -3546,7 +3543,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); + } + } @@ -3603,20 +3602,18 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -3631,18 +3628,15 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -3851,7 +3845,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); ++ /* 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: @@ -3871,7 +3866,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 */ @@ -3936,11 +3931,17 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } + + 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 @@ -4008,9 +4009,11 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -4292,9 +4295,11 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + + 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", @@ -4509,8 +4514,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/cpup.h 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,95 @@ ++++ b/fs/aufs/cpup.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,94 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -4525,8 +4530,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -4607,8 +4611,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_CPUP_H__ */ --- a/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dbgaufs.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,433 @@ ++++ b/fs/aufs/dbgaufs.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,432 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -4623,8 +4627,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -5043,8 +5046,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dbgaufs.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,49 @@ ++++ b/fs/aufs/dbgaufs.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,48 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -5059,8 +5062,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -5095,7 +5097,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __DBGAUFS_H__ */ --- a/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dcsub.c 2013-10-28 03:48:03.324849456 +0000 ++++ b/fs/aufs/dcsub.c 2013-12-26 11:50:18.054562502 +0000 @@ -0,0 +1,243 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima @@ -5111,8 +5113,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -5205,6 +5206,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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) +{ @@ -5296,7 +5298,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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)) { @@ -5341,8 +5343,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return path_is_under(path + 0, path + 1); +} --- a/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dcsub.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,94 @@ ++++ b/fs/aufs/dcsub.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,93 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -5357,8 +5359,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -5438,8 +5439,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_DCSUB_H__ */ --- a/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/debug.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,518 @@ ++++ b/fs/aufs/debug.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,517 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -5454,8 +5455,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -5959,8 +5959,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return 0; +} --- a/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/debug.h 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,249 @@ ++++ b/fs/aufs/debug.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,248 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -5975,8 +5975,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -6211,8 +6210,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_DEBUG_H__ */ --- a/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dentry.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,1065 @@ ++++ b/fs/aufs/dentry.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,1064 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -6227,8 +6226,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -7279,8 +7277,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + .d_release = aufs_d_release +}; --- a/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dentry.h 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,234 @@ ++++ b/fs/aufs/dentry.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,233 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -7295,8 +7293,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -7516,8 +7513,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_DENTRY_H__ */ --- a/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dinfo.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,543 @@ ++++ b/fs/aufs/dinfo.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,542 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -7532,8 +7529,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -8062,8 +8058,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return -1; +} --- a/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dir.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,645 @@ ++++ b/fs/aufs/dir.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,644 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -8078,8 +8074,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -8710,8 +8705,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + .fsync = aufs_fsync_dir +}; --- a/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dir.h 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,137 @@ ++++ b/fs/aufs/dir.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,136 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -8726,8 +8721,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -8850,8 +8844,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ --- a/fs/aufs/dynop.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dynop.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,380 @@ ++++ b/fs/aufs/dynop.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,379 @@ +/* + * Copyright (C) 2010-2013 Junjiro R. Okajima + * @@ -8866,8 +8860,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -9233,8 +9226,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + WARN_ON(!list_empty(&dynop[i].head)); +} --- a/fs/aufs/dynop.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/dynop.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,76 @@ ++++ b/fs/aufs/dynop.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,75 @@ +/* + * Copyright (C) 2010-2013 Junjiro R. Okajima + * @@ -9249,8 +9242,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -9312,8 +9304,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_DYNOP_H__ */ --- a/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/export.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,832 @@ ++++ b/fs/aufs/export.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,831 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -9328,8 +9320,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -9617,9 +9608,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + }; + + 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); @@ -10147,8 +10138,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + atomic_set(&sbinfo->si_xigen_next, u); +} --- a/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/f_op.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,726 @@ ++++ b/fs/aufs/f_op.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,723 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -10163,8 +10154,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -10203,11 +10193,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; */ + } @@ -10239,6 +10226,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -10778,7 +10766,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + + 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; @@ -10821,7 +10809,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -10876,8 +10864,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif +}; --- a/fs/aufs/f_op_sp.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/f_op_sp.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,383 @@ ++++ b/fs/aufs/f_op_sp.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,382 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -10892,8 +10880,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -11262,8 +11249,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return ret; +} --- a/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/file.c 2013-10-28 03:48:03.324849456 +0000 -@@ -0,0 +1,725 @@ ++++ b/fs/aufs/file.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,724 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -11278,8 +11265,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -11990,8 +11976,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* CONFIG_AUFS_DEBUG */ +}; --- a/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/file.h 2013-11-03 20:29:04.119645964 +0000 -@@ -0,0 +1,310 @@ ++++ b/fs/aufs/file.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,312 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -12006,8 +11992,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -12056,6 +12041,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; + +/* ---------------------------------------------------------------------- */ @@ -12303,8 +12291,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ --- a/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/finfo.c 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,157 @@ ++++ b/fs/aufs/finfo.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,156 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -12319,8 +12307,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -12463,8 +12450,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/fstype.h 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,470 @@ ++++ b/fs/aufs/fstype.h 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,469 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -12479,8 +12466,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -12936,8 +12922,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ --- a/fs/aufs/hfsnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hfsnotify.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,296 @@ ++++ b/fs/aufs/hfsnotify.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,295 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -12952,8 +12938,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -13235,8 +13220,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + .init_br = au_hfsn_init_br +}; --- a/fs/aufs/hfsplus.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hfsplus.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,57 @@ ++++ b/fs/aufs/hfsplus.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,56 @@ +/* + * Copyright (C) 2010-2013 Junjiro R. Okajima + * @@ -13251,8 +13236,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -13295,8 +13279,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +} --- a/fs/aufs/hnotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/hnotify.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,712 @@ ++++ b/fs/aufs/hnotify.c 2013-12-26 11:50:18.054562502 +0000 +@@ -0,0 +1,711 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -13311,8 +13295,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -14010,8 +13993,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + au_hn_destroy_cache(); +} --- a/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/i_op.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,1118 @@ ++++ b/fs/aufs/i_op.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,1127 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -14026,8 +14009,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -14754,7 +14736,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +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; @@ -14834,8 +14816,18 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); + @@ -15131,8 +15123,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + .update_time = aufs_update_time +}; --- a/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/i_op_add.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,739 @@ ++++ b/fs/aufs/i_op_add.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,763 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -15147,8 +15139,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -15429,7 +15420,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + /* 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); @@ -15540,7 +15533,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; + @@ -15601,8 +15594,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + + } + 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", @@ -15626,7 +15625,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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, */ @@ -15683,9 +15682,16 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 { + /* @@ -15709,10 +15715,18 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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)) @@ -15738,7 +15752,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -15873,8 +15889,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/i_op_del.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,502 @@ ++++ b/fs/aufs/i_op_del.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,507 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -15889,8 +15905,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -16176,7 +16191,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + 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 { @@ -16220,7 +16235,13 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -16378,8 +16399,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/i_op_ren.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,1009 @@ ++++ b/fs/aufs/i_op_ren.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,1032 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -16394,8 +16415,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -16500,6 +16520,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +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); @@ -16509,9 +16530,15 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); */ @@ -16524,7 +16551,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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) @@ -16534,6 +16563,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +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); @@ -16548,7 +16578,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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) @@ -16580,6 +16617,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + int err; + struct dentry *d; ++ struct inode *delegated; + + d = a->src_dentry; + if (au_dbstart(d) == a->btgt) { @@ -16588,8 +16626,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + && 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(); + @@ -17390,8 +17434,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/iinfo.c 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,276 @@ ++++ b/fs/aufs/iinfo.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,275 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -17406,8 +17450,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -17669,8 +17712,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + AuRwDestroy(&iinfo->ii_rwsem); +} --- a/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/inode.c 2013-05-04 18:39:11.000000000 +0100 -@@ -0,0 +1,492 @@ ++++ b/fs/aufs/inode.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,491 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -17685,8 +17728,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -18164,8 +18206,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return au_test_h_perm(h_inode, mask); +} --- a/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/inode.h 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,600 @@ ++++ b/fs/aufs/inode.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,599 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -18180,8 +18222,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -18767,8 +18808,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ --- a/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/ioctl.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,202 @@ ++++ b/fs/aufs/ioctl.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,201 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -18783,8 +18824,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -18972,8 +19012,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +} +#endif --- a/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/loop.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,146 @@ ++++ b/fs/aufs/loop.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,145 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -18988,8 +19028,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -19121,8 +19160,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + kfree(au_warn_loopback_array); +} --- a/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/loop.h 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,53 @@ ++++ b/fs/aufs/loop.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,52 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -19137,8 +19176,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -19234,8 +19272,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +ccflags-y += -DHFSPLUS_SUPER_MAGIC=0x482b +endif --- a/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/module.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,203 @@ ++++ b/fs/aufs/module.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,202 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -19250,8 +19288,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -19440,8 +19477,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +module_init(aufs_init); +module_exit(aufs_exit); --- a/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/module.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,105 @@ ++++ b/fs/aufs/module.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -19456,8 +19493,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -19548,8 +19584,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_MODULE_H__ */ --- a/fs/aufs/mvdown.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/mvdown.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,610 @@ ++++ b/fs/aufs/mvdown.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,623 @@ +/* + * Copyright (C) 2011-2013 Junjiro R. Okajima + * @@ -19564,8 +19600,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +#include "aufs.h" @@ -19719,6 +19754,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -19731,8 +19767,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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"); + } @@ -19752,10 +19794,17 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + 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"); + @@ -20161,8 +20210,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/opts.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,1704 @@ ++++ b/fs/aufs/opts.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,1703 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -20177,8 +20226,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -21868,8 +21916,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return au_mntflags(sb) & AuOptMask_UDBA; +} --- a/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/opts.h 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,211 @@ ++++ b/fs/aufs/opts.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,210 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -21884,8 +21932,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -22082,8 +22129,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_OPTS_H__ */ --- a/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/plink.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,520 @@ ++++ b/fs/aufs/plink.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,532 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -22098,8 +22145,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -22344,7 +22390,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -22359,14 +22405,27 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + /* 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: @@ -22605,8 +22664,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +} --- a/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/poll.c 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,56 @@ ++++ b/fs/aufs/poll.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -22621,8 +22680,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -22652,7 +22710,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + /* 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); @@ -22664,8 +22722,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return mask; +} --- a/fs/aufs/procfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/procfs.c 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,170 @@ ++++ b/fs/aufs/procfs.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,169 @@ +/* + * Copyright (C) 2010-2013 Junjiro R. Okajima + * @@ -22680,8 +22738,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -22837,8 +22894,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/rdu.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/rdu.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,389 @@ ++++ b/fs/aufs/rdu.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,388 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -22853,8 +22910,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -22990,7 +23046,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -23229,8 +23285,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +} +#endif --- a/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/rwsem.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,188 @@ ++++ b/fs/aufs/rwsem.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,187 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -23245,8 +23301,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -23420,8 +23475,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_RWSEM_H__ */ --- a/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sbinfo.c 2013-10-28 03:48:03.332849456 +0000 -@@ -0,0 +1,350 @@ ++++ b/fs/aufs/sbinfo.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,351 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -23436,8 +23491,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -23541,6 +23595,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -23773,8 +23829,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + spin_unlock(&sbinfo->au_si_pid.tree_lock); +} --- a/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/spl.h 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,112 @@ ++++ b/fs/aufs/spl.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,111 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -23789,8 +23845,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -23888,8 +23943,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_SPL_H__ */ --- a/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/super.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,1002 @@ ++++ b/fs/aufs/super.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,1001 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -23904,8 +23959,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -24893,8 +24947,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + .owner = THIS_MODULE, +}; --- a/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/super.h 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,568 @@ ++++ b/fs/aufs/super.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,571 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -24909,8 +24963,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -24992,7 +25045,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } 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; + @@ -25070,6 +25124,9 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 @@ -25464,8 +25521,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_SUPER_H__ */ --- a/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysaufs.c 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,105 @@ ++++ b/fs/aufs/sysaufs.c 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -25480,8 +25537,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -25572,8 +25628,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysaufs.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,104 @@ ++++ b/fs/aufs/sysaufs.h 2013-12-26 11:50:18.058562502 +0000 +@@ -0,0 +1,103 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -25588,8 +25644,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -25679,8 +25734,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __SYSAUFS_H__ */ --- a/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysfs.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,297 @@ ++++ b/fs/aufs/sysfs.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,296 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -25695,8 +25750,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -25979,8 +26033,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +} --- a/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/sysrq.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,151 @@ ++++ b/fs/aufs/sysrq.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,154 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -25995,8 +26049,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -26014,6 +26067,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + char *plevel; + struct au_sbinfo *sbinfo; + struct file *file; ++ struct au_sphlhead *files; ++ struct au_finfo *finfo; + + plevel = au_plevel; + au_plevel = KERN_WARNING; @@ -26069,14 +26124,16 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +#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 @@ -26133,8 +26190,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + pr_err("err %d (ignored)\n", err); +} --- a/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/vdir.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,888 @@ ++++ b/fs/aufs/vdir.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,887 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -26149,8 +26206,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -27024,8 +27080,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return 0; +} --- a/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/vfsub.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,772 @@ ++++ b/fs/aufs/vfsub.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,783 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -27040,8 +27096,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -27276,7 +27331,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -27296,7 +27352,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -27318,7 +27374,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +} + +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 = { @@ -27338,7 +27395,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -27489,7 +27547,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 { @@ -27675,6 +27733,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + int *errp; + struct path *path; + struct iattr *ia; ++ struct inode **delegated_inode; +}; + +static void call_notify_change(void *args) @@ -27687,20 +27746,23 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + + *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); @@ -27708,13 +27770,15 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -27730,6 +27794,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + int *errp; + struct inode *dir; + struct path *path; ++ struct inode **delegated_inode; +}; + +static void call_unlink(void *args) @@ -27755,7 +27820,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 = { @@ -27777,13 +27842,15 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * @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) @@ -27799,8 +27866,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/vfsub.h 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,312 @@ ++++ b/fs/aufs/vfsub.h 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,282 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -27815,8 +27882,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -27835,41 +27901,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +/* 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 + +/* ---------------------------------------------------------------------- */ + @@ -27877,7 +27910,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +/* 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 */ @@ -27976,9 +28009,10 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); + @@ -28107,14 +28141,17 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +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__ */ --- a/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wbr_policy.c 2013-10-28 03:48:03.336849456 +0000 ++++ b/fs/aufs/wbr_policy.c 2013-12-26 11:50:18.062562502 +0000 @@ -0,0 +1,756 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima @@ -28130,8 +28167,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -28156,13 +28192,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -28873,8 +28910,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +}; --- a/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/whout.c 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,1022 @@ ++++ b/fs/aufs/whout.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,1056 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -28889,8 +28926,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -29053,7 +29089,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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 */ @@ -29066,8 +29102,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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: @@ -29082,7 +29124,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +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. @@ -29090,7 +29133,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + */ + 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, @@ -29136,14 +29186,22 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); @@ -29402,7 +29460,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; + @@ -29429,7 +29487,14 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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)); @@ -29502,7 +29567,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; @@ -29513,7 +29578,13 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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; + @@ -29898,8 +29969,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + } +} --- a/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/whout.h 2013-06-02 18:23:34.000000000 +0100 -@@ -0,0 +1,87 @@ ++++ b/fs/aufs/whout.h 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,86 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -29914,8 +29985,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -29988,8 +30058,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_WHOUT_H__ */ --- a/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wkq.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,213 @@ ++++ b/fs/aufs/wkq.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,212 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -30004,8 +30074,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -30204,8 +30273,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/wkq.h 2013-03-10 01:48:58.000000000 +0000 -@@ -0,0 +1,92 @@ ++++ b/fs/aufs/wkq.h 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,91 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -30220,8 +30289,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -30299,8 +30367,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +#endif /* __KERNEL__ */ +#endif /* __AUFS_WKQ_H__ */ --- a/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100 -+++ b/fs/aufs/xino.c 2013-10-28 03:48:03.336849456 +0000 -@@ -0,0 +1,1312 @@ ++++ b/fs/aufs/xino.c 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,1314 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -30315,8 +30383,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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 . + */ + +/* @@ -30441,7 +30508,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + struct file *file; + struct dentry *base, *parent; -+ struct inode *dir; ++ struct inode *dir, *delegated; + struct qstr *name; + struct path path; + int err; @@ -30478,7 +30545,13 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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); + goto out_fput; @@ -31049,7 +31122,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + 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)) { @@ -31291,12 +31365,10 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + 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); +} + @@ -31304,12 +31376,10 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch +{ + 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); +} + @@ -31614,8 +31684,8 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + return err; +} --- a/include/uapi/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ b/include/uapi/linux/aufs_type.h 2013-12-02 05:00:47.765020019 +0000 -@@ -0,0 +1,282 @@ ++++ b/include/uapi/linux/aufs_type.h 2013-12-26 11:50:18.062562502 +0000 +@@ -0,0 +1,281 @@ +/* + * Copyright (C) 2005-2013 Junjiro R. Okajima + * @@ -31630,8 +31700,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + * 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__ @@ -31658,7 +31727,7 @@ Patch generated by debian/patches/features/all/aufs3/gen-patch + +#include + -+#define AUFS_VERSION "3.12-20131111" ++#define AUFS_VERSION "3.x-rcN-20131223" + +/* todo? move this to linux-2.6.19/include/magic.h */ +#define AUFS_SUPER_MAGIC ('a' << 24 | 'u' << 16 | 'f' << 8 | 's') diff --git a/debian/patches/features/all/aufs3/aufs3-base.patch b/debian/patches/features/all/aufs3/aufs3-base.patch index 0fbe5067c..04d3e0473 100644 --- a/debian/patches/features/all/aufs3/aufs3-base.patch +++ b/debian/patches/features/all/aufs3/aufs3-base.patch @@ -1,15 +1,15 @@ From: J. R. Okajima -Date: Tue Nov 5 13:13:07 2013 +0900 -Subject: aufs3.12 base patch -Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/4a7364f2f7c6db8bb880d7aefbeb34efc1d66ad4/tree/ +Date: Wed Dec 18 12:37:33 2013 +0900 +Subject: aufs3.x-rcN base patch +Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/7b136a27b021da9010d8b6c101939dd298e46be7/tree/ Bug-Debian: http://bugs.debian.org/541828 Patch headers added by debian/patches/features/all/aufs3/gen-patch -aufs3.12 base patch +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) @@ -37,41 +37,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 e900ca5..ccd02ee 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_GPL(__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. */ @@ -81,7 +51,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); @@ -109,10 +79,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); diff --git a/debian/patches/features/all/aufs3/aufs3-kbuild.patch b/debian/patches/features/all/aufs3/aufs3-kbuild.patch index 45c054acd..973f66fe5 100644 --- a/debian/patches/features/all/aufs3/aufs3-kbuild.patch +++ b/debian/patches/features/all/aufs3/aufs3-kbuild.patch @@ -1,12 +1,12 @@ From: J. R. Okajima -Date: Tue Nov 5 13:13:07 2013 +0900 -Subject: aufs3.12 kbuild patch -Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/4a7364f2f7c6db8bb880d7aefbeb34efc1d66ad4/tree/ +Date: Wed Dec 18 12:37:33 2013 +0900 +Subject: aufs3.x-rcN kbuild patch +Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/7b136a27b021da9010d8b6c101939dd298e46be7/tree/ Bug-Debian: http://bugs.debian.org/541828 Patch headers added by debian/patches/features/all/aufs3/gen-patch -aufs3.12 kbuild patch +aufs3.x-rcN kbuild patch diff --git a/fs/Kconfig b/fs/Kconfig index c229f82..397b473 100644 @@ -30,7 +30,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 diff --git a/debian/patches/features/all/aufs3/aufs3-mmap.patch b/debian/patches/features/all/aufs3/aufs3-mmap.patch index 3ffebe3bc..98b5c669f 100644 --- a/debian/patches/features/all/aufs3/aufs3-mmap.patch +++ b/debian/patches/features/all/aufs3/aufs3-mmap.patch @@ -1,12 +1,12 @@ From: J. R. Okajima -Date: Tue Nov 5 13:13:07 2013 +0900 -Subject: aufs3.12 mmap patch -Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/4a7364f2f7c6db8bb880d7aefbeb34efc1d66ad4/tree/ +Date: Wed Dec 18 12:37:33 2013 +0900 +Subject: aufs3.x-rcN mmap patch +Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/7b136a27b021da9010d8b6c101939dd298e46be7/tree/ Bug-Debian: http://bugs.debian.org/541828 Patch headers added by debian/patches/features/all/aufs3/gen-patch -aufs3.12 mmap patch +aufs3.x-rcN mmap patch diff --git a/fs/buffer.c b/fs/buffer.c index 6024877..95bbf13 100644 @@ -22,7 +22,7 @@ index 6024877..95bbf13 100644 ret = __block_page_mkwrite(vma, vmf, get_block); sb_end_pagefault(sb); diff --git a/fs/proc/nommu.c b/fs/proc/nommu.c -index ccfd99b..bca7789 100644 +index 5f9bc8a..9ea6c3a 100644 --- a/fs/proc/nommu.c +++ b/fs/proc/nommu.c @@ -45,7 +45,9 @@ static int nommu_region_show(struct seq_file *m, struct vm_region *region) @@ -37,10 +37,10 @@ index ccfd99b..bca7789 100644 ino = inode->i_ino; } diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c -index 390bdab..ad05546 100644 +index fb52b54..1aca72e 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c -@@ -272,7 +272,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) +@@ -264,7 +264,9 @@ show_map_vma(struct seq_file *m, struct vm_area_struct *vma, int is_pid) const char *name = NULL; if (file) { @@ -51,7 +51,7 @@ index 390bdab..ad05546 100644 dev = inode->i_sb->s_dev; ino = inode->i_ino; pgoff = ((loff_t)vma->vm_pgoff) << PAGE_SHIFT; -@@ -1412,6 +1414,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) +@@ -1407,6 +1409,7 @@ static int show_numa_map(struct seq_file *m, void *v, int is_pid) seq_printf(m, "%08lx %s", vma->vm_start, buffer); if (file) { @@ -60,10 +60,10 @@ index 390bdab..ad05546 100644 seq_path(m, &file->f_path, "\n\t= "); } else if (vma->vm_start <= mm->brk && vma->vm_end >= mm->start_brk) { diff --git a/fs/proc/task_nommu.c b/fs/proc/task_nommu.c -index 56123a6..d19737f 100644 +index 678455d..ad0ce45 100644 --- a/fs/proc/task_nommu.c +++ b/fs/proc/task_nommu.c -@@ -149,7 +149,9 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, +@@ -141,7 +141,9 @@ static int nommu_vma_show(struct seq_file *m, struct vm_area_struct *vma, file = vma->vm_file; if (file) { @@ -75,7 +75,7 @@ index 56123a6..d19737f 100644 ino = inode->i_ino; pgoff = (loff_t)vma->vm_pgoff << PAGE_SHIFT; diff --git a/include/linux/mm.h b/include/linux/mm.h -index 8b6e55e..1359c80 100644 +index 1cedd00..a31519b 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -17,6 +17,9 @@ @@ -88,7 +88,7 @@ index 8b6e55e..1359c80 100644 struct mempolicy; struct anon_vma; -@@ -1017,6 +1020,87 @@ static inline int fixup_user_fault(struct task_struct *tsk, +@@ -1101,6 +1104,87 @@ static inline int fixup_user_fault(struct task_struct *tsk, } #endif @@ -177,10 +177,10 @@ index 8b6e55e..1359c80 100644 extern int access_remote_vm(struct mm_struct *mm, unsigned long addr, void *buf, int len, int write); diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h -index d9851ee..4bde7bf 100644 +index bd29941..b5c6151 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h -@@ -213,6 +213,7 @@ struct vm_region { +@@ -230,6 +230,7 @@ struct vm_region { unsigned long vm_top; /* region allocated to here */ unsigned long vm_pgoff; /* the offset in vm_file corresponding to vm_start */ struct file *vm_file; /* the backing file or NULL */ @@ -188,7 +188,7 @@ index d9851ee..4bde7bf 100644 int vm_usage; /* region usage count (access under nommu_region_sem) */ bool vm_icache_flushed : 1; /* true if the icache has been flushed for -@@ -281,6 +282,7 @@ struct vm_area_struct { +@@ -298,6 +299,7 @@ struct vm_area_struct { unsigned long vm_pgoff; /* Offset (within vm_file) in PAGE_SIZE units, *not* PAGE_CACHE_SIZE */ struct file * vm_file; /* File we map to (can be NULL). */ @@ -197,7 +197,7 @@ index d9851ee..4bde7bf 100644 #ifndef CONFIG_MMU diff --git a/kernel/fork.c b/kernel/fork.c -index 086fe73..003e30c 100644 +index 728d5be..4e4344e 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -412,7 +412,7 @@ static int dup_mmap(struct mm_struct *mm, struct mm_struct *oldmm) @@ -210,7 +210,7 @@ index 086fe73..003e30c 100644 atomic_dec(&inode->i_writecount); mutex_lock(&mapping->i_mmap_mutex); diff --git a/mm/filemap.c b/mm/filemap.c -index ae4846f..3f890ee 100644 +index b7749a9..a6693ca 100644 --- a/mm/filemap.c +++ b/mm/filemap.c @@ -1735,7 +1735,7 @@ int filemap_page_mkwrite(struct vm_area_struct *vma, struct vm_fault *vmf) @@ -261,10 +261,10 @@ index 539eeb9..5e700b1 100644 return error; } diff --git a/mm/memory.c b/mm/memory.c -index d176154..49cafa9 100644 +index 5d9025f..3e3c5d5 100644 --- a/mm/memory.c +++ b/mm/memory.c -@@ -2745,7 +2745,7 @@ reuse: +@@ -2752,7 +2752,7 @@ reuse: set_page_dirty_balance(dirty_page, page_mkwrite); /* file_update_time outside page_lock */ if (vma->vm_file) @@ -273,7 +273,7 @@ index d176154..49cafa9 100644 } put_page(dirty_page); if (page_mkwrite) { -@@ -3456,7 +3456,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, +@@ -3463,7 +3463,7 @@ static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma, /* file_update_time outside page_lock */ if (vma->vm_file && !page_mkwrite) @@ -283,10 +283,10 @@ index d176154..49cafa9 100644 unlock_page(vmf.page); if (anon) diff --git a/mm/mmap.c b/mm/mmap.c -index 9d54851..64ae6ce 100644 +index 834b2d7..91f5699 100644 --- a/mm/mmap.c +++ b/mm/mmap.c -@@ -250,7 +250,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) +@@ -248,7 +248,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) if (vma->vm_ops && vma->vm_ops->close) vma->vm_ops->close(vma); if (vma->vm_file) @@ -295,7 +295,7 @@ index 9d54851..64ae6ce 100644 mpol_put(vma_policy(vma)); kmem_cache_free(vm_area_cachep, vma); return next; -@@ -860,7 +860,7 @@ again: remove_next = 1 + (end > next->vm_end); +@@ -858,7 +858,7 @@ again: remove_next = 1 + (end > next->vm_end); if (remove_next) { if (file) { uprobe_munmap(next, next->vm_start, next->vm_end); @@ -304,7 +304,7 @@ index 9d54851..64ae6ce 100644 } if (next->anon_vma) anon_vma_merge(vma, next); -@@ -1622,8 +1622,8 @@ out: +@@ -1620,8 +1620,8 @@ out: unmap_and_free_vma: if (vm_flags & VM_DENYWRITE) allow_write_access(file); @@ -314,7 +314,7 @@ index 9d54851..64ae6ce 100644 /* Undo any partial mapping done by a device driver. */ unmap_region(mm, vma, prev, vma->vm_start, vma->vm_end); -@@ -2412,7 +2412,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2410,7 +2410,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, goto out_free_mpol; if (new->vm_file) @@ -323,7 +323,7 @@ index 9d54851..64ae6ce 100644 if (new->vm_ops && new->vm_ops->open) new->vm_ops->open(new); -@@ -2431,7 +2431,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, +@@ -2429,7 +2429,7 @@ static int __split_vma(struct mm_struct * mm, struct vm_area_struct * vma, if (new->vm_ops && new->vm_ops->close) new->vm_ops->close(new); if (new->vm_file) @@ -332,7 +332,7 @@ index 9d54851..64ae6ce 100644 unlink_anon_vmas(new); out_free_mpol: mpol_put(vma_policy(new)); -@@ -2828,7 +2828,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, +@@ -2827,7 +2827,7 @@ struct vm_area_struct *copy_vma(struct vm_area_struct **vmap, if (anon_vma_clone(new_vma, vma)) goto out_free_mempol; if (new_vma->vm_file) @@ -359,7 +359,7 @@ index 632df45..02d770e 100644 goto out; down_read(&mm->mmap_sem); diff --git a/mm/nommu.c b/mm/nommu.c -index ecd1f15..d4306cd 100644 +index fec093a..b366e4c 100644 --- a/mm/nommu.c +++ b/mm/nommu.c @@ -652,7 +652,7 @@ static void __put_nommu_region(struct vm_region *region) diff --git a/debian/patches/features/all/aufs3/aufs3-standalone.patch b/debian/patches/features/all/aufs3/aufs3-standalone.patch index 53ebe6caa..55742d712 100644 --- a/debian/patches/features/all/aufs3/aufs3-standalone.patch +++ b/debian/patches/features/all/aufs3/aufs3-standalone.patch @@ -1,36 +1,15 @@ From: J. R. Okajima -Date: Tue Nov 5 13:13:07 2013 +0900 -Subject: aufs3.12 standalone patch -Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/4a7364f2f7c6db8bb880d7aefbeb34efc1d66ad4/tree/ +Date: Wed Dec 18 12:37:33 2013 +0900 +Subject: aufs3.x-rcN standalone patch +Origin: http://sourceforge.net/p/aufs/aufs3-standalone/ci/7b136a27b021da9010d8b6c101939dd298e46be7/tree/ Bug-Debian: http://bugs.debian.org/541828 Patch headers added by debian/patches/features/all/aufs3/gen-patch -aufs3.12 standalone patch +aufs3.x-rcN standalone patch -diff --git a/fs/file_table.c b/fs/file_table.c -index ccd02ee..710c617 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_GPL(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_GPL(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; @@ -41,7 +20,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; } @@ -50,18 +29,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_GPL(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(); } @@ -69,7 +40,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; } @@ -150,10 +121,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; } @@ -162,7 +133,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, @@ -198,7 +169,7 @@ index b9d613e..ba3b618 100644 } +EXPORT_SYMBOL_GPL(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 @@ @@ -209,7 +180,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); } @@ -218,7 +189,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) diff --git a/debian/patches/series b/debian/patches/series index 0a3ebe76d..9446223e0 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -19,15 +19,15 @@ bugfix/all/firmware_class-log-every-success-and-failure.patch bugfix/all/firmware-remove-redundant-log-messages-from-drivers.patch bugfix/all/radeon-firmware-is-required-for-drm-and-kms-on-r600-onward.patch -# # Patches and source files from aufs3 repository, imported with -# # debian/patches/features/all/aufs3/gen-patch. -# features/all/aufs3/aufs3-kbuild.patch -# features/all/aufs3/aufs3-base.patch -# features/all/aufs3/aufs3-mmap.patch -# features/all/aufs3/aufs3-standalone.patch -# features/all/aufs3/aufs3-add.patch -# # Debian-specific changes -# debian/aufs3-mark-as-staging.patch +# Patches and source files from aufs3 repository, imported with +# debian/patches/features/all/aufs3/gen-patch. +features/all/aufs3/aufs3-kbuild.patch +features/all/aufs3/aufs3-base.patch +features/all/aufs3/aufs3-mmap.patch +features/all/aufs3/aufs3-standalone.patch +features/all/aufs3/aufs3-add.patch +# Debian-specific changes +debian/aufs3-mark-as-staging.patch # Change some defaults for security reasons debian/af_802154-Disable-auto-loading-as-mitigation-against.patch