From: Miklos S. <mi...@sz...> - 2006-08-19 19:49:39
|
> As it was discussed several times, the API doesn't let you return an > error from the release method, if one needs a similar effect, errors > should be returned from flush(). > > Seeking for some the background, I found the __fput() function, > > http://sosdg.org/~coywolf/lxr/source/fs/file_table.c#L153 > > That seems to be where the release file op is usually invoked, and yeah, > the return value of it is discarded (although it's an int). So, is this > the reason why release is not an appropriate place for returning an > error? Yes. If for example a multithreaded app does close() and read() on the same file in parallel, the release could happen from eithe, and it may not be appropriate to return the error value from the read() call. > Looking at FreeBSD, we can see two differences: > > 1) There is no unambiguous counterpart for "flush". > We have already discussed it in > http://thread.gmane.org/gmane.comp.file-systems.fuse.devel/2732/focus=2782 > and the conclusion was that in this case, FreeBSD should not use > FUSE_FLUSH (as it's the case). > > 2) fdrop_locked(), the FreeBSD analogue of __fput(), does delegate the > error value of the file method, see > http://fxr.watson.org/fxr/source/kern/kern_descrip.c#L2173 . > > Hence, from the FreeBSD POV, it would seem to be a natural choice > to let an error be returned from the release method. Yes, that seems to be the only way. I'm not sure what happens in the multithreaded example. If there's no synchronization on close() between the threads (there's none in Linux), then the error value could be lost. > I wonder how would it be possible to implement an unified semantics for > release (so that people like Gerard Cerchio could see their fs working > properly on FreeBSD, too)... I still can't see anything better than sending a > FUSE_FLUSH + FUSE_RELEASE from the close file operation of FBSD. Either that, or a new message FUSE_FLUSH_RELEASE combining the two methods. Then the library can call flush() + release() and filesystems don't notice the difference. Miklos |