Jean-Pierre André<jean-pierre.andre@xxxxxxxxxx> writes:
Hi all,Hi,
OGAWA Hirofumi wrote:I don't know which version is used by actual user. But, well, I've got
Eric Blake<ebb9@xxxxxxx> writes:Which ntfs-3g version are you using ?
It is likely the issue of libfuse or ntfs-3g. I don't know about ntfs-3g
people at all. So, for now, just Cc: to fuse people.
source by "apt-get source", and the version was 1:2009.4.4-1.
Now, I've got ntfs-3g-2009.11.14AC.2.tgz from specified url.
Well, the problem seems in fuse_lib_setattr() and ntfs_fuse_setattr()Currently ntfs-3g does not set sub-second precision.utimensat(0, NULL, {UTIME_OMIT, UTIME_NOW}, 0) = 0
There is also a slight problem in the fuse interface :
the time buffer is never passed as NULL, consequently
in some circumstances ntfs-3g cannot decide correctly
over permissions. A permissive action is taken in this
situation.
With the latest ntfs-3g, currently as a release candidate,From this, "ia_valid" will have "ATTR_CTIME | ATTR_MTIME". And therequest would pass to userland via fuse of kernel part, then it will be
handled by libfuse.
From quick grep of libfuse and ntfs-3g (would not be latest), ntfs-3g isusing "struct fuse_operations", not "struct fuse_lowlevel_ops".
you can (optionally) use the low level fuse interface
http://pagesperso-orange.fr/b.andre/advanced-ntfs-3g.html
use the "lowntfs-3g" driver instead of "ntfs-3g"
(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()?
In fuse_lib_setattr(),
if (!err&& (valid& (FUSE_SET_ATTR_ATIME | FUSE_SET_ATTR_MTIME)) ==
(FUSE_SET_ATTR_ATIME | FUSE_SET_ATTR_MTIME)) {
In ntfs_fuse_setattr(),
case FUSE_SET_ATTR_ATIME + FUSE_SET_ATTR_MTIME :
res = ntfs_fuse_utime(&security, ino, attr,&stbuf);
Or I'm missing something?
Thanks.