--- linux-2.6.22.9-vs2.3.0.27.1/fs/namei.c 2007-10-17 13:25:04 +0200 +++ linux-2.6.22.9-vs2.3.0.27.1/fs/namei.c 2007-10-17 13:25:04 +0200 @@ -2777,6 +2777,11 @@ long do_cow_splice(struct file *in, stru return do_splice_direct(in, &ppos, out, len, 0); } +#define OUT_DENTRY(n, d) \ + vxdprintk(VXD_CBIT(misc, 1), n " %p[»%*s«:%d]", \ + d, (d)->d_name.len, (d)->d_name.name, (d)->d_name.len); + + struct dentry *cow_break_link(const char *pathname) { int ret, mode, pathlen; @@ -2821,10 +2821,12 @@ goto out_rel_old; vxdprintk(VXD_CBIT(misc, 1), "temp copy »%s«", to); + OUT_DENTRY("old_dentry", old_dentry); ret = path_lookup(to, LOOKUP_PARENT|LOOKUP_OPEN|LOOKUP_CREATE, &dir_nd); vxdprintk(VXD_CBIT(misc, 2), "path_lookup(new): %d", ret); + OUT_DENTRY("old_dentry", old_dentry); if (ret < 0) goto retry; @@ -2839,9 +2841,11 @@ goto retry; } + OUT_DENTRY("old_dentry", old_dentry); ret = vfs_create(dir_nd.dentry->d_inode, new_dentry, mode, &dir_nd); vxdprintk(VXD_CBIT(misc, 2), "vfs_create(new): %d", ret); + OUT_DENTRY("old_dentry", old_dentry); if (ret == -EEXIST) { mutex_unlock(&dir_nd.dentry->d_inode->i_mutex); dput(new_dentry); @@ -2857,10 +2861,12 @@ dget(old_dentry); mntget(old_mnt); + OUT_DENTRY("old_dentry", old_dentry); /* this one cleans up the dentry in case of failure */ old_file = dentry_open(old_dentry, old_mnt, O_RDONLY); vxdprintk(VXD_CBIT(misc, 2), "dentry_open(old): %p", old_file); + OUT_DENTRY("old_dentry", old_dentry); if (!old_file || IS_ERR(old_file)) { res = IS_ERR(old_file) ? (void *) old_file : res; goto out_rel_both; @@ -2868,17 +2874,21 @@ dget(new_dentry); mntget(new_mnt); + OUT_DENTRY("old_dentry", old_dentry); /* this one cleans up the dentry in case of failure */ new_file = dentry_open(new_dentry, new_mnt, O_WRONLY); vxdprintk(VXD_CBIT(misc, 2), "dentry_open(new): %p", new_file); + OUT_DENTRY("old_dentry", old_dentry); if (!new_file || IS_ERR(new_file)) { res = IS_ERR(new_file) ? (void *) new_file : res; goto out_fput_old; } size = i_size_read(old_file->f_dentry->d_inode); + OUT_DENTRY("old_dentry", old_dentry); ret = do_cow_splice(old_file, new_file, size); + OUT_DENTRY("old_dentry", old_dentry); vxdprintk(VXD_CBIT(misc, 2), "do_splice_direct: %d", ret); if (ret < 0) { res = ERR_PTR(ret); @@ -2895,7 +2905,9 @@ .ia_valid = ATTR_UID | ATTR_GID }; + OUT_DENTRY("old_dentry", old_dentry); inode_setattr(new_inode, &attr); + OUT_DENTRY("old_dentry", old_dentry); } vxdprintk(VXD_CBIT(misc, 2),