zfs/tests/zfs-tests/include
LOLi 99834d1950 Fix truncate(2) mtime and ctime handling
On Linux, ftruncate(2) always changes the file timestamps, even if the
file size is not changed. However, in case of a successfull
truncate(2), the timestamps are updated only if the file size changes.
This translates to the VFS calling the ZFS Posix Layer "setattr"
function (zpl_setattr) with ATTR_MTIME and ATTR_CTIME unconditionally
set on the iattr mask only when doing a ftruncate(2), while the
truncate(2) is left to the filesystem implementation to be dealt with.

This behaviour is consistent with POSIX:2004/SUSv3 specifications
where there's no explicit requirement for file size changes to update
the timestamps only for ftruncate(2):

http://pubs.opengroup.org/onlinepubs/009695399/functions/truncate.html
http://pubs.opengroup.org/onlinepubs/009695399/functions/ftruncate.html

This has been later updated in POSIX:2008/SUSv4 where, for both
truncate(2)/ftruncate(2), there's no mention of this size change
requirement:

http://austingroupbugs.net/view.php?id=489
http://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html
http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html

Unfortunately the Linux VFS is still calling into the ZPL without
ATTR_MTIME/ATTR_CTIME set in the truncate(2) case: we fix this by
explicitly updating the timestamps when detecting the ATTR_SIZE bit,
which is always set in do_truncate(), on the iattr mask.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: loli10K <ezomori.nozomu@gmail.com>
Closes #6811 
Closes #6819
2017-11-13 09:24:26 -08:00
..
.gitignore Add zpool events tests 2017-05-22 12:34:42 -04:00
Makefile.am Added no_scrub_restart flag to zpool reopen 2017-10-26 12:26:09 -07:00
blkdev.shlib Added no_scrub_restart flag to zpool reopen 2017-10-26 12:26:09 -07:00
commands.cfg Encryption patch follow-up 2017-10-11 16:54:48 -04:00
default.cfg.in Emit history events for 'zpool create' 2017-10-23 09:45:59 -07:00
libtest.shlib Added no_scrub_restart flag to zpool reopen 2017-10-26 12:26:09 -07:00
math.shlib Fix truncate(2) mtime and ctime handling 2017-11-13 09:24:26 -08:00
properties.shlib Disable nbmand tests on kernels w/o support 2017-07-24 11:03:50 -07:00
zpool_script.shlib Prebaked scripts for zpool status/iostat -c 2017-04-21 09:27:04 -07:00