lkml.org 
[lkml]   [2009]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [fuse-devel] utimensat fails to update ctime
    Date
    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/

    \
     
     \ /
      Last update: 2009-12-22 14:33    [W:3.305 / U:0.104 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site