From: Tomas M <to...@sl...> - 2007-07-18 14:54:39
|
>> I reproduced it during mounting aufs filesystem, which tests the >> directory's existence using >> >> if (unlikely(!inode->i_nlink)) >> { >> Err("doesn't exist"); >> } >> >> Would you please review FUSE code in order to fix this problem? > > Thanks for the report. The attached patch should fix it. The patch 'fixes' it, but I think in only introduces another problems. I guess the nlink should be at least 2 for a directory, not 1 (this is just my guess, which may be completely incorrect). Aufs now succeeds using the inode->i_nlink test, nevertheless it further complains about an 'error on the filesystem' in general (this is probably hard to debug as the error message is reached by 'goto' from many places). In all cases (when fuse/inode.c is patched or not), everything is correct if 'stat /fuse_mountpoint' is executed prior the aufs mount, so it seems to me the 'stat' function initializes the filesystem somehow. To be honest, I trust more the aufs code then the fuse code, so I think it's probably a problem of FUSE which still doesn't initialize the mountpoint properly? Maybe not, I don't know. Would you please review the code to make sure the filesystem is properly initialized even prior the first 'stat'? Thank you very much. Tomas M > > Index: linux-2.6.22/fs/fuse/inode.c > =================================================================== > --- linux-2.6.22.orig/fs/fuse/inode.c 2007-07-16 19:34:38.000000000 +0200 > +++ linux-2.6.22/fs/fuse/inode.c 2007-07-16 21:27:55.000000000 +0200 > @@ -475,6 +475,7 @@ static struct inode *get_root_inode(stru > > attr.mode = mode; > attr.ino = FUSE_ROOT_ID; > + attr.nlink = 1; > return fuse_iget(sb, 1, 0, &attr); > } > > > > |