SOURCES (LINUX_2_6): kernel-unionfs.patch - updated for 2.6.27.
pluto
pluto at pld-linux.org
Sun Oct 19 19:11:30 CEST 2008
Author: pluto Date: Sun Oct 19 17:11:30 2008 GMT
Module: SOURCES Tag: LINUX_2_6
---- Log message:
- updated for 2.6.27.
---- Files affected:
SOURCES:
kernel-unionfs.patch (1.1.2.2 -> 1.1.2.3)
---- Diffs:
================================================================
Index: SOURCES/kernel-unionfs.patch
diff -u SOURCES/kernel-unionfs.patch:1.1.2.2 SOURCES/kernel-unionfs.patch:1.1.2.3
--- SOURCES/kernel-unionfs.patch:1.1.2.2 Thu Sep 11 23:07:55 2008
+++ SOURCES/kernel-unionfs.patch Sun Oct 19 19:11:24 2008
@@ -532,10 +532,10 @@
+
+For more information, see <http://unionfs.filesystems.org/>.
diff --git a/MAINTAINERS b/MAINTAINERS
-index 56a2f67..26a2176 100644
+index 0a613cb..d811b00 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -4093,6 +4093,14 @@ L: linux-kernel at vger.kernel.org
+@@ -4144,6 +4144,14 @@ L: linux-kernel at vger.kernel.org
W: http://www.kernel.dk
S: Maintained
@@ -551,10 +551,10 @@
P: Oliver Neukum
M: oliver at neukum.name
diff --git a/fs/Kconfig b/fs/Kconfig
-index 2694648..ee32927 100644
+index abccb5d..3d9310a 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
-@@ -1031,6 +1031,47 @@ config CONFIGFS_FS
+@@ -981,6 +981,47 @@ config CONFIGFS_FS
endmenu
@@ -602,7 +602,7 @@
menu "Miscellaneous filesystems"
config ADFS_FS
-@@ -1083,18 +1124,6 @@ config AFFS_FS
+@@ -1033,18 +1074,6 @@ config AFFS_FS
To compile this file system support as a module, choose M here: the
module will be called affs. If unsure, say N.
@@ -622,10 +622,10 @@
tristate "Apple Macintosh file system support (EXPERIMENTAL)"
depends on BLOCK && EXPERIMENTAL
diff --git a/fs/Makefile b/fs/Makefile
-index 1e7a11b..dadf53b 100644
+index a1482a5..9bf3915 100644
--- a/fs/Makefile
+++ b/fs/Makefile
-@@ -85,6 +85,7 @@ obj-$(CONFIG_ISO9660_FS) += isofs/
+@@ -86,6 +86,7 @@ obj-$(CONFIG_ISO9660_FS) += isofs/
obj-$(CONFIG_HFSPLUS_FS) += hfsplus/ # Before hfs to find wrapped HFS+
obj-$(CONFIG_HFS_FS) += hfs/
obj-$(CONFIG_ECRYPT_FS) += ecryptfs/
@@ -647,10 +647,10 @@
out:
return rc;
diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c
-index c92cc1c..71fcaea 100644
+index 89209f0..d99a83e 100644
--- a/fs/ecryptfs/inode.c
+++ b/fs/ecryptfs/inode.c
-@@ -570,9 +570,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
+@@ -589,9 +589,9 @@ ecryptfs_rename(struct inode *old_dir, struct dentry *old_dentry,
lower_new_dir_dentry->d_inode, lower_new_dentry);
if (rc)
goto out_lock;
@@ -662,7 +662,7 @@
out_lock:
unlock_rename(lower_old_dir_dentry, lower_new_dir_dentry);
dput(lower_new_dentry->d_parent);
-@@ -907,7 +907,7 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
+@@ -913,7 +913,7 @@ static int ecryptfs_setattr(struct dentry *dentry, struct iattr *ia)
rc = notify_change(lower_dentry, ia);
mutex_unlock(&lower_dentry->d_inode->i_mutex);
out:
@@ -672,10 +672,10 @@
}
diff --git a/fs/ecryptfs/main.c b/fs/ecryptfs/main.c
-index d603631..59daba3 100644
+index 448dfd5..db2db5d 100644
--- a/fs/ecryptfs/main.c
+++ b/fs/ecryptfs/main.c
-@@ -211,7 +211,7 @@ int ecryptfs_interpose(struct dentry *lower_dentry, struct dentry *dentry,
+@@ -197,7 +197,7 @@ int ecryptfs_interpose(struct dentry *lower_dentry, struct dentry *dentry,
d_add(dentry, inode);
else
d_instantiate(dentry, inode);
@@ -685,10 +685,10 @@
* other metadata */
fsstack_copy_inode_size(inode, lower_inode);
diff --git a/fs/namei.c b/fs/namei.c
-index 01e67dd..b51fde0 100644
+index 4ea63ed..3c8e0d6 100644
--- a/fs/namei.c
+++ b/fs/namei.c
-@@ -404,6 +404,7 @@ void release_open_intent(struct nameidata *nd)
+@@ -392,6 +392,7 @@ void release_open_intent(struct nameidata *nd)
else
fput(nd->intent.open.file);
}
@@ -697,10 +697,10 @@
static inline struct dentry *
do_revalidate(struct dentry *dentry, struct nameidata *nd)
diff --git a/fs/splice.c b/fs/splice.c
-index aa5f6f6..4282fdf 100644
+index 1bbc6f4..7de91ce 100644
--- a/fs/splice.c
+++ b/fs/splice.c
-@@ -878,8 +878,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
+@@ -887,8 +887,8 @@ EXPORT_SYMBOL(generic_splice_sendpage);
/*
* Attempt to initiate a splice from pipe to file.
*/
@@ -711,7 +711,7 @@
{
int ret;
-@@ -895,13 +895,14 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
+@@ -904,13 +904,14 @@ static long do_splice_from(struct pipe_inode_info *pipe, struct file *out,
return out->f_op->splice_write(pipe, out, ppos, len, flags);
}
@@ -729,7 +729,7 @@
{
int ret;
-@@ -917,6 +918,7 @@ static long do_splice_to(struct file *in, loff_t *ppos,
+@@ -926,6 +927,7 @@ static long do_splice_to(struct file *in, loff_t *ppos,
return in->f_op->splice_read(in, ppos, pipe, len, flags);
}
@@ -737,7 +737,7 @@
/**
* splice_direct_to_actor - splices data directly between two non-pipes
-@@ -986,7 +988,7 @@ ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
+@@ -995,7 +997,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;
@@ -746,7 +746,7 @@
if (unlikely(ret <= 0))
goto out_release;
-@@ -1045,7 +1047,7 @@ static int direct_splice_actor(struct pipe_inode_info *pipe,
+@@ -1054,7 +1056,7 @@ static int direct_splice_actor(struct pipe_inode_info *pipe,
{
struct file *file = sd->u.file;
@@ -755,7 +755,7 @@
}
/**
-@@ -1119,7 +1121,7 @@ static long do_splice(struct file *in, loff_t __user *off_in,
+@@ -1128,7 +1130,7 @@ static long do_splice(struct file *in, loff_t __user *off_in,
} else
off = &out->f_pos;
@@ -764,7 +764,7 @@
if (off_out && copy_to_user(off_out, off, sizeof(loff_t)))
ret = -EFAULT;
-@@ -1140,7 +1142,7 @@ static long do_splice(struct file *in, loff_t __user *off_in,
+@@ -1149,7 +1151,7 @@ static long do_splice(struct file *in, loff_t __user *off_in,
} else
off = &in->f_pos;
@@ -885,11 +885,11 @@
EXPORT_SYMBOL_GPL(fsstack_copy_attr_all);
diff --git a/fs/unionfs/Makefile b/fs/unionfs/Makefile
new file mode 100644
-index 0000000..6614204
+index 0000000..fc98b38
--- /dev/null
+++ b/fs/unionfs/Makefile
@@ -0,0 +1,17 @@
-+UNIONFS_VERSION="2.4 (for 2.6.26)"
++UNIONFS_VERSION="2.5 (for 2.6.27-rc6)"
+
+EXTRA_CFLAGS += -DUNIONFS_VERSION=\"$(UNIONFS_VERSION)\"
+
@@ -908,10 +908,10 @@
+endif
diff --git a/fs/unionfs/commonfops.c b/fs/unionfs/commonfops.c
new file mode 100644
-index 0000000..5861970
+index 0000000..ed3604e
--- /dev/null
+++ b/fs/unionfs/commonfops.c
-@@ -0,0 +1,905 @@
+@@ -0,0 +1,879 @@
+/*
+ * Copyright (c) 2003-2008 Erez Zadok
+ * Copyright (c) 2003-2006 Charles P. Wright
@@ -938,7 +938,7 @@
+ * stolen from NFS's silly rename
+ */
+static int copyup_deleted_file(struct file *file, struct dentry *dentry,
-+ int bstart, int bindex)
++ struct dentry *parent, int bstart, int bindex)
+{
+ static unsigned int counter;
+ const int i_inosize = sizeof(dentry->d_inode->i_ino) * 2;
@@ -985,8 +985,7 @@
+ } while (tmp_dentry->d_inode != NULL); /* need negative dentry */
+ dput(tmp_dentry);
+
-+ err = copyup_named_file(dentry->d_parent->d_inode, file, name, bstart,
-+ bindex,
++ err = copyup_named_file(parent->d_inode, file, name, bstart, bindex,
+ i_size_read(file->f_path.dentry->d_inode));
+ if (err) {
+ if (unlikely(err == -EEXIST))
@@ -1095,6 +1094,7 @@
+ unionfs_lower_mnt_idx(dentry, bindex),
+ file->f_flags);
+ if (IS_ERR(lower_file)) {
++ branchput(sb, bindex);
+ err = PTR_ERR(lower_file);
+ goto out;
+ } else {
@@ -1112,7 +1112,8 @@
+ struct file *lower_file;
+ struct dentry *lower_dentry;
+ struct dentry *dentry = file->f_path.dentry;
-+ struct inode *parent_inode = dentry->d_parent->d_inode;
++ struct dentry *parent = dget_parent(dentry);
++ struct inode *parent_inode = parent->d_inode;
+ struct super_block *sb = dentry->d_sb;
+
+ bstart = dbstart(dentry);
@@ -1148,15 +1149,16 @@
+
+ memcpy(&lower_file->f_ra, &file->f_ra, sizeof(struct file_ra_state));
+out:
++ dput(parent);
+ return err;
+}
+
+/* perform a delayed copyup of a read-write file on a read-only branch */
-+static int do_delayed_copyup(struct file *file)
++static int do_delayed_copyup(struct file *file, struct dentry *parent)
+{
+ int bindex, bstart, bend, err = 0;
+ struct dentry *dentry = file->f_path.dentry;
-+ struct inode *parent_inode = dentry->d_parent->d_inode;
++ struct inode *parent_inode = parent->d_inode;
+
+ bstart = fbstart(file);
+ bend = fbend(file);
@@ -1170,8 +1172,8 @@
+ bindex,
+ i_size_read(dentry->d_inode));
+ else
-+ err = copyup_deleted_file(file, dentry, bstart,
-+ bindex);
++ err = copyup_deleted_file(file, dentry, parent,
++ bstart, bindex);
+ /* if succeeded, set lower open-file flags and break */
+ if (!err) {
+ struct file *lower_file;
@@ -1207,6 +1209,7 @@
+ * Expects dentry/parent to be locked already, and revalidated.
+ */
+static int __unionfs_file_revalidate(struct file *file, struct dentry *dentry,
++ struct dentry *parent,
+ struct super_block *sb, int sbgen,
+ int dgen, bool willwrite)
+{
@@ -1288,7 +1291,7 @@
+ is_robranch(dentry)) {
+ pr_debug("unionfs: do delay copyup of \"%s\"\n",
+ dentry->d_name.name);
-+ err = do_delayed_copyup(file);
++ err = do_delayed_copyup(file, parent);
+ /* regular files have only one open lower file */
+ if (!err && !S_ISDIR(dentry->d_inode->i_mode))
+ fbend(file) = fbstart(file);
@@ -1298,8 +1301,6 @@
+ if (err) {
+ kfree(UNIONFS_F(file)->lower_files);
+ kfree(UNIONFS_F(file)->saved_branch_ids);
-+ } else {
-+ unionfs_check_file(file);
+ }
+ return err;
+}
@@ -1307,10 +1308,12 @@
+/*
+ * Revalidate the struct file
+ * @file: file to revalidate
++ * @parent: parent dentry (locked by caller)
+ * @willwrite: true if caller may cause changes to the file; false otherwise.
+ * Caller must lock/unlock dentry's branch configuration.
+ */
-+int unionfs_file_revalidate(struct file *file, bool willwrite)
++int unionfs_file_revalidate(struct file *file, struct dentry *parent,
++ bool willwrite)
+{
+ struct super_block *sb;
+ struct dentry *dentry;
@@ -1320,14 +1323,14 @@
+ dentry = file->f_path.dentry;
+ sb = dentry->d_sb;
+ verify_locked(dentry);
++ verify_locked(parent);
+
+ /*
+ * First revalidate the dentry inside struct file,
+ * but not unhashed dentries.
+ */
-+reval_dentry:
+ if (!d_deleted(dentry) &&
-+ !__unionfs_d_revalidate_chain(dentry, NULL, willwrite)) {
++ !__unionfs_d_revalidate(dentry, parent, willwrite)) {
+ err = -ESTALE;
+ goto out;
+ }
@@ -1335,59 +1338,14 @@
+ sbgen = atomic_read(&UNIONFS_SB(sb)->generation);
+ dgen = atomic_read(&UNIONFS_D(dentry)->generation);
+
-+ if (unlikely(sbgen > dgen)) {
-+ pr_debug("unionfs: retry dentry %s revalidation\n",
++ if (unlikely(sbgen > dgen)) { /* XXX: should never happen */
++ pr_debug("unionfs: failed to revalidate dentry (%s)\n",
+ dentry->d_name.name);
-+ schedule();
-+ goto reval_dentry;
-+ }
-+ BUG_ON(sbgen > dgen);
-+
-+ err = __unionfs_file_revalidate(file, dentry, sb,
-+ sbgen, dgen, willwrite);
-+out:
-+ return err;
-+}
-+
-+/* same as unionfs_file_revalidate, but parent dentry must be locked too */
-+int unionfs_file_revalidate_locked(struct file *file, bool willwrite)
-+{
-+ struct super_block *sb;
-+ struct dentry *dentry;
-+ int sbgen, dgen;
-+ int err = 0, valid;
-+
-+ dentry = file->f_path.dentry;
-+ sb = dentry->d_sb;
-+ verify_locked(dentry);
-+ verify_locked(dentry->d_parent);
-+
-+ /* first revalidate (locked) parent, then child */
-+ valid = __unionfs_d_revalidate_chain(dentry->d_parent, NULL, false);
-+ if (unlikely(!valid)) {
-+ err = -ESTALE; /* same as what real_lookup does */
-+ goto out;
-+ }
-+
-+reval_dentry:
-+ if (!d_deleted(dentry) &&
-+ !__unionfs_d_revalidate_one_locked(dentry, NULL, willwrite)) {
+ err = -ESTALE;
+ goto out;
+ }
+
-+ sbgen = atomic_read(&UNIONFS_SB(sb)->generation);
-+ dgen = atomic_read(&UNIONFS_D(dentry)->generation);
-+
-+ if (unlikely(sbgen > dgen)) {
-+ pr_debug("unionfs: retry (locked) dentry %s revalidation\n",
-+ dentry->d_name.name);
-+ schedule();
-+ goto reval_dentry;
-+ }
-+ BUG_ON(sbgen > dgen);
-+
-+ err = __unionfs_file_revalidate(file, dentry, sb,
++ err = __unionfs_file_revalidate(file, dentry, parent, sb,
+ sbgen, dgen, willwrite);
+out:
+ return err;
@@ -1430,7 +1388,8 @@
+}
+
+/* unionfs_open helper function: open a file */
-+static int __open_file(struct inode *inode, struct file *file)
++static int __open_file(struct inode *inode, struct file *file,
++ struct dentry *parent)
+{
+ struct dentry *lower_dentry;
+ struct file *lower_file;
@@ -1458,9 +1417,8 @@
+
+ /* copyup the file */
+ for (bindex = bstart - 1; bindex >= 0; bindex--) {
-+ err = copyup_file(
-+ file->f_path.dentry->d_parent->d_inode,
-+ file, bstart, bindex, size);
++ err = copyup_file(parent->d_inode, file,
++ bstart, bindex, size);
+ if (!err)
+ break;
+ }
@@ -1499,16 +1457,23 @@
+ int err = 0;
+ struct file *lower_file = NULL;
+ struct dentry *dentry = file->f_path.dentry;
++ struct dentry *parent;
+ int bindex = 0, bstart = 0, bend = 0;
+ int size;
+ int valid = 0;
+
+ unionfs_read_lock(inode->i_sb, UNIONFS_SMUTEX_PARENT);
++ parent = unionfs_lock_parent(dentry, UNIONFS_DMUTEX_PARENT);
+ unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD);
-+ if (dentry != dentry->d_parent)
-+ unionfs_lock_dentry(dentry->d_parent, UNIONFS_DMUTEX_PARENT);
+
-+ valid = __unionfs_d_revalidate_chain(dentry->d_parent, NULL, false);
++ /* don't open unhashed/deleted files */
++ if (d_deleted(dentry)) {
++ err = -ENOENT;
++ goto out_nofree;
++ }
++
++ /* XXX: should I change 'false' below to the 'willwrite' flag? */
++ valid = __unionfs_d_revalidate(dentry, parent, false);
+ if (unlikely(!valid)) {
+ err = -ESTALE;
+ goto out_nofree;
@@ -1548,7 +1513,7 @@
+ if (S_ISDIR(inode->i_mode))
+ err = __open_dir(inode, file); /* open a dir */
+ else
-+ err = __open_file(inode, file); /* open a file */
++ err = __open_file(inode, file, parent); /* open a file */
+
+ /* freeing the allocated resources, and fput the opened files */
+ if (err) {
@@ -1576,9 +1541,8 @@
+ unionfs_check_file(file);
+ unionfs_check_inode(inode);
+ }
-+ if (dentry != dentry->d_parent)
-+ unionfs_unlock_dentry(dentry->d_parent);
+ unionfs_unlock_dentry(dentry);
++ unionfs_unlock_parent(dentry, parent);
+ unionfs_read_unlock(inode->i_sb);
+ return err;
+}
@@ -1595,21 +1559,24 @@
+ struct unionfs_inode_info *inodeinfo;
+ struct super_block *sb = inode->i_sb;
+ struct dentry *dentry = file->f_path.dentry;
++ struct dentry *parent;
+ int bindex, bstart, bend;
+ int fgen, err = 0;
+
+ unionfs_read_lock(sb, UNIONFS_SMUTEX_PARENT);
++ parent = unionfs_lock_parent(dentry, UNIONFS_DMUTEX_PARENT);
+ unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD);
+
+ /*
-+ * Yes, we have to revalidate this file even if it's being released.
-+ * This is important for open-but-unlinked files, as well as mmap
-+ * support.
++ * We try to revalidate, but the VFS ignores return return values
++ * from file->release, so we must always try to succeed here,
++ * including to do the kfree and dput below. So if revalidation
++ * failed, all we can do is print some message and keep going.
+ */
-+ err = unionfs_file_revalidate(file, UNIONFS_F(file)->wrote_to_file);
-+ if (unlikely(err))
-+ goto out;
-+ unionfs_check_file(file);
++ err = unionfs_file_revalidate(file, parent,
++ UNIONFS_F(file)->wrote_to_file);
++ if (!err)
++ unionfs_check_file(file);
+ fileinfo = UNIONFS_F(file);
+ BUG_ON(file->f_path.dentry->d_inode != inode);
+ inodeinfo = UNIONFS_I(inode);
@@ -1650,8 +1617,8 @@
+ }
+ kfree(fileinfo);
+
-+out:
+ unionfs_unlock_dentry(dentry);
++ unionfs_unlock_parent(dentry, parent);
+ unionfs_read_unlock(sb);
+ return err;
+}
@@ -1687,8 +1654,8 @@
+ * We use fd_set and therefore we are limited to the number of the branches
+ * to FD_SETSIZE, which is currently 1024 - plenty for most people
+ */
-+static int unionfs_ioctl_queryfile(struct file *file, unsigned int cmd,
-+ unsigned long arg)
++static int unionfs_ioctl_queryfile(struct file *file, struct dentry *parent,
++ unsigned int cmd, unsigned long arg)
+{
+ int err = 0;
+ fd_set branchlist;
@@ -1700,7 +1667,7 @@
+ dentry = file->f_path.dentry;
+ orig_bstart = dbstart(dentry);
+ orig_bend = dbend(dentry);
-+ err = unionfs_partial_lookup(dentry);
++ err = unionfs_partial_lookup(dentry, parent);
+ if (err)
+ goto out;
+ bstart = dbstart(dentry);
@@ -1746,11 +1713,13 @@
+{
+ long err;
+ struct dentry *dentry = file->f_path.dentry;
++ struct dentry *parent;
+
+ unionfs_read_lock(dentry->d_sb, UNIONFS_SMUTEX_PARENT);
++ parent = unionfs_lock_parent(dentry, UNIONFS_DMUTEX_PARENT);
+ unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD);
+
-+ err = unionfs_file_revalidate(file, true);
++ err = unionfs_file_revalidate(file, parent, true);
+ if (unlikely(err))
+ goto out;
+
@@ -1765,7 +1734,7 @@
+
+ case UNIONFS_IOCTL_QUERYFILE:
+ /* Return list of branches containing the given file */
-+ err = unionfs_ioctl_queryfile(file, cmd, arg);
++ err = unionfs_ioctl_queryfile(file, parent, cmd, arg);
+ break;
+
+ default:
@@ -1777,6 +1746,7 @@
+out:
+ unionfs_check_file(file);
+ unionfs_unlock_dentry(dentry);
++ unionfs_unlock_parent(dentry, parent);
+ unionfs_read_unlock(dentry->d_sb);
+ return err;
+}
@@ -1786,12 +1756,15 @@
+ int err = 0;
+ struct file *lower_file = NULL;
+ struct dentry *dentry = file->f_path.dentry;
++ struct dentry *parent;
+ int bindex, bstart, bend;
+
+ unionfs_read_lock(dentry->d_sb, UNIONFS_SMUTEX_PARENT);
++ parent = unionfs_lock_parent(dentry, UNIONFS_DMUTEX_PARENT);
+ unionfs_lock_dentry(dentry, UNIONFS_DMUTEX_CHILD);
+
-+ err = unionfs_file_revalidate(file, UNIONFS_F(file)->wrote_to_file);
++ err = unionfs_file_revalidate(file, parent,
++ UNIONFS_F(file)->wrote_to_file);
+ if (unlikely(err))
+ goto out;
+ unionfs_check_file(file);
@@ -1814,15 +1787,16 @@
+ if (!err)
+ unionfs_check_file(file);
+ unionfs_unlock_dentry(dentry);
++ unionfs_unlock_parent(dentry, parent);
+ unionfs_read_unlock(dentry->d_sb);
+ return err;
+}
diff --git a/fs/unionfs/copyup.c b/fs/unionfs/copyup.c
new file mode 100644
-index 0000000..bbd49c8
+index 0000000..ae6ea2b
--- /dev/null
+++ b/fs/unionfs/copyup.c
-@@ -0,0 +1,880 @@
+@@ -0,0 +1,879 @@
+/*
+ * Copyright (c) 2003-2008 Erez Zadok
+ * Copyright (c) 2003-2006 Charles P. Wright
@@ -2009,7 +1983,6 @@
+ args.symlink.parent = new_lower_parent_dentry->d_inode;
+ args.symlink.dentry = new_lower_dentry;
+ args.symlink.symbuf = symbuf;
-+ args.symlink.mode = old_mode;
+
+ run_sioq(__unionfs_symlink, &args);
+ err = args.err;
@@ -3244,10 +3217,10 @@
+}
diff --git a/fs/unionfs/dentry.c b/fs/unionfs/dentry.c
new file mode 100644
-index 0000000..7f0c7f7
+index 0000000..583f4a4
--- /dev/null
+++ b/fs/unionfs/dentry.c
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/kernel-unionfs.patch?r1=1.1.2.2&r2=1.1.2.3&f=u
More information about the pld-cvs-commit
mailing list