From d2926077620ebb718e7b7e16df9a0657339bf7c7 Mon Sep 17 00:00:00 2001 From: Bruce Ashfield <bruce.ashfield@windriver.com> Date: Thu, 6 Dec 2012 14:47:32 -0500 Subject: [PATCH] unionfs: refresh to 2.5.11 Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> --- ...nionfs-update-show_options-prototype.patch | 33 --- features/unionfs/Unionfs-use-mode_t.patch | 48 ----- ...-change-end_writeback-to-clear_inode.patch | 30 --- ...troduce-unionfs-2.5.11-core-support.patch} | 203 ++++++++++++------ ...eplace-d_alloc_root-with-d_make_root.patch | 10 +- .../unionfs-restore-FD_-utility-defines.patch | 8 +- ...-unionfs-fork-to-align-with-mainline.patch | 8 +- ...nfs-use-proper-accessors-for-i_nlink.patch | 130 ----------- .../unionfs/unionfs-v3.4-build-fixups.patch | 8 +- features/unionfs/unionfs.scc | 6 +- 10 files changed, 160 insertions(+), 324 deletions(-) delete mode 100644 features/unionfs/Unionfs-update-show_options-prototype.patch delete mode 100644 features/unionfs/Unionfs-use-mode_t.patch delete mode 100644 features/unionfs/unionfs-change-end_writeback-to-clear_inode.patch rename features/unionfs/{unionfs-introduce-unionfs-2.5.10-core-support.patch => unionfs-introduce-unionfs-2.5.11-core-support.patch} (98%) delete mode 100644 features/unionfs/unionfs-use-proper-accessors-for-i_nlink.patch diff --git a/features/unionfs/Unionfs-update-show_options-prototype.patch b/features/unionfs/Unionfs-update-show_options-prototype.patch deleted file mode 100644 index 38b286aee..000000000 --- a/features/unionfs/Unionfs-update-show_options-prototype.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 95c79fb2f965f1feb33bffe46c20ddb0b8e9da0d Mon Sep 17 00:00:00 2001 -From: Erez Zadok <ezk@cs.sunysb.edu> -Date: Fri, 10 Feb 2012 15:36:44 -0500 -Subject: [PATCH] Unionfs: update ->show_options prototype - -commit a34b0868fc27524af46ec861de4d85ae07b63ccb from unionfs -upstream - git://git.fsl.cs.sunysb.edu/unionfs-latest.git - -Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu> -Signed-off-by: Liang Li <liang.li@windriver.com> ---- - fs/unionfs/super.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/fs/unionfs/super.c b/fs/unionfs/super.c -index c3ac814..b99f14d 100644 ---- a/fs/unionfs/super.c -+++ b/fs/unionfs/super.c -@@ -965,9 +965,9 @@ static void unionfs_umount_begin(struct super_block *sb) - unionfs_read_unlock(sb); - } - --static int unionfs_show_options(struct seq_file *m, struct vfsmount *mnt) -+static int unionfs_show_options(struct seq_file *m, struct dentry *root) - { -- struct super_block *sb = mnt->mnt_sb; -+ struct super_block *sb = root->d_sb; - int ret = 0; - char *tmp_page; - char *path; --- -1.7.5.4 - diff --git a/features/unionfs/Unionfs-use-mode_t.patch b/features/unionfs/Unionfs-use-mode_t.patch deleted file mode 100644 index 85dbe2f87..000000000 --- a/features/unionfs/Unionfs-use-mode_t.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 2d875e834b4b65761002f5fd28f26867a4b70c57 Mon Sep 17 00:00:00 2001 -From: Erez Zadok <ezk@cs.sunysb.edu> -Date: Fri, 10 Feb 2012 15:36:36 -0500 -Subject: [PATCH] Unionfs: use mode_t - -commit dba53016f577 from unionfs upstream -git://git.fsl.cs.sunysb.edu/unionfs-latest.git - -Signed-off-by: Erez Zadok <ezk@cs.sunysb.edu> -Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com> ---- - fs/unionfs/inode.c | 6 +++--- - 1 files changed, 3 insertions(+), 3 deletions(-) - -diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c -index f016860..c09eb6d 100644 ---- a/fs/unionfs/inode.c -+++ b/fs/unionfs/inode.c -@@ -97,7 +97,7 @@ out: - } - - static int unionfs_create(struct inode *dir, struct dentry *dentry, -- int mode, struct nameidata *nd_unused) -+ umode_t mode, struct nameidata *nd_unused) - { - int err = 0; - struct dentry *lower_dentry = NULL; -@@ -423,7 +423,7 @@ out: - return err; - } - --static int unionfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) -+static int unionfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) - { - int err = 0; - struct dentry *lower_dentry = NULL; -@@ -547,7 +547,7 @@ out: - return err; - } - --static int unionfs_mknod(struct inode *dir, struct dentry *dentry, int mode, -+static int unionfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, - dev_t dev) - { - int err = 0; --- -1.7.5.4 - diff --git a/features/unionfs/unionfs-change-end_writeback-to-clear_inode.patch b/features/unionfs/unionfs-change-end_writeback-to-clear_inode.patch deleted file mode 100644 index 7c2fe71f8..000000000 --- a/features/unionfs/unionfs-change-end_writeback-to-clear_inode.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 33391902abeec66c50b43cfda3da5693a412cb09 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield <bruce.ashfield@windriver.com> -Date: Wed, 20 Jun 2012 21:59:20 -0400 -Subject: [PATCH] unionfs: change end_writeback to clear_inode - -commit: dbd5768f vfs: Rename end_writeback() to clear_inode() -was merged in 3.5-rc1, so unionfs must be updated to the new naming -scheme. - -Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> ---- - fs/unionfs/super.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/fs/unionfs/super.c b/fs/unionfs/super.c -index c3ac814..9cb0551 100644 ---- a/fs/unionfs/super.c -+++ b/fs/unionfs/super.c -@@ -835,7 +835,7 @@ static void unionfs_evict_inode(struct inode *inode) - struct unionfs_dir_state *rdstate; - - truncate_inode_pages(&inode->i_data, 0); -- end_writeback(inode); -+ clear_inode(inode); - - list_for_each_safe(pos, n, &UNIONFS_I(inode)->readdircache) { - rdstate = list_entry(pos, struct unionfs_dir_state, cache); --- -1.7.5.4 - diff --git a/features/unionfs/unionfs-introduce-unionfs-2.5.10-core-support.patch b/features/unionfs/unionfs-introduce-unionfs-2.5.11-core-support.patch similarity index 98% rename from features/unionfs/unionfs-introduce-unionfs-2.5.10-core-support.patch rename to features/unionfs/unionfs-introduce-unionfs-2.5.11-core-support.patch index c2bf188bf..dc086915e 100644 --- a/features/unionfs/unionfs-introduce-unionfs-2.5.10-core-support.patch +++ b/features/unionfs/unionfs-introduce-unionfs-2.5.11-core-support.patch @@ -1,11 +1,86 @@ -From 3def66d1097fc5a010dd0c1ab7837f79bada46d9 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield <bruce.ashfield@windriver.com> -Date: Fri, 27 Jan 2012 09:50:57 -0500 -Subject: [PATCH] unionfs: introduce unionfs 2.5.10 core support +From 1a212030e788ce3f6412198127e545f95b909eb4 Mon Sep 17 00:00:00 2001 +From: Yang Shi <yang.shi@windriver.com> +Date: Wed, 28 Nov 2012 10:44:35 -0800 +Subject: [PATCH 1/5] unionfs: introduce unionfs 2.5.11 core support upstream: http://download.filesystems.org/unionfs/unionfs-2.x-latest/ -Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> +Signed-off-by: Yang Shi <yang.shi@windriver.com> +--- + Documentation/filesystems/00-INDEX | 2 + + Documentation/filesystems/unionfs/00-INDEX | 10 + + Documentation/filesystems/unionfs/concepts.txt | 287 +++++++ + Documentation/filesystems/unionfs/issues.txt | 28 + + Documentation/filesystems/unionfs/rename.txt | 31 + + Documentation/filesystems/unionfs/usage.txt | 134 +++ + MAINTAINERS | 8 + + fs/Kconfig | 1 + + fs/Makefile | 1 + + fs/namei.c | 38 + + fs/splice.c | 22 +- + fs/stack.c | 14 +- + fs/unionfs/Kconfig | 24 + + fs/unionfs/Makefile | 17 + + fs/unionfs/commonfops.c | 901 ++++++++++++++++++++ + fs/unionfs/copyup.c | 899 ++++++++++++++++++++ + fs/unionfs/debug.c | 551 ++++++++++++ + fs/unionfs/dentry.c | 409 +++++++++ + fs/unionfs/dirfops.c | 302 +++++++ + fs/unionfs/dirhelper.c | 158 ++++ + fs/unionfs/fanout.h | 407 +++++++++ + fs/unionfs/file.c | 386 +++++++++ + fs/unionfs/inode.c | 1085 ++++++++++++++++++++++++ + fs/unionfs/lookup.c | 570 +++++++++++++ + fs/unionfs/main.c | 752 ++++++++++++++++ + fs/unionfs/mmap.c | 89 ++ + fs/unionfs/rdstate.c | 285 +++++++ + fs/unionfs/rename.c | 522 ++++++++++++ + fs/unionfs/sioq.c | 101 +++ + fs/unionfs/sioq.h | 91 ++ + fs/unionfs/subr.c | 95 +++ + fs/unionfs/super.c | 1030 ++++++++++++++++++++++ + fs/unionfs/union.h | 681 +++++++++++++++ + fs/unionfs/unlink.c | 278 ++++++ + fs/unionfs/whiteout.c | 601 +++++++++++++ + fs/unionfs/xattr.c | 173 ++++ + include/linux/fs_stack.h | 14 +- + include/linux/magic.h | 2 + + include/linux/namei.h | 3 + + include/linux/splice.h | 5 + + include/linux/union_fs.h | 22 + + security/security.c | 1 + + 42 files changed, 11018 insertions(+), 12 deletions(-) + create mode 100644 Documentation/filesystems/unionfs/00-INDEX + create mode 100644 Documentation/filesystems/unionfs/concepts.txt + create mode 100644 Documentation/filesystems/unionfs/issues.txt + create mode 100644 Documentation/filesystems/unionfs/rename.txt + create mode 100644 Documentation/filesystems/unionfs/usage.txt + create mode 100644 fs/unionfs/Kconfig + create mode 100644 fs/unionfs/Makefile + create mode 100644 fs/unionfs/commonfops.c + create mode 100644 fs/unionfs/copyup.c + create mode 100644 fs/unionfs/debug.c + create mode 100644 fs/unionfs/dentry.c + create mode 100644 fs/unionfs/dirfops.c + create mode 100644 fs/unionfs/dirhelper.c + create mode 100644 fs/unionfs/fanout.h + create mode 100644 fs/unionfs/file.c + create mode 100644 fs/unionfs/inode.c + create mode 100644 fs/unionfs/lookup.c + create mode 100644 fs/unionfs/main.c + create mode 100644 fs/unionfs/mmap.c + create mode 100644 fs/unionfs/rdstate.c + create mode 100644 fs/unionfs/rename.c + create mode 100644 fs/unionfs/sioq.c + create mode 100644 fs/unionfs/sioq.h + create mode 100644 fs/unionfs/subr.c + create mode 100644 fs/unionfs/super.c + create mode 100644 fs/unionfs/union.h + create mode 100644 fs/unionfs/unlink.c + create mode 100644 fs/unionfs/whiteout.c + create mode 100644 fs/unionfs/xattr.c + create mode 100644 include/linux/union_fs.h + diff --git a/Documentation/filesystems/00-INDEX b/Documentation/filesystems/00-INDEX index 8c624a1..4aa288b 100644 --- a/Documentation/filesystems/00-INDEX @@ -540,12 +615,12 @@ index 0000000..1adde69 + +For more information, see <http://unionfs.filesystems.org/>. diff --git a/MAINTAINERS b/MAINTAINERS -index fdc0119..91cc98a 100644 +index a60009d..ed879dc 100644 --- a/MAINTAINERS +++ b/MAINTAINERS -@@ -7065,6 +7065,14 @@ S: Supported - F: Documentation/scsi/ufs.txt - F: drivers/scsi/ufs/ +@@ -6883,6 +6883,14 @@ F: Documentation/cdrom/ + F: drivers/cdrom/cdrom.c + F: include/linux/cdrom.h +UNIONFS +P: Erez Zadok @@ -583,19 +658,19 @@ index 79b94eb..d094e94 100644 obj-$(CONFIG_NFS_FS) += nfs/ obj-$(CONFIG_EXPORTFS) += exportfs/ diff --git a/fs/namei.c b/fs/namei.c -index dd1ed1b..5e71f1b 100644 +index c427919..de81292 100644 --- a/fs/namei.c +++ b/fs/namei.c -@@ -506,6 +506,7 @@ err_root: - spin_unlock(&fs->lock); - return -ECHILD; +@@ -491,6 +491,7 @@ void release_open_intent(struct nameidata *nd) + fput(file); + } } +EXPORT_SYMBOL_GPL(release_open_intent); - static inline int d_revalidate(struct dentry *dentry, unsigned int flags) + static inline int d_revalidate(struct dentry *dentry, struct nameidata *nd) { -@@ -2098,6 +2099,42 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) - return __lookup_hash(&this, base, 0); +@@ -1883,6 +1884,42 @@ struct dentry *lookup_one_len(const char *name, struct dentry *base, int len) + return __lookup_hash(&this, base, NULL); } +/* pass nameidata from caller (useful for NFS) */ @@ -637,7 +712,7 @@ index dd1ed1b..5e71f1b 100644 int user_path_at_empty(int dfd, const char __user *name, unsigned flags, struct path *path, int *empty) { -@@ -3975,6 +4012,7 @@ EXPORT_SYMBOL(get_write_access); /* binfmt_aout */ +@@ -3476,6 +3513,7 @@ EXPORT_SYMBOL(get_write_access); /* binfmt_aout */ EXPORT_SYMBOL(getname); EXPORT_SYMBOL(lock_rename); EXPORT_SYMBOL(lookup_one_len); @@ -646,10 +721,10 @@ index dd1ed1b..5e71f1b 100644 EXPORT_SYMBOL(page_put_link); EXPORT_SYMBOL(page_readlink); diff --git a/fs/splice.c b/fs/splice.c -index 41514dd..aae192a 100644 +index 5cac690..712af33 100644 --- a/fs/splice.c +++ b/fs/splice.c -@@ -1093,8 +1093,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); +@@ -1088,8 +1088,8 @@ EXPORT_SYMBOL(generic_splice_sendpage); /* * Attempt to initiate a splice from pipe to file. */ @@ -660,7 +735,7 @@ index 41514dd..aae192a 100644 { ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); -@@ -1117,13 +1117,14 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, +@@ -1112,13 +1112,14 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out, return splice_write(pipe, out, ppos, len, flags); } @@ -678,7 +753,7 @@ index 41514dd..aae192a 100644 { ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); -@@ -1143,6 +1144,7 @@ static long do_splice_to(struct file *in, loff_t *ppos, +@@ -1138,6 +1139,7 @@ static long do_splice_to(struct file *in, loff_t *ppos, return splice_read(in, ppos, pipe, len, flags); } @@ -686,7 +761,7 @@ index 41514dd..aae192a 100644 /** * splice_direct_to_actor - splices data directly between two non-pipes -@@ -1212,7 +1214,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, +@@ -1207,7 +1209,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd, size_t read_len; loff_t pos = sd->pos, prev_pos = pos; @@ -695,7 +770,7 @@ index 41514dd..aae192a 100644 if (unlikely(ret <= 0)) goto out_release; -@@ -1271,8 +1273,8 @@ static int direct_splice_actor(struct pipe_inode_info *pipe, +@@ -1266,8 +1268,8 @@ static int direct_splice_actor(struct pipe_inode_info *pipe, { struct file *file = sd->u.file; @@ -706,7 +781,7 @@ index 41514dd..aae192a 100644 } /** -@@ -1357,7 +1359,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, +@@ -1352,7 +1354,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, } else off = &out->f_pos; @@ -715,7 +790,7 @@ index 41514dd..aae192a 100644 if (off_out && copy_to_user(off_out, off, sizeof(loff_t))) ret = -EFAULT; -@@ -1377,7 +1379,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, +@@ -1372,7 +1374,7 @@ static long do_splice(struct file *in, loff_t __user *off_in, } else off = &in->f_pos; @@ -782,11 +857,11 @@ index 0000000..f3c1ac4 + If you say Y here, you can turn on debugging output from Unionfs. diff --git a/fs/unionfs/Makefile b/fs/unionfs/Makefile new file mode 100644 -index 0000000..623e2b5 +index 0000000..60b6060 --- /dev/null +++ b/fs/unionfs/Makefile @@ -0,0 +1,17 @@ -+UNIONFS_VERSION="2.5.10 (for 3.1.0-rc4)" ++UNIONFS_VERSION="2.5.11 (for 3.3.0-rc3)" + +EXTRA_CFLAGS += -DUNIONFS_VERSION=\"$(UNIONFS_VERSION)\" + @@ -2617,10 +2692,10 @@ index 0000000..078ca27 +} diff --git a/fs/unionfs/debug.c b/fs/unionfs/debug.c new file mode 100644 -index 0000000..c07f697 +index 0000000..21ce90c --- /dev/null +++ b/fs/unionfs/debug.c -@@ -0,0 +1,549 @@ +@@ -0,0 +1,551 @@ +/* + * Copyright (c) 2003-2011 Erez Zadok + * Copyright (c) 2005-2007 Josef 'Jeff' Sipek @@ -2633,6 +2708,7 @@ index 0000000..c07f697 + */ + +#include "union.h" ++#include "../mount.h" + +/* + * Helper debugging functions for maintainers (and for users to report back @@ -3068,17 +3144,18 @@ index 0000000..c07f697 + +static unsigned int __mnt_get_count(struct vfsmount *mnt) +{ ++ struct mount *m = real_mount(mnt); +#ifdef CONFIG_SMP + unsigned int count = 0; + int cpu; + + for_each_possible_cpu(cpu) { -+ count += per_cpu_ptr(mnt->mnt_pcp, cpu)->mnt_count; ++ count += per_cpu_ptr(m->mnt_pcp, cpu)->mnt_count; + } + + return count; +#else -+ return mnt->mnt_count; ++ return m->mnt_count; +#endif +} + @@ -4864,10 +4941,10 @@ index 0000000..f583c8f +}; diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c new file mode 100644 -index 0000000..83cb681 +index 0000000..dd522c2 --- /dev/null +++ b/fs/unionfs/inode.c -@@ -0,0 +1,1084 @@ +@@ -0,0 +1,1085 @@ +/* + * Copyright (c) 2003-2011 Erez Zadok + * Copyright (c) 2003-2006 Charles P. Wright @@ -4967,7 +5044,7 @@ index 0000000..83cb681 +} + +static int unionfs_create(struct inode *dir, struct dentry *dentry, -+ int mode, struct nameidata *nd_unused) ++ umode_t mode, struct nameidata *nd_unused) +{ + int err = 0; + struct dentry *lower_dentry = NULL; @@ -5012,7 +5089,7 @@ index 0000000..83cb681 + fsstack_copy_inode_size(dir, + lower_parent_dentry->d_inode); + /* update no. of links on parent directory */ -+ dir->i_nlink = unionfs_get_nlinks(dir); ++ set_nlink(dir, unionfs_get_nlinks(dir)); + } + } + @@ -5123,7 +5200,7 @@ index 0000000..83cb681 + lower_dir_dentry = dget_parent(lower_new_dentry); + fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); + dput(lower_dir_dentry); -+ dir->i_nlink = unionfs_get_nlinks(dir); ++ set_nlink(dir, unionfs_get_nlinks(dir)); + err = 0; + } + if (err) @@ -5198,7 +5275,8 @@ index 0000000..83cb681 + fsstack_copy_inode_size(dir, lower_new_dentry->d_parent->d_inode); + + /* propagate number of hard-links */ -+ old_dentry->d_inode->i_nlink = unionfs_get_nlinks(old_dentry->d_inode); ++ set_nlink(old_dentry->d_inode, ++ unionfs_get_nlinks(old_dentry->d_inode)); + /* new dentry's ctime may have changed due to hard-link counts */ + unionfs_copy_attr_times(new_dentry->d_inode); + @@ -5272,7 +5350,7 @@ index 0000000..83cb681 + fsstack_copy_inode_size(dir, + lower_parent_dentry->d_inode); + /* update no. of links on parent directory */ -+ dir->i_nlink = unionfs_get_nlinks(dir); ++ set_nlink(dir, unionfs_get_nlinks(dir)); + } + } + @@ -5293,7 +5371,7 @@ index 0000000..83cb681 + return err; +} + -+static int unionfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) ++static int unionfs_mkdir(struct inode *dir, struct dentry *dentry, umode_t mode) +{ + int err = 0; + struct dentry *lower_dentry = NULL; @@ -5384,7 +5462,7 @@ index 0000000..83cb681 + lower_parent_dentry->d_inode); + + /* update number of links on parent directory */ -+ dir->i_nlink = unionfs_get_nlinks(dir); ++ set_nlink(dir, unionfs_get_nlinks(dir)); + } + + err = make_dir_opaque(dentry, dbstart(dentry)); @@ -5417,7 +5495,7 @@ index 0000000..83cb681 + return err; +} + -+static int unionfs_mknod(struct inode *dir, struct dentry *dentry, int mode, ++static int unionfs_mknod(struct inode *dir, struct dentry *dentry, umode_t mode, + dev_t dev) +{ + int err = 0; @@ -5464,7 +5542,7 @@ index 0000000..83cb681 + fsstack_copy_inode_size(dir, + lower_parent_dentry->d_inode); + /* update no. of links on parent directory */ -+ dir->i_nlink = unionfs_get_nlinks(dir); ++ set_nlink(dir, unionfs_get_nlinks(dir)); + } + } + @@ -6530,7 +6608,7 @@ index 0000000..041d674 +} diff --git a/fs/unionfs/main.c b/fs/unionfs/main.c new file mode 100644 -index 0000000..87cd1fc +index 0000000..ee78f1d --- /dev/null +++ b/fs/unionfs/main.c @@ -0,0 +1,752 @@ @@ -7225,7 +7303,7 @@ index 0000000..87cd1fc + struct dentry *dentry; + + dentry = mount_nodev(fs_type, flags, raw_data, unionfs_read_super); -+ if (!PTR_ERR(dentry)) ++ if (!IS_ERR(dentry)) + UNIONFS_SB(dentry->d_sb)->dev_name = + kstrdup(dev_name, GFP_KERNEL); + return dentry; @@ -7674,7 +7752,7 @@ index 0000000..59b7333 +} diff --git a/fs/unionfs/rename.c b/fs/unionfs/rename.c new file mode 100644 -index 0000000..c8ab910 +index 0000000..ce85b84 --- /dev/null +++ b/fs/unionfs/rename.c @@ -0,0 +1,522 @@ @@ -7892,8 +7970,8 @@ index 0000000..c8ab910 + fsstack_copy_attr_times(new_parent->d_inode, + unlink_dir_dentry->d_inode); + /* propagate number of hard-links */ -+ new_parent->d_inode->i_nlink = -+ unionfs_get_nlinks(new_parent->d_inode); ++ set_nlink(new_parent->d_inode, ++ unionfs_get_nlinks(new_parent->d_inode)); + + unlock_dir(unlink_dir_dentry); + if (!err) { @@ -8406,7 +8484,7 @@ index 0000000..c2dfb94 +#endif /* not _SIOQ_H */ diff --git a/fs/unionfs/subr.c b/fs/unionfs/subr.c new file mode 100644 -index 0000000..bdca2f7 +index 0000000..e7fc5a5 --- /dev/null +++ b/fs/unionfs/subr.c @@ -0,0 +1,95 @@ @@ -8503,11 +8581,11 @@ index 0000000..bdca2f7 + * Update the nlinks AFTER updating the above fields, because the + * get_links callback may depend on them. + */ -+ dest->i_nlink = unionfs_get_nlinks(dest); ++ set_nlink(dest, unionfs_get_nlinks(dest)); +} diff --git a/fs/unionfs/super.c b/fs/unionfs/super.c new file mode 100644 -index 0000000..c3ac814 +index 0000000..b99f14d --- /dev/null +++ b/fs/unionfs/super.c @@ -0,0 +1,1030 @@ @@ -9478,9 +9556,9 @@ index 0000000..c3ac814 + unionfs_read_unlock(sb); +} + -+static int unionfs_show_options(struct seq_file *m, struct vfsmount *mnt) ++static int unionfs_show_options(struct seq_file *m, struct dentry *root) +{ -+ struct super_block *sb = mnt->mnt_sb; ++ struct super_block *sb = root->d_sb; + int ret = 0; + char *tmp_page; + char *path; @@ -10230,7 +10308,7 @@ index 0000000..8e7fcfb +#endif /* not _UNION_H_ */ diff --git a/fs/unionfs/unlink.c b/fs/unionfs/unlink.c new file mode 100644 -index 0000000..bf447bb +index 0000000..25943a5 --- /dev/null +++ b/fs/unionfs/unlink.c @@ -0,0 +1,278 @@ @@ -10426,7 +10504,7 @@ index 0000000..bf447bb + + fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); + /* propagate number of hard-links */ -+ dentry->d_inode->i_nlink = unionfs_get_nlinks(dentry->d_inode); ++ set_nlink(dentry->d_inode, unionfs_get_nlinks(dentry->d_inode)); + +out: + if (lower_dir_dentry) @@ -11337,13 +11415,13 @@ index e15192c..1d7370b 100644 #define CGROUP_SUPER_MAGIC 0x27e0eb diff --git a/include/linux/namei.h b/include/linux/namei.h -index 4bf19d8..d9d775c 100644 +index ffc0213..99802c3 100644 --- a/include/linux/namei.h +++ b/include/linux/namei.h -@@ -71,8 +71,11 @@ extern void done_path_create(struct path *, struct dentry *); - extern struct dentry *kern_path_locked(const char *, struct path *); - extern int vfs_path_lookup(struct dentry *, struct vfsmount *, - const char *, unsigned int, struct path *); +@@ -84,8 +84,11 @@ extern int vfs_path_lookup(struct dentry *, struct vfsmount *, + + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, + int (*open)(struct inode *, struct file *)); +extern void release_open_intent(struct nameidata *); extern struct dentry *lookup_one_len(const char *, struct dentry *, int); @@ -11397,10 +11475,10 @@ index 0000000..c84d97e +#endif /* _LINUX_UNIONFS_H */ + diff --git a/security/security.c b/security/security.c -index 860aeb3..efe2b05 100644 +index bf619ff..57742c6 100644 --- a/security/security.c +++ b/security/security.c -@@ -530,6 +530,7 @@ int security_inode_permission(struct inode *inode, int mask) +@@ -526,6 +526,7 @@ int security_inode_permission(struct inode *inode, int mask) return 0; return security_ops->inode_permission(inode, mask); } @@ -11408,3 +11486,6 @@ index 860aeb3..efe2b05 100644 int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { +-- +1.7.10.4 + diff --git a/features/unionfs/unionfs-replace-d_alloc_root-with-d_make_root.patch b/features/unionfs/unionfs-replace-d_alloc_root-with-d_make_root.patch index fe49c6028..cc32137ba 100644 --- a/features/unionfs/unionfs-replace-d_alloc_root-with-d_make_root.patch +++ b/features/unionfs/unionfs-replace-d_alloc_root-with-d_make_root.patch @@ -1,17 +1,17 @@ -From 0310ad586c23871802aabff360c54505f62ea56f Mon Sep 17 00:00:00 2001 +From e408aad075b70f35b882667afeb1ccc96e38df77 Mon Sep 17 00:00:00 2001 From: Bruce Ashfield <bruce.ashfield@windriver.com> Date: Thu, 29 Mar 2012 16:09:45 -0400 -Subject: [PATCH] unionfs: replace d_alloc_root with d_make_root +Subject: [PATCH 2/5] unionfs: replace d_alloc_root with d_make_root d_alloc_root has been removed, updating to the replacement d_make_root Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> --- fs/unionfs/main.c | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) + 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/fs/unionfs/main.c b/fs/unionfs/main.c -index 87cd1fc..fb18ef4 100644 +index ee78f1d..0077ebe 100644 --- a/fs/unionfs/main.c +++ b/fs/unionfs/main.c @@ -599,7 +599,7 @@ static int unionfs_read_super(struct super_block *sb, void *raw_data, @@ -33,5 +33,5 @@ index 87cd1fc..fb18ef4 100644 */ d_rehash(sb->s_root); -- -1.7.5.4 +1.7.10.4 diff --git a/features/unionfs/unionfs-restore-FD_-utility-defines.patch b/features/unionfs/unionfs-restore-FD_-utility-defines.patch index 4a5fd8617..8dd4e686a 100644 --- a/features/unionfs/unionfs-restore-FD_-utility-defines.patch +++ b/features/unionfs/unionfs-restore-FD_-utility-defines.patch @@ -1,7 +1,7 @@ -From 88ed4b4c4b921041c1b387cac3f64c3b2fe60c35 Mon Sep 17 00:00:00 2001 +From 6ca221704dac6f9a267f8846ec2cc514de5c8b67 Mon Sep 17 00:00:00 2001 From: Bruce Ashfield <bruce.ashfield@windriver.com> Date: Tue, 21 Aug 2012 22:14:49 -0400 -Subject: [PATCH] unionfs: restore FD_* utility defines +Subject: [PATCH 5/5] unionfs: restore FD_* utility defines commit 27cd8f513 [posix_types.h: Cleanup stale __NFDBITS and related definition] removes the defintions for: @@ -20,7 +20,7 @@ by unionfs until full replacements are found. Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> --- fs/unionfs/union.h | 9 +++++++++ - 1 files changed, 9 insertions(+), 0 deletions(-) + 1 file changed, 9 insertions(+) diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h index 2d80523..b0c488e 100644 @@ -43,5 +43,5 @@ index 2d80523..b0c488e 100644 { __set_bit(__fd, __fdsetp->fds_bits); -- -1.7.5.4 +1.7.10.4 diff --git a/features/unionfs/unionfs-update-unionfs-fork-to-align-with-mainline.patch b/features/unionfs/unionfs-update-unionfs-fork-to-align-with-mainline.patch index 3bc691b11..73fafd407 100644 --- a/features/unionfs/unionfs-update-unionfs-fork-to-align-with-mainline.patch +++ b/features/unionfs/unionfs-update-unionfs-fork-to-align-with-mainline.patch @@ -1,7 +1,7 @@ -From 9f0fe583ffc5116584d8c4800a7fa28bb4ff9b09 Mon Sep 17 00:00:00 2001 +From be59c0838d25c4a51951070ee236f064af538b97 Mon Sep 17 00:00:00 2001 From: Liang Li <liang.li@windriver.com> Date: Thu, 16 Aug 2012 21:25:01 +0800 -Subject: [PATCH] unionfs: update unionfs fork to align with mainline +Subject: [PATCH 4/5] unionfs: update unionfs fork to align with mainline mainline commit 0145acc [vfs: uninline full_name_hash] changes the interface to full_name_hash, so unionfs fork must be updated. @@ -17,7 +17,7 @@ adopted fast hash function might have hash collision issue on x86. Signed-off-by: Liang Li <liang.li@windriver.com> --- fs/namei.c | 6 ++---- - 1 files changed, 2 insertions(+), 4 deletions(-) + 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/fs/namei.c b/fs/namei.c index de81292..afb6cc8 100644 @@ -49,5 +49,5 @@ index de81292..afb6cc8 100644 * See if the low-level filesystem might want * to use its own hash.. -- -1.7.5.4 +1.7.10.4 diff --git a/features/unionfs/unionfs-use-proper-accessors-for-i_nlink.patch b/features/unionfs/unionfs-use-proper-accessors-for-i_nlink.patch deleted file mode 100644 index 937a93f64..000000000 --- a/features/unionfs/unionfs-use-proper-accessors-for-i_nlink.patch +++ /dev/null @@ -1,130 +0,0 @@ -From 097ce909145fbf5998e12caa68c6641f15fc8718 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield <bruce.ashfield@windriver.com> -Date: Fri, 27 Jan 2012 11:34:05 -0500 -Subject: [PATCH] unionfs: use proper accessors for i_nlink - -commit: a78ef704a8dd430225955f0709b22d4a6ba21deb changed the semantics -for accessing i_nlink. - - Author: Miklos Szeredi <mszeredi@suse.cz> - Date: Fri Oct 28 14:13:30 2011 +0200 - - vfs: protect i_nlink - - Prevent direct modification of i_nlink by making it const and adding a - non-const __i_nlink alias. - - Signed-off-by: Miklos Szeredi <mszeredi@suse.cz> - Tested-by: Toshiyuki Okajima <toshi.okajima@jp.fujitsu.com> - Signed-off-by: Christoph Hellwig <hch@lst.de> - -Updating unionfs to use the new accessor function.y - -Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> ---- - fs/unionfs/inode.c | 12 ++++++------ - fs/unionfs/rename.c | 4 ++-- - fs/unionfs/subr.c | 2 +- - fs/unionfs/unlink.c | 2 +- - 4 files changed, 10 insertions(+), 10 deletions(-) - -diff --git a/fs/unionfs/inode.c b/fs/unionfs/inode.c -index 83cb681..f016860 100644 ---- a/fs/unionfs/inode.c -+++ b/fs/unionfs/inode.c -@@ -142,7 +142,7 @@ static int unionfs_create(struct inode *dir, struct dentry *dentry, - fsstack_copy_inode_size(dir, - lower_parent_dentry->d_inode); - /* update no. of links on parent directory */ -- dir->i_nlink = unionfs_get_nlinks(dir); -+ set_nlink(dir,unionfs_get_nlinks(dir)); - } - } - -@@ -253,7 +253,7 @@ static int unionfs_link(struct dentry *old_dentry, struct inode *dir, - lower_dir_dentry = dget_parent(lower_new_dentry); - fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); - dput(lower_dir_dentry); -- dir->i_nlink = unionfs_get_nlinks(dir); -+ set_nlink(dir,unionfs_get_nlinks(dir)); - err = 0; - } - if (err) -@@ -328,7 +328,7 @@ check_link: - fsstack_copy_inode_size(dir, lower_new_dentry->d_parent->d_inode); - - /* propagate number of hard-links */ -- old_dentry->d_inode->i_nlink = unionfs_get_nlinks(old_dentry->d_inode); -+ set_nlink(old_dentry->d_inode,unionfs_get_nlinks(old_dentry->d_inode)); - /* new dentry's ctime may have changed due to hard-link counts */ - unionfs_copy_attr_times(new_dentry->d_inode); - -@@ -402,7 +402,7 @@ static int unionfs_symlink(struct inode *dir, struct dentry *dentry, - fsstack_copy_inode_size(dir, - lower_parent_dentry->d_inode); - /* update no. of links on parent directory */ -- dir->i_nlink = unionfs_get_nlinks(dir); -+ set_nlink(dir,unionfs_get_nlinks(dir)); - } - } - -@@ -514,7 +514,7 @@ static int unionfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) - lower_parent_dentry->d_inode); - - /* update number of links on parent directory */ -- dir->i_nlink = unionfs_get_nlinks(dir); -+ set_nlink(dir,unionfs_get_nlinks(dir)); - } - - err = make_dir_opaque(dentry, dbstart(dentry)); -@@ -594,7 +594,7 @@ static int unionfs_mknod(struct inode *dir, struct dentry *dentry, int mode, - fsstack_copy_inode_size(dir, - lower_parent_dentry->d_inode); - /* update no. of links on parent directory */ -- dir->i_nlink = unionfs_get_nlinks(dir); -+ set_nlink(dir,unionfs_get_nlinks(dir)); - } - } - -diff --git a/fs/unionfs/rename.c b/fs/unionfs/rename.c -index c8ab910..ce85b84 100644 ---- a/fs/unionfs/rename.c -+++ b/fs/unionfs/rename.c -@@ -212,8 +212,8 @@ static int do_unionfs_rename(struct inode *old_dir, - fsstack_copy_attr_times(new_parent->d_inode, - unlink_dir_dentry->d_inode); - /* propagate number of hard-links */ -- new_parent->d_inode->i_nlink = -- unionfs_get_nlinks(new_parent->d_inode); -+ set_nlink(new_parent->d_inode, -+ unionfs_get_nlinks(new_parent->d_inode)); - - unlock_dir(unlink_dir_dentry); - if (!err) { -diff --git a/fs/unionfs/subr.c b/fs/unionfs/subr.c -index bdca2f7..9dad537 100644 ---- a/fs/unionfs/subr.c -+++ b/fs/unionfs/subr.c -@@ -91,5 +91,5 @@ void unionfs_copy_attr_all(struct inode *dest, - * Update the nlinks AFTER updating the above fields, because the - * get_links callback may depend on them. - */ -- dest->i_nlink = unionfs_get_nlinks(dest); -+ set_nlink(dest,unionfs_get_nlinks(dest)); - } -diff --git a/fs/unionfs/unlink.c b/fs/unionfs/unlink.c -index bf447bb..b607ba3 100644 ---- a/fs/unionfs/unlink.c -+++ b/fs/unionfs/unlink.c -@@ -190,7 +190,7 @@ static int unionfs_rmdir_first(struct inode *dir, struct dentry *dentry, - - fsstack_copy_attr_times(dir, lower_dir_dentry->d_inode); - /* propagate number of hard-links */ -- dentry->d_inode->i_nlink = unionfs_get_nlinks(dentry->d_inode); -+ set_nlink(dentry->d_inode,unionfs_get_nlinks(dentry->d_inode)); - - out: - if (lower_dir_dentry) --- -1.7.4.1 - diff --git a/features/unionfs/unionfs-v3.4-build-fixups.patch b/features/unionfs/unionfs-v3.4-build-fixups.patch index f768d2a95..171493b77 100644 --- a/features/unionfs/unionfs-v3.4-build-fixups.patch +++ b/features/unionfs/unionfs-v3.4-build-fixups.patch @@ -1,12 +1,12 @@ -From d77100442e982e6418a115b6004b092014dad1f8 Mon Sep 17 00:00:00 2001 +From 18f0cb5ab10b6debd164b9b4c76f29a6c1bca87e Mon Sep 17 00:00:00 2001 From: Bruce Ashfield <bruce.ashfield@windriver.com> Date: Mon, 2 Apr 2012 11:36:07 -0400 -Subject: [PATCH] unionfs: v3.4 build fixups +Subject: [PATCH 3/5] unionfs: v3.4 build fixups Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com> --- fs/unionfs/union.h | 22 ++++++++++++++++++++-- - 1 files changed, 20 insertions(+), 2 deletions(-) + 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/fs/unionfs/union.h b/fs/unionfs/union.h index 8e7fcfb..2d80523 100644 @@ -47,5 +47,5 @@ index 8e7fcfb..2d80523 100644 + #endif /* not _UNION_H_ */ -- -1.7.5.4 +1.7.10.4 diff --git a/features/unionfs/unionfs.scc b/features/unionfs/unionfs.scc index a5e272701..965ccb310 100644 --- a/features/unionfs/unionfs.scc +++ b/features/unionfs/unionfs.scc @@ -1,11 +1,7 @@ kconf non-hardware unionfs.cfg -patch unionfs-introduce-unionfs-2.5.10-core-support.patch -patch unionfs-use-proper-accessors-for-i_nlink.patch +patch unionfs-introduce-unionfs-2.5.11-core-support.patch patch unionfs-replace-d_alloc_root-with-d_make_root.patch patch unionfs-v3.4-build-fixups.patch -patch unionfs-change-end_writeback-to-clear_inode.patch -patch Unionfs-update-show_options-prototype.patch -patch Unionfs-use-mode_t.patch patch unionfs-update-unionfs-fork-to-align-with-mainline.patch patch unionfs-restore-FD_-utility-defines.patch -- GitLab