From: Goswin v. B. <gos...@we...> - 2010-10-20 11:32:25
|
jonywalker <jon...@gm...> writes: > We can use *at function normally also;only we need to give relative path > instead of absolute path.If its normal mount no problem, we can use opendir > and open etc.. Here i am trying overlay mount, mounting /tmp/Dirx on > /tmp/Dirx, you can say its a kind of deadlock.. !!. So before mounting we > have to open that directory, later using descriptor and at calls we need to > implement all fs calls. > I followed same way, in one loop opendir readir > gettatr everything is working fine. But second time opendir is fine readdir > is failing !?. its really wired. > > Hi Goswin > Before i commented out closedir call since its closing gfdir. Now i > used dup() and closedir its working fine; thanks for hint. > > readdir is failing, though opendir is success error No such directory . I > need to use any rewindir; as it may reached end during previous filler call > ? > > thnaks > jony You need to either 1) rewind() and create a list of all files in a single go when offset = 0, then offset is a reference into the list (or array). or 2) seekdir(fi->fh, offset) [fi->fh being the DIR* from opendirfd()] Often in an overlay FS you have multiple sources for files and then the offset from fuse is ambigious and you don't know which underlying filesystem is ment. Also you don't want duplicate entries with the same name if the merged filesystems have identical entries. So option 1 is often used. But if you overlay a single FS then you can use option 2. MfG Goswin |