From: <moo...@su...> - 2011-01-19 17:06:16
|
I'll get back to you with the information that you requested soon. However, I have solved the problem in my application, but I'm not sure if it was the "correct" fix. What I'm doing is during the "init" callback is inquring if the kernel is capable of the FUSE_CAP_ATOMIC_O_TRUNC feature. If so, then set the corresponding "want" bit: if ( (unsigned int)conn->capable & FUSE_CAP_ATOMIC_O_TRUNC) { // so let's set the bit conn->want |= FUSE_CAP_ATOMIC_O_TRUNC; } Then in my application's "open" callback, inquire if the O_TRUNC flag is set, if so, then call the application's "truncate" function with the path and 0 as arguments: int s3fs_open(const char *path, struct fuse_file_info *fi) { // Go do the truncation if called for if ((unsigned int)fi->flags & O_TRUNC) { result = s3fs_truncate(path, 0); if (result != 0) { return result; } } This doesn't explain the different behavior between Debian(sid) and Ubuntu (10.10), but solves the problem and the application on both platforms operate as expected, and identically. |