From: Corin <wak...@gm...> - 2009-03-28 03:06:11
|
Hi! I'm using fuse lowlevel version 2.8.0-pre. When for example running "mkdir", fuse first calls "lookup" on that file which is fine. But when "lookup" returns success, fuse skips calling "mkdir", which is bad. Is this a kernel thing or a fuse thing? Is there a way to disable this optimization and get the "real" fop called always? Thanks, Corin |
From: Roman S. <rv...@su...> - 2009-03-28 03:21:20
|
On Mar 27, 2009, at 8:04 PM, Corin wrote: > Hi! > > I'm using fuse lowlevel version 2.8.0-pre. When for example running > "mkdir", fuse first calls "lookup" on that file which is fine. But > when > "lookup" returns success, fuse skips calling "mkdir", which is bad. Are you trying to mkdir a directory that already exists? Thanks, Roman. |
From: Corin <wak...@gm...> - 2009-03-28 04:43:22
|
On 28.03.2009 14:20, Roman Shaposhnik wrote: > Are you trying to mkdir a directory that already exists? I'm developing a distributed filesystem and using the name (not attr) caching feature of fuse, as it improves performance quite a lot. But now consider a directory is created by the local node, and then deleted trough a remote node. With my design the local node doesn't get informed about the delete, as it's completely unimportant until the next access to that directory happens locally. With the current design of fuse, the local node will always report that the file exists, because it's still in the fuse name cache. Sadly there's no way to remove it from that cache, and even if there would be one, it would not be scaleable. But if fuse would just call the "mkdir" anway, "mkdir" would return "SUCCESS" and everything is fine. Another thing I noted is that fuse does not even seem update it's name cache when a function (getattr, open, ..) returns "ENOENT". Shouldn't this be changed too? The mkdir was just an example, this apply to all other functions too. Corin |
From: Goswin v. B. <gos...@we...> - 2009-03-30 13:03:33
|
Corin <wak...@gm...> writes: > On 28.03.2009 14:20, Roman Shaposhnik wrote: >> Are you trying to mkdir a directory that already exists? > I'm developing a distributed filesystem and using the name (not attr) > caching feature of fuse, as it improves performance quite a lot. But now > consider a directory is created by the local node, and then deleted > trough a remote node. With my design the local node doesn't get informed > about the delete, as it's completely unimportant until the next access > to that directory happens locally. Then you can not cache entries or you have to live with the inconsistency. > With the current design of fuse, the local node will always report that > the file exists, because it's still in the fuse name cache. Sadly > there's no way to remove it from that cache, and even if there would be > one, it would not be scaleable. But if fuse would just call the "mkdir" > anway, "mkdir" would return "SUCCESS" and everything is fine. > > Another thing I noted is that fuse does not even seem update it's name > cache when a function (getattr, open, ..) returns "ENOENT". Shouldn't > this be changed too? > > The mkdir was just an example, this apply to all other functions too. > > Corin The real solution would be to have the server know what clients have cached and inform clients about changes to their cached data. Yes, this creates some overhead on the network but that is the only way to get consitent caching. MfG Goswin |