Re: [patch?] truncate and timestamps

From: Andries.Brouwer@cwi.nl
Date: Thu May 22 2003 - 19:17:52 EST


    From: Andrew Morton <akpm@digeo.com>

> Investigating why some SuSE init script no longer works, I find:
> The shell command
> > file
> does not update the time stamp of file in case it existed and had size 0.

    oops. That's due to me "don't call vmtruncate if i_size didn't change"
    speedup. It was a pretty good speedup too.

    Does this look sane?

Well, before this 2.5.66 patch vmtruncate() was called, which called
foofs->truncate(), which probably did
        inode->i_mtime = inode->i_ctime = CURRENT_TIME;
and it looks like you do the same now. So, yes.

[Why is this in foofs->truncate() and not in vfs code?]

[It looks like the only way ATTR_SIZE can be set is from the
do_truncate, so maybe your patch is equivalent to changing open.c:

88c88
< newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;

---
>       newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME | ATTR_MTIME;

("It looks like" means: nfs does unspeakable things, intermezzo has izo_do_truncate(), a copy of do_truncate(), hpfs_unlink() tries a truncate if there is no space for a delete, ncp_notify_change() may have ATTR_SIZE without ATTR_MTIME.)]

On the other hand, my question was really a different one: do we want to follow POSIX, also in the silly requirement that truncate only sets mtime when the size changes, while O_TRUNC and ftruncate always set mtime.

If so, we have to uglify do_truncate().

Andries - 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/



This archive was generated by hypermail 2b29 : Fri May 23 2003 - 22:00:52 EST