|
From: bargav y. <by...@ya...> - 2008-07-01 18:47:13
|
This is with fuse version 2.7.3, with use_ino option. We hit
an assert in fuse.c forget_node() assert(node->nlookup >= nlookup).
When creating Hard link’s.
With a directory setup dir2/dir1/file-x. When we create a
hardlink for the file-x in dir2/link-x. The inode’s used for both the entities
will be the same for e.g. 5. So whenever a lookup is done from the fuse KLM for
the inode-5 i.e file-x fi->nlookup will get bumped up. Do a couple of
lookup’s for either of the files.
When the fuse_lib_link issues a fs_link() and does a
lookup_path(link-x,dir2) the file-x’s node->lookup in the library is not
incremented, only the link-x node->lookup gets incremented (since we create
for the first time but the KLM fi->nlookup gets incremented for file-x)
causing the mismatch.
So when we delete file-x & link-x file and the
subsequent forget(). The fuse lib does an assert such that the lookup value of
the kernel doesn’t match with that of the user space lookup causing the
crash. They are off by 2. (One for the create, other for the lookup
before del)
What would be an easy fix for this?
|