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