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 _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
