From: Stef B. <st...@gm...> - 2010-02-23 08:44:54
|
Hello, earlier I've asked in this list how to program inotify into a fuse fs. There has not been a reply. So I'm asking it again. An example, a hint, anything is fine! Stef |
From: Mohit A. <ext...@gm...> - 2010-02-23 16:20:28
|
inotify works exactly with a fuse mounted filesystem as it works with a regular filesystem like ext3. We used inotify extensively at my last company with a fuse mounted filesystem and it worked seamlessly. Just consult the inotify man pages - that's all you need to know. - Mohit On Tue, Feb 23, 2010 at 12:44 AM, Stef Bon <st...@gm...> wrote: > Hello, > > earlier I've asked in this list how to program inotify into a fuse fs. > There has not been a reply. So I'm asking it again. > > An example, a hint, anything is fine! > > > Stef > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > fuse-devel mailing list > fus...@li... > https://lists.sourceforge.net/lists/listinfo/fuse-devel > |
From: Stef B. <st...@gm...> - 2010-02-23 20:44:30
|
But how do I activate it?? I've found the c files fsel.c in example, and other hits of the word "poll" in the source of fuse. But how do I make this work in my fs. I have to add something like: .poll = myfs_poll how does the poll function look like?? I have to write this function you know. Stef 2010/2/23 Mohit Aron <ext...@gm...>: > inotify works exactly with a fuse mounted filesystem as it works with > a regular filesystem like ext3. We used inotify extensively at my last > company with a fuse mounted filesystem and it worked seamlessly. Just > consult the inotify man pages - that's all you need to know. > > > - Mohit > > On Tue, Feb 23, 2010 at 12:44 AM, Stef Bon <st...@gm...> wrote: >> Hello, >> >> earlier I've asked in this list how to program inotify into a fuse fs. >> There has not been a reply. So I'm asking it again. >> >> An example, a hint, anything is fine! >> >> >> Stef >> >> ------------------------------------------------------------------------------ >> Download Intel® Parallel Studio Eval >> Try the new software tools for yourself. Speed compiling, find bugs >> proactively, and fine-tune applications for parallel performance. >> See why Intel Parallel Studio got high marks during beta. >> http://p.sf.net/sfu/intel-sw-dev >> _______________________________________________ >> fuse-devel mailing list >> fus...@li... >> https://lists.sourceforge.net/lists/listinfo/fuse-devel >> > |
From: Stef B. <st...@gm...> - 2010-02-23 21:39:56
|
You are cryptic. 2010/2/23 Mohit Aron <ext...@gm...>: > I didn't do anything special in either the fuse code or the filesystem > I wrote to activate inotify. It just worked. No, it's not sufficient to just run inotify. MY fs needs changes to really detect changes in the underlying fs (my fs is an overlay fs) right? > When one runs inotify, > its not like some poll function gets invoked inside the filesystem. What does? That's my question is all about. > > Have you written inotify written code and made it to work on a > non-fuse filesystem ? For example, on ext3 ? > No, why do you ask? Is it important? Stef Bon |
From: Mohit A. <ext...@gm...> - 2010-02-24 01:25:26
|
On Tue, Feb 23, 2010 at 1:39 PM, Stef Bon <st...@gm...> wrote: > You are cryptic. Maybe. But at this point your tone is repugnant enough to not motivate me to help you any more. - Mohit |
From: Stef B. <st...@gm...> - 2010-02-24 07:59:21
|
Oh, sorry, I got a litlle bit irritated when one is saying my sollution does not work, but do not tell me what does. I really want to understand how fuse and inotify work together, and I cannot find anything about that. The webpage about inotify is too general to provide me any clue. Again my fs is an overlay fs. So somehowe my fs (and nothing else) needs to detect the changes in the underlying fs (local fs or cifs, which also supports inotify) Stef Bon 2010/2/24 Mohit Aron <ext...@gm...>: > On Tue, Feb 23, 2010 at 1:39 PM, Stef Bon <st...@gm...> wrote: >> You are cryptic. > > > Maybe. But at this point your tone is repugnant enough to not motivate > me to help you any more. > > > - Mohit > |
From: Mohit A. <ext...@gm...> - 2010-02-24 10:47:48
|
On Tue, Feb 23, 2010 at 11:59 PM, Stef Bon <st...@gm...> wrote: > Oh, sorry, I got a litlle bit irritated when one is saying my > sollution does not work, but do not tell me what does. I really want > to understand how fuse and inotify work together, and I cannot find > anything about that. The webpage about inotify is too general to > provide me any clue. > > Again my fs is an overlay fs. So somehowe my fs (and nothing else) > needs to detect the changes in the underlying fs (local fs or cifs, > which also supports inotify) > The inotify related processing is handled by the generic filesystem code in the kernel - your own filesystem code running at userlevel doesn't need to do anything. For example, when you write to your fuse filesystem, the existing code in the kernel passes this write to anyone doing an inotify. This is the reason I asked you whether you have some working code that uses inotify on a non-fuse filesystem. If you have such code, you'll notice that it'll work verbatim on your fuse filesystem. Anyways, since you want to see some inotify code, here is a snippet that you can try using: #include <iostream> #include <sys/inotify.h> #include <stdio.h> #include <assert.h> using namespace std; int main(int argc, char **argv) { int inotify_fd = inotify_init(); inotify_add_watch(inotify_fd, "/path/to/some/directory", IN_CLOSE_WRITE); int buf_size = sizeof(struct inotify_event) + FILENAME_MAX; struct inotify_event *event = malloc(buf_size); // Now wait for receiving an event on the inotify descriptor. You'll get an event if any file inside /path/to/some/directory is opened for writing and then closed. int read_ret = read(inotify_fd, event, buf_size); // Do the usual checks for errors on read_ret. if (read_ret < 0) { ... } assert(read_ret == sizeof(struct inotify_event) + event->len); cout << "Got inotify event on file " << event->name << endl; return 0; } Try running the above on a regular filesystem first. When you write to a file in the directory used, you'll see the message printed out by cout above. The same code should work on your fuse filesystem. Hope this helps. - Mohit |
From: Franco B. <fr...@bo...> - 2010-02-24 12:06:17
|
I think what Stef wants is to include the inotify code in his fuse implementation to track changes in the underlying filesystem. What he needs to do is implement your example in a thread, then act on the file changes by changing the way his filesystem behaves. On Wed, 2010-02-24 at 02:47 -0800, Mohit Aron wrote: > On Tue, Feb 23, 2010 at 11:59 PM, Stef Bon <st...@gm...> wrote: > > Oh, sorry, I got a litlle bit irritated when one is saying my > > sollution does not work, but do not tell me what does. I really want > > to understand how fuse and inotify work together, and I cannot find > > anything about that. The webpage about inotify is too general to > > provide me any clue. > > > > Again my fs is an overlay fs. So somehowe my fs (and nothing else) > > needs to detect the changes in the underlying fs (local fs or cifs, > > which also supports inotify) > > > > The inotify related processing is handled by the generic filesystem > code in the kernel - your own filesystem code running at userlevel > doesn't need to do anything. For example, when you write to your fuse > filesystem, the existing code in the kernel passes this write to > anyone doing an inotify. This is the reason I asked you whether you > have some working code that uses inotify on a non-fuse filesystem. If > you have such code, you'll notice that it'll work verbatim on your > fuse filesystem. > > Anyways, since you want to see some inotify code, here is a snippet > that you can try using: > > > #include <iostream> > #include <sys/inotify.h> > #include <stdio.h> > #include <assert.h> > > using namespace std; > > int main(int argc, char **argv) { > int inotify_fd = inotify_init(); > inotify_add_watch(inotify_fd, "/path/to/some/directory", IN_CLOSE_WRITE); > int buf_size = sizeof(struct inotify_event) + FILENAME_MAX; > struct inotify_event *event = malloc(buf_size); > // Now wait for receiving an event on the inotify descriptor. You'll > get an event if any file inside /path/to/some/directory is opened for > writing and then closed. > int read_ret = read(inotify_fd, event, buf_size); > // Do the usual checks for errors on read_ret. > if (read_ret < 0) { > ... > } > assert(read_ret == sizeof(struct inotify_event) + event->len); > cout << "Got inotify event on file " << event->name << endl; > > return 0; > } > > > Try running the above on a regular filesystem first. When you write to > a file in the directory used, you'll see the message printed out by > cout above. The same code should work on your fuse filesystem. Hope > this helps. > > > - Mohit > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > fuse-devel mailing list > fus...@li... > https://lists.sourceforge.net/lists/listinfo/fuse-devel |
From: Goswin v. B. <gos...@we...> - 2010-02-24 14:26:58
|
Mohit Aron <ext...@gm...> writes: > On Tue, Feb 23, 2010 at 11:59 PM, Stef Bon <st...@gm...> wrote: >> Oh, sorry, I got a litlle bit irritated when one is saying my >> sollution does not work, but do not tell me what does. I really want >> to understand how fuse and inotify work together, and I cannot find >> anything about that. The webpage about inotify is too general to >> provide me any clue. >> >> Again my fs is an overlay fs. So somehowe my fs (and nothing else) >> needs to detect the changes in the underlying fs (local fs or cifs, >> which also supports inotify) >> > > The inotify related processing is handled by the generic filesystem > code in the kernel - your own filesystem code running at userlevel > doesn't need to do anything. For example, when you write to your fuse > filesystem, the existing code in the kernel passes this write to > anyone doing an inotify. This is the reason I asked you whether you > have some working code that uses inotify on a non-fuse filesystem. If > you have such code, you'll notice that it'll work verbatim on your > fuse filesystem. But he has a overlay FS. That means the files in the fuse filesytem are actually files in another real filesystem somewhere else. Now I guessing that any change of the real file should also trigger any inotify of the virtual file in fuse. That means the fuse filesystem has to somehow notice someone is running inotify on the virtual file and then itself run inotify on the real file and pass any change along. So the question is: How do you write a overlay or networking filesystems so that inotify detects changes made in the real FS or by other hosts? MfG Goswin |
From: Stef B. <st...@gm...> - 2010-02-24 15:59:24
|
Yes! Thank you very very much! Also for writing a email anyway, after last "conflict"! >> you have such code, you'll notice that it'll work verbatim on your >> fuse filesystem. > > But he has a overlay FS. That means the files in the fuse filesytem are > actually files in another real filesystem somewhere else. > Exact! The way you've described the issue is perfect: > Now I guessing that any change of the real file should also trigger any > inotify of the virtual file in fuse. That means the fuse filesystem has > to somehow notice someone is running inotify on the virtual file and > then itself run inotify on the real file and pass any change along. > > > So the question is: > > How do you write a overlay or networking filesystems so that inotify > detects changes made in the real FS or by other hosts? > > MfG > Goswin > Yes! Excactly, my fs has to be transparant about inotify. I already begin to understand how inotify works! IT's not the question for my fuse module to detect every change of the underlying fs, but to transport every inotify request to the underlying fs and give back any result. (simular like the difference between push versus pull) So the issue is to catch every poll event (on my fuse fs) , and do something like poll(path_in_fuse_fs) = poll(path_in_underying_fs) So there has to be something defined like .poll = myfs_poll, How this looks like, I do not know now, but I'm beginning to see how things are going to work! If I'm totally wrong here, correct me!! About my questions, I'm not a full time skilled C programmer, I'm more like a Linux enthousiast, and I think my quality is on the field of integration of processes and make them work together. In my case my fs (FUSE) incombination with the automounter and a (not nec. graphical) environment. I'm fanatic and willing to learn, so I can ask "stupid" questions. Maybe I'm sometimes too fanatic... But again, thanks for yor reactions so far, also the others! Stef Bon |