[Unionfs] notify_change in inode.c:unionfs_create()

Hans-Peter Jansen hpj at urpla.net
Thu Mar 9 13:12:23 EST 2006


Am Donnerstag, 9. März 2006 02:47 schrieb Josef Sipek:
> On Wed, Mar 08, 2006 at 09:19:28PM +0100, Hans-Peter Jansen wrote:
> > Am Mittwoch, 8. März 2006 18:18 schrieb Josef Sipek:
> > > On Wed, Mar 08, 2006 at 10:29:23AM -0500, Charles P. Wright wrote:
> > > > Jeff, This probably needs to use superio.
> > >
> > > Hmm..I shouldn't need any fsuid/fsgid change since we are passing
> > > ATTR_FORCE which bypasses all the permission checks. So, I'm
> > > tempted to blame nfs.
> > >
> > > Peter: Was the ro branch ever rw?
> >
> > No, never.. Not a single .wh.* in the ro branch, while plenty of
> > them in the rw branch..
> >
> > > If so, can you check that you don't
> > > have a whiteout for the file on it?
> >
> > Hmm, how about including the filename in that error msg? I'm
> > tempted to patch that in, but can't do that immediately. Maybe
> > later tonight.
>
> The attached patch prints out the inode number and the file name.

Ahh, thanks, Jeff, but it didn't apply to my slightly mangled unionfs
snapshot. Here's what I applied now:

--- inode.c.orig	2006-03-09 16:48:09.292014175 +0100
+++ inode.c	2006-03-09 16:54:45.613548172 +0100
@@ -101,8 +101,8 @@
 
 		if (err)
 			printk(KERN_WARNING
-			       "unionfs: %s:%d: notify_change failed: %d, ignoring..\n",
-			       __FILE__, __LINE__, err);
+			       "unionfs: %s:%d: notify_change failed: %d for %s (inode: %lu), ignoring..\n",
+			       __FILE__, __LINE__, err, whiteout_dentry->d_name.name, whiteout_dentry->d_inode->i_ino);
 
 		new_hidden_dentry = dtohd(dentry);
 		DGET(new_hidden_dentry);


I hope, I did the d_name.name referencing right..

That's logged now:

unionfs: /usr/src/packages/BUILD/unionfs-20060221-0341/inode.c:105: 
notify_change failed: -13 for .wh.dcopPfMg8b (inode: 2713288224), ignoring..

find . -name .wh.dcopPfMg8b -ls
2713288224    0 -rwxr-xr-x   1 ak   lisa   0 Mar  6 01:20 ./tmp/.wh.dcopPfMg8b

That file exists, but is indeed owned by somebody else. Looks like 
the dcop filename isn't as random as it seems. I "solved" this issue
by cleaning up /tmp and /var/tmp before union mount..

Pete




More information about the unionfs mailing list