Messages in this thread | | | From | OGAWA Hirofumi <> | Subject | Re: [fuse-devel] utimensat fails to update ctime | Date | Tue, 22 Dec 2009 22:30:24 +0900 |
| |
Jean-Pierre André <jean-pierre.andre@wanadoo.fr> writes:
> Hi again,
Hi,
>> Well, the problem seems in fuse_lib_setattr() and ntfs_fuse_setattr() >> (lowlevel op too). >> >> The both functions is requiring "ATIME | MTIME". Doesn't it mean the >> ntfs-3g can't set only MTIME like above utimensat()? >> > > With ntfs-3g this is not directly possible, because > the interface does not provide flags telling which > timestamps should be updated. The only way would > be fuse feeding both values (even though unchanged) > before calling ntfs-3g. This is true for all versions of > ntfs-3g.
Yes, with fuse_operations. It is why I'm saying the issue is libfuse or ntfs-3g.
But I noticed ntfs-3g is including libfuse-lite sources and use it with static link (I might be wrong here, because I just looked ntfs-3g source slightly). AFAIK, the fuse of kernel part is passing the flags of some sort of detail always.
[BTW, the code of that part in kernel may be the following,
fs/fuse/dir.c:iattr_to_fattr(),
if (ivalid & ATTR_ATIME) { arg->valid |= FATTR_ATIME; arg->atime = iattr->ia_atime.tv_sec; arg->atimensec = iattr->ia_atime.tv_nsec; if (!(ivalid & ATTR_ATIME_SET)) arg->valid |= FATTR_ATIME_NOW; } if ((ivalid & ATTR_MTIME) && update_mtime(ivalid)) { arg->valid |= FATTR_MTIME; arg->mtime = iattr->ia_mtime.tv_sec; arg->mtimensec = iattr->ia_mtime.tv_nsec; if (!(ivalid & ATTR_MTIME_SET)) arg->valid |= FATTR_MTIME_NOW; } ]
So, if libfuse-lite was fixed to supported that update request, it would be able to do even if fuse_operations. I.e. in libfuse-lite, emulate "ATIME | MTIME" request if "MTIME" only (pass unchanged original atime), then call ->utime() callback. (or adds new utime2 callback with flags, or something other solutions)
Or, if that request is known limitation of fuse_operations, I think it would be clear state and ok. The fs needs to use lowlevel op to support that.
> With lowntfs-3g (release candidate only), this could > be possible.... but this is not implemented, as the > case was never found up to now. I can provide you > with a patch,... if fuse can feed in the flags selectively.
Yes. AFAIK, fuse of kernel part is passing FATTR_MTIME without FATTR_ATIME to userland (i.e. FUSE_SET_ATTR_ATIME and FUSE_SET_ATTR_MTIME in libfuse).
I think it's good to implement if it's not design decision of ntfs-3g.
[BTW, just my guess though, it would be good to use "if (vaild & ATTR_XXX)" style, not "switch()" to support various combinations of flags]
Thanks. -- OGAWA Hirofumi <hirofumi@mail.parknet.co.jp> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |