SOURCES: linux-2.6-unionfs-2.1.1.patch - http://download.filesyste...
zbyniu
zbyniu at pld-linux.org
Thu Sep 20 19:40:33 CEST 2007
Author: zbyniu Date: Thu Sep 20 17:40:33 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- http://download.filesystems.org/unionfs/unionfs-2.1/unionfs-2.1.4_for_2.6.22.6.diff.gz
---- Files affected:
SOURCES:
linux-2.6-unionfs-2.1.1.patch (1.3 -> 1.4)
---- Diffs:
================================================================
Index: SOURCES/linux-2.6-unionfs-2.1.1.patch
diff -u SOURCES/linux-2.6-unionfs-2.1.1.patch:1.3 SOURCES/linux-2.6-unionfs-2.1.1.patch:1.4
--- SOURCES/linux-2.6-unionfs-2.1.1.patch:1.3 Tue Aug 21 19:07:37 2007
+++ SOURCES/linux-2.6-unionfs-2.1.1.patch Thu Sep 20 19:40:28 2007
@@ -29,11 +29,11 @@
+ - Usage information and examples.
diff --git a/Documentation/filesystems/unionfs/concepts.txt b/Documentation/filesystems/unionfs/concepts.txt
new file mode 100644
-index 0000000..eb74aac
+index 0000000..37a62d8
--- /dev/null
+++ b/Documentation/filesystems/unionfs/concepts.txt
@@ -0,0 +1,181 @@
-+Unionfs 2.0 CONCEPTS:
++Unionfs 2.1 CONCEPTS:
+=====================
+
+This file describes the concepts needed by a namespace unification file
@@ -127,7 +127,7 @@
+The way Unionfs ensures cache coherency is as follows. At each entry point
+to a Unionfs file system method, we call a utility function to validate the
+primary objects of this method. Generally, we call unionfs_file_revalidate
-+on open files, and __Unionfs_d_revalidate_chain on dentries (which also
++on open files, and __unionfs_d_revalidate_chain on dentries (which also
+validates inodes). These utility functions check to see whether the upper
+Unionfs object is in sync with any of the lower objects that it represents.
+The checks we perform include whether the Unionfs superblock has a newer
@@ -139,7 +139,7 @@
+similarly to how we do so for branch-management.
+
+While rebuilding Unionfs's objects, we also purge any page mappings and
-+truncate inode pages (see fs/Unionfs/dentry.c:purge_inode_data). This is to
++truncate inode pages (see fs/unionfs/dentry.c:purge_inode_data). This is to
+ensure that Unionfs will re-get the newer data from the lower branches. We
+perform this purging only if the Unionfs operation in question is a reading
+operation; if Unionfs is performing a data writing operation (e.g., ->write,
@@ -216,23 +216,32 @@
+For more information, see <http://unionfs.filesystems.org/>.
diff --git a/Documentation/filesystems/unionfs/issues.txt b/Documentation/filesystems/unionfs/issues.txt
new file mode 100644
-index 0000000..3644fea
+index 0000000..9db1d70
--- /dev/null
+++ b/Documentation/filesystems/unionfs/issues.txt
-@@ -0,0 +1,15 @@
-+KNOWN Unionfs 2.0 ISSUES:
+@@ -0,0 +1,24 @@
++KNOWN Unionfs 2.1 ISSUES:
+=========================
+
-+1. The NFS server returns -EACCES for read-only exports, instead of -EROFS.
-+ This means we can't reliably detect a read-only NFS export.
-+
-+2. Unionfs should not use lookup_one_len() on the underlying f/s as it
++1. Unionfs should not use lookup_one_len() on the underlying f/s as it
+ confuses NFSv4. Currently, unionfs_lookup() passes lookup intents to the
+ lower file-system, this eliminates part of the problem. The remaining
+ calls to lookup_one_len may need to be changed to pass an intent. We are
+ currently introducing VFS changes to fs/namei.c's do_path_lookup() to
+ allow proper file lookup and opening in stackable file systems.
+
++2. Lockdep (a debugging feature) isn't aware of stacking, and so it
++ incorrectly complains about locking problems. The problem boils down to
++ this: Lockdep considers all objects of a certain type to be in the same
++ class, for example, all inodes. Lockdep doesn't like to see a lock held
++ on two inodes within the same task, and warns that it could lead to a
++ deadlock. However, stackable file systems do precisely that: they lock
++ an upper object, and then a lower object, in a strict order to avoid
++ locking problems; in addition, Unionfs, as a fan-out file system, may
++ have to lock several lower inodes. We are currently looking into Lockdep
++ to see how to make it aware of stackable file systems. In the meantime,
++ if you get any warnings from Lockdep, you can safely ignore them (or feel
++ free to report them to the Unionfs maintainers, just to be sure).
+
+For more information, see <http://unionfs.filesystems.org/>.
diff --git a/Documentation/filesystems/unionfs/rename.txt b/Documentation/filesystems/unionfs/rename.txt
@@ -274,10 +283,10 @@
+
diff --git a/Documentation/filesystems/unionfs/usage.txt b/Documentation/filesystems/unionfs/usage.txt
new file mode 100644
-index 0000000..2316670
+index 0000000..d8c15de
--- /dev/null
+++ b/Documentation/filesystems/unionfs/usage.txt
-@@ -0,0 +1,97 @@
+@@ -0,0 +1,98 @@
+Unionfs is a stackable unification file system, which can appear to merge
+the contents of several directories (branches), while keeping their physical
+content separate. Unionfs is useful for unified source tree management,
@@ -359,7 +368,7 @@
+=================
+
+If you modify any file on any of the lower branches directly, while there is
-+a Unionfs 2.0 mounted above any of those branches, you should tell Unionfs
++a Unionfs 2.1 mounted above any of those branches, you should tell Unionfs
+to purge its caches and re-get the objects. To do that, you have to
+increment the generation number of the superblock using the following
+command:
@@ -367,11 +376,12 @@
+# mount -t unionfs -o remount,incgen none MOUNTPOINT
+
+Note that the older way of incrementing the generation number using an
-+ioctl, is no longer supported in Unionfs 2.0. Ioctls in general are not
-+encouraged. Plus, an ioctl is per-file concept, whereas the generation
-+number is a per-file-system concept. Worse, such an ioctl requires an open
-+file, which then has to be invalidated by the very nature of the generation
-+number increase (read: the old generation increase ioctl was pretty racy).
++ioctl, is no longer supported in Unionfs 2.0 and newer. Ioctls in general
++are not encouraged. Plus, an ioctl is per-file concept, whereas the
++generation number is a per-file-system concept. Worse, such an ioctl
++requires an open file, which then has to be invalidated by the very nature
++of the generation number increase (read: the old generation increase ioctl
++was pretty racy).
+
+
+For more information, see <http://unionfs.filesystems.org/>.
@@ -406,10 +416,10 @@
+
+MODULE_LICENSE("GPL");
diff --git a/fs/Kconfig b/fs/Kconfig
-index 0fa0c11..674cfa9 100644
+index 0fa0c11..e9380c7 100644
--- a/fs/Kconfig
+++ b/fs/Kconfig
-@@ -1030,6 +1030,41 @@ config CONFIGFS_FS
+@@ -1030,6 +1030,47 @@ config CONFIGFS_FS
endmenu
@@ -446,12 +456,18 @@
+
+ If unsure, say N.
+
++config UNION_FS_DEBUG
++ bool "Debug Unionfs"
++ depends on UNION_FS
++ help
++ If you say Y here, you can turn on debugging output from Unionfs.
++
+endmenu
+
menu "Miscellaneous filesystems"
config ADFS_FS
-@@ -1082,18 +1117,6 @@ config AFFS_FS
+@@ -1082,18 +1123,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.
@@ -629,15 +645,15 @@
EXPORT_SYMBOL(page_put_link);
EXPORT_SYMBOL(page_readlink);
diff --git a/fs/stack.c b/fs/stack.c
-index 67716f6..56fd0df 100644
+index 67716f6..a548aac 100644
--- a/fs/stack.c
+++ b/fs/stack.c
@@ -1,8 +1,20 @@
+/*
-+ * Copyright (c) 2003-2007 Erez Zadok
-+ * Copyright (c) 2005-2007 Josef 'Jeff' Sipek
-+ * Copyright (c) 2003-2007 Stony Brook University
-+ * Copyright (c) 2003-2007 The Research Foundation of SUNY
++ * Copyright (c) 2006-2007 Erez Zadok
++ * Copyright (c) 2006-2007 Josef 'Jeff' Sipek
++ * Copyright (c) 2006-2007 Stony Brook University
++ * Copyright (c) 2006-2007 The Research Foundation of SUNY
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
@@ -687,11 +703,11 @@
EXPORT_SYMBOL_GPL(fsstack_copy_attr_all);
diff --git a/fs/unionfs/Makefile b/fs/unionfs/Makefile
new file mode 100644
-index 0000000..92ae12a
+index 0000000..73a6bea
--- /dev/null
+++ b/fs/unionfs/Makefile
-@@ -0,0 +1,23 @@
-+UNIONFS_VERSION="2.1.1 (for 2.6.22.3)"
+@@ -0,0 +1,13 @@
++UNIONFS_VERSION="2.1.4 (for 2.6.22.6)"
+
+EXTRA_CFLAGS += -DUNIONFS_VERSION=\"$(UNIONFS_VERSION)\"
+
@@ -703,23 +719,13 @@
+
+unionfs-$(CONFIG_UNION_FS_XATTR) += xattr.o
+
-+# If you want debugging output, please uncomment the following line
-+# or put your options in a separate file in linux-x.y.z/fs/unionfs/local.mk
-+#CONFIG_UNIONFS_DEBUG=y
-+
-+# Allow users to override debug options in a separate file
-+-include fs/unionfs/local.mk
-+
-+ifeq ($(CONFIG_UNIONFS_DEBUG),y)
-+unionfs-y += debug.o
-+EXTRA_CFLAGS += -DUNIONFS_DEBUG=1
-+endif
++unionfs-$(CONFIG_UNION_FS_DEBUG) += debug.o
diff --git a/fs/unionfs/commonfops.c b/fs/unionfs/commonfops.c
new file mode 100644
-index 0000000..d77608e
+index 0000000..e69ccf6
--- /dev/null
+++ b/fs/unionfs/commonfops.c
-@@ -0,0 +1,837 @@
+@@ -0,0 +1,835 @@
+/*
+ * Copyright (c) 2003-2007 Erez Zadok
+ * Copyright (c) 2003-2006 Charles P. Wright
@@ -790,7 +796,6 @@
+ err = PTR_ERR(tmp_dentry);
+ goto out;
+ }
-+ /* don't dput here because of do-while condition eval order */
+ } while (tmp_dentry->d_inode != NULL); /* need negative dentry */
+ dput(tmp_dentry);
+
@@ -810,7 +815,7 @@
+ lower_dentry->d_inode);
+ }
+ lower_dir_dentry = lock_parent(lower_dentry);
-+ err = vfs_unlink(lower_dir_dentry->d_inode, lower_dentry, NULL);
++ err = vfs_unlink(lower_dir_dentry->d_inode, lower_dentry);
+ unlock_dir(lower_dir_dentry);
+
+out:
@@ -913,7 +918,7 @@
+}
+
+/* open the highest priority file for a given upper file */
-+static int open_highest_file(struct file *file, int willwrite)
++static int open_highest_file(struct file *file, bool willwrite)
+{
+ int bindex, bstart, bend, err = 0;
+ struct file *lower_file;
@@ -1021,9 +1026,9 @@
+/*
+ * Revalidate the struct file
+ * @file: file to revalidate
-+ * @willwrite: 1 if caller may cause changes to the file; 0 otherwise.
++ * @willwrite: true if caller may cause changes to the file; false otherwise.
+ */
-+int unionfs_file_revalidate(struct file *file, int willwrite)
++int unionfs_file_revalidate(struct file *file, bool willwrite)
+{
+ struct super_block *sb;
+ struct dentry *dentry;
@@ -1060,8 +1065,8 @@
+ */
+ if (!d_deleted(dentry) &&
+ (sbgen > fgen || dbstart(dentry) != fbstart(file))) {
-+ int orig_brid = /* save orig branch ID */
-+ UNIONFS_F(file)->saved_branch_ids[fbstart(file)];
++ /* save orig branch ID */
++ int orig_brid = UNIONFS_F(file)->saved_branch_ids[fbstart(file)];
+
+ /* First we throw out the existing files. */
+ cleanup_file(file);
@@ -1104,22 +1109,21 @@
+ * update the mnt counts of the old and new
+ * branches accordingly.
+ */
-+ unionfs_mntget(dentry, bstart); /* new branch */
-+ unionfs_mntput(sb->s_root, /* orig branch */
++ unionfs_mntget(dentry, bstart);
++ unionfs_mntput(sb->s_root,
+ branch_id_to_idx(sb, orig_brid));
+ }
+ }
+ atomic_set(&UNIONFS_F(file)->generation,
-+ atomic_read(&UNIONFS_I(dentry->d_inode)->
-+ generation));
++ atomic_read(&UNIONFS_I(dentry->d_inode)->generation));
+ }
+
+ /* Copyup on the first write to a file on a readonly branch. */
+ if (willwrite && IS_WRITE_FLAG(file->f_flags) &&
+ !IS_WRITE_FLAG(unionfs_lower_file(file)->f_flags) &&
+ is_robranch(dentry)) {
-+ printk(KERN_DEBUG "unionfs: do delay copyup of \"%s\"\n",
-+ dentry->d_name.name);
++ dprintk(KERN_DEBUG "unionfs: do delay copyup of \"%s\"\n",
++ dentry->d_name.name);
+ err = do_delayed_copyup(file);
+ }
+
@@ -1336,7 +1340,7 @@
+ * This is important for open-but-unlinked files, as well as mmap
+ * support.
+ */
-+ if ((err = unionfs_file_revalidate(file, 1)))
++ if ((err = unionfs_file_revalidate(file, true)))
+ goto out;
+ unionfs_check_file(file);
+ fileinfo = UNIONFS_F(file);
@@ -1477,7 +1481,7 @@
+
+ unionfs_read_lock(file->f_path.dentry->d_sb);
+
-+ if ((err = unionfs_file_revalidate(file, 1)))
++ if ((err = unionfs_file_revalidate(file, true)))
+ goto out;
+
+ /* check if asked for local commands */
@@ -1515,7 +1519,7 @@
+
+ unionfs_read_lock(dentry->d_sb);
+
-+ if ((err = unionfs_file_revalidate(file, 1)))
++ if ((err = unionfs_file_revalidate(file, true)))
+ goto out;
+ unionfs_check_file(file);
+
@@ -1559,10 +1563,10 @@
+}
diff --git a/fs/unionfs/copyup.c b/fs/unionfs/copyup.c
new file mode 100644
-index 0000000..4f6da6f
+index 0000000..04bedb1
--- /dev/null
+++ b/fs/unionfs/copyup.c
-@@ -0,0 +1,887 @@
+@@ -0,0 +1,888 @@
+/*
+ * Copyright (c) 2003-2007 Erez Zadok
+ * Copyright (c) 2003-2006 Charles P. Wright
@@ -1597,7 +1601,7 @@
+ ssize_t list_size = -1;
+ char *name_list = NULL;
+ char *attr_value = NULL;
-+ char *name_list_orig = NULL;
++ char *name_list_buf = NULL;
+
+ /* query the actual size of the xattr list */
+ list_size = vfs_listxattr(old_lower_dentry, NULL, 0);
@@ -1613,7 +1617,7 @@
+ goto out;
+ }
+
-+ name_list_orig = name_list; /* save for kfree at end */
++ name_list_buf = name_list; /* save for kfree at end */
+
+ /* now get the actual xattr list of the source file */
+ list_size = vfs_listxattr(old_lower_dentry, name_list, list_size);
@@ -1654,6 +1658,7 @@
+ * the security of copied-up files, if Selinux is active,
+ * then we must copy these xattrs as well. So we need to
+ * temporarily get FOWNER privileges.
++ * XXX: move entire copyup code to SIOQ.
+ */
+ if (err == -EPERM && !capable(CAP_FOWNER)) {
+ cap_raise(current->cap_effective, CAP_FOWNER);
@@ -1666,7 +1671,7 @@
+ name_list += strlen(name_list) + 1;
+ }
+out:
-+ unionfs_xattr_kfree(name_list_orig);
++ unionfs_xattr_kfree(name_list_buf);
+ unionfs_xattr_kfree(attr_value);
+ /* Ignore if xattr isn't supported */
+ if (err == -ENOTSUPP || err == -EOPNOTSUPP)
@@ -2039,7 +2044,7 @@
+ * quota, or something else happened so let's unlink; we don't
+ * really care about the return value of vfs_unlink
+ */
-+ vfs_unlink(new_lower_parent_dentry->d_inode, new_lower_dentry, NULL);
++ vfs_unlink(new_lower_parent_dentry->d_inode, new_lower_dentry);
+
+ if (copyup_file) {
+ /* need to close the file */
@@ -2452,10 +2457,10 @@
+}
diff --git a/fs/unionfs/debug.c b/fs/unionfs/debug.c
new file mode 100644
-index 0000000..94f0e84
+index 0000000..f678534
--- /dev/null
+++ b/fs/unionfs/debug.c
-@@ -0,0 +1,494 @@
+@@ -0,0 +1,502 @@
+/*
+ * Copyright (c) 2003-2007 Erez Zadok
+ * Copyright (c) 2005-2007 Josef 'Jeff' Sipek
@@ -2475,14 +2480,22 @@
+ */
+
+/* it's always useful to know what part of the code called us */
-+#define PRINT_CALLER() \
-+ do { \
-+ if (!printed_caller) { \
-+ printk("PC:%s:%s:%d\n",fname,fxn,line); \
-+ printed_caller = 1; \
-+ } \
++#define PRINT_CALLER(fname, fxn, line) \
++ do { \
++ if (!printed_caller) { \
++ printk("PC:%s:%s:%d\n",(fname),(fxn),(line)); \
++ printed_caller = 1; \
++ } \
+ } while (0)
+
++#if BITS_PER_LONG == 32
++#define POISONED_PTR ((void*) 0x5a5a5a5a)
++#elif BITS_PER_LONG == 64
++#define POISONED_PTR ((void*) 0x5a5a5a5a5a5a5a5a)
++#else
++#error Unknown BITS_PER_LONG value
++#endif /* BITS_PER_LONG != known */
++
+/*
+ * __unionfs_check_{inode,dentry,file} perform exhaustive sanity checking on
+ * the fan-out of various Unionfs objects. We check that no lower objects
@@ -2507,19 +2520,19 @@
+ istart = ibstart(inode);
+ iend = ibend(inode);
+ if (istart > iend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci0: inode=%p istart/end=%d:%d\n",
+ inode, istart, iend);
+ }
+ if ((istart == -1 && iend != -1) ||
+ (istart != -1 && iend == -1)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci1: inode=%p istart/end=%d:%d\n",
+ inode, istart, iend);
+ }
+ if (!S_ISDIR(inode->i_mode)) {
+ if (iend != istart) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci2: inode=%p istart=%d iend=%d\n",
+ inode, istart, iend);
+ }
@@ -2527,25 +2540,25 @@
+
+ for (bindex = sbstart(sb); bindex < sbmax(sb); bindex++) {
+ if (!UNIONFS_I(inode)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci3: no inode_info %p\n", inode);
+ return;
+ }
+ if (!UNIONFS_I(inode)->lower_inodes) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci4: no lower_inodes %p\n", inode);
+ return;
+ }
+ lower_inode = unionfs_lower_inode_idx(inode, bindex);
+ if (lower_inode) {
+ if (bindex < istart || bindex > iend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci5: inode/linode=%p:%p bindex=%d "
+ "istart/end=%d:%d\n", inode,
+ lower_inode, bindex, istart, iend);
-+ } else if ((int)lower_inode == 0x5a5a5a5a) {
++ } else if (lower_inode == POISONED_PTR) {
+ /* freed inode! */
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci6: inode/linode=%p:%p bindex=%d "
+ "istart/end=%d:%d\n", inode,
+ lower_inode, bindex, istart, iend);
@@ -2559,7 +2572,7 @@
+ */
+ if (!(S_ISDIR(inode->i_mode) &&
+ bindex > istart && bindex < iend)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" Ci7: inode/linode=%p:%p "
+ "bindex=%d istart/end=%d:%d\n",
+ inode, lower_inode, bindex,
@@ -2590,7 +2603,7 @@
+
+ if ((dstart == -1 && dend != -1) ||
+ (dstart != -1 && dend == -1)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CD0: dentry=%p dstart/end=%d:%d\n",
+ dentry, dstart, dend);
+ }
@@ -2602,12 +2615,12 @@
+ lower_dentry = unionfs_lower_dentry_idx(dentry, bindex);
+ if (lower_dentry) {
+ if (bindex < dstart || bindex > dend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CD1: dentry/lower=%p:%p(%p) "
+ "bindex=%d dstart/end=%d:%d\n",
+ dentry, lower_dentry,
+ (lower_dentry ? lower_dentry->d_inode :
-+ (void *) 0xffffffff),
++ (void *) -1L),
+ bindex, dstart, dend);
+ }
+ } else { /* lower_dentry == NULL */
@@ -2623,13 +2636,13 @@
+ inode &&
+ !(inode && S_ISDIR(inode->i_mode) &&
+ bindex > dstart && bindex < dend)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CD2: dentry/lower=%p:%p(%p) "
+ "bindex=%d dstart/end=%d:%d\n",
+ dentry, lower_dentry,
+ (lower_dentry ?
+ lower_dentry->d_inode :
-+ (void *) 0xffffffff),
++ (void *) -1L),
+ bindex, dstart, dend);
+ }
+ }
@@ -2641,7 +2654,7 @@
+ lower_mnt = unionfs_lower_mnt_idx(dentry, bindex);
+ if (lower_mnt) {
+ if (bindex < dstart || bindex > dend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CM0: dentry/lmnt=%p:%p bindex=%d "
+ "dstart/end=%d:%d\n", dentry,
+ lower_mnt, bindex, dstart, dend);
@@ -2657,7 +2670,7 @@
+ if (inode &&
+ !(inode && S_ISDIR(inode->i_mode) &&
+ bindex > dstart && bindex < dend)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CM1: dentry/lmnt=%p:%p "
+ "bindex=%d dstart/end=%d:%d\n",
+ dentry, lower_mnt, bindex,
@@ -2675,29 +2688,29 @@
+ BUG_ON(istart > iend);
+ if ((istart == -1 && iend != -1) ||
+ (istart != -1 && iend == -1)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI0: dentry/inode=%p:%p istart/end=%d:%d\n",
+ dentry, inode, istart, iend);
+ }
+ if (istart != dstart) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI1: dentry/inode=%p:%p istart=%d dstart=%d\n",
+ dentry, inode, istart, dstart);
+ }
+ if (iend != dend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI2: dentry/inode=%p:%p iend=%d dend=%d\n",
+ dentry, inode, iend, dend);
+ }
+
+ if (!S_ISDIR(inode->i_mode)) {
+ if (dend != dstart) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI3: dentry/inode=%p:%p dstart=%d dend=%d\n",
+ dentry, inode, dstart, dend);
+ }
+ if (iend != istart) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI4: dentry/inode=%p:%p istart=%d iend=%d\n",
+ dentry, inode, istart, iend);
+ }
@@ -2707,13 +2720,13 @@
+ lower_inode = unionfs_lower_inode_idx(inode, bindex);
+ if (lower_inode) {
+ if (bindex < istart || bindex > iend) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI5: dentry/linode=%p:%p bindex=%d "
+ "istart/end=%d:%d\n", dentry,
+ lower_inode, bindex, istart, iend);
-+ } else if ((int)lower_inode == 0x5a5a5a5a) {
++ } else if (lower_inode == POISONED_PTR) {
+ /* freed inode! */
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI6: dentry/linode=%p:%p bindex=%d "
+ "istart/end=%d:%d\n", dentry,
+ lower_inode, bindex, istart, iend);
@@ -2727,7 +2740,7 @@
+ */
+ if (!(S_ISDIR(inode->i_mode) &&
+ bindex > istart && bindex < iend)) {
-+ PRINT_CALLER();
++ PRINT_CALLER(fname, fxn, line);
+ printk(" CI7: dentry/linode=%p:%p "
+ "bindex=%d istart/end=%d:%d\n",
<<Diff was trimmed, longer than 597 lines>>
---- CVS-web:
http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/linux-2.6-unionfs-2.1.1.patch?r1=1.3&r2=1.4&f=u
More information about the pld-cvs-commit
mailing list