> Need an entry in .gitignore file too.
Will add this.
>> SUBDIRS =
>>
>> diff --git a/src/y2038_futimens.c b/src/y2038_futimens.c
>> new file mode 100644
>> index 000..291e4fa
>> --- /dev/null
>> +++ b/src/y2038_futimens.c
>> @@ -0,0 +1,61 @@
>> +#include
>> +#include
>> +#include
>> +#include
>> +#include
>> +
>> +int
>> +do_utime(int fd, long long time)
>> +{
>> + struct timespec t[2];
>> +
>> + /*
>> + * Convert long long to timespec format.
>> + * Seconds precision is assumed here.
>> + */
>> + t[0].tv_sec = time;
>> + t[0].tv_nsec = 0;
>> + t[1].tv_sec = time;
>> + t[1].tv_nsec = 0;
>> +
>> + /* Call utimens to update time. */
>> + if (futimens(fd, t)) {
>> + perror("futimens");
>> + return 1;
>> + }
>> +
>> + return 0;
>> +}
>> +
>> +int
>> +main(int argc, char **argv)
>> +{
>> + int fd;
>> + long long time;
>> +
>> + if(argc < 3) {
>> + fprintf(stderr, "Usage: %s filename timestamp\n"
>> + "Filename: file to be created or
>> opened in current directory\n"
>> + "Timestamp: is seconds since
>> 1970-01-01 00:00:00 UTC\n", argv[0]);
>> + exit(1);
>
> Seems there's no need for an extra level of indention :)
Ok, will fix this.
>> + }
>> +
>> + /* Create the file */
>> + fd = creat(argv[1], 0666);
>> + if(fd < 0) {
>> + perror("creat");
>> + exit(1);
>> + }
>> +
>> + /* Get the timestamp */
>> + time = strtoull(argv[2], NULL, 0);
>> + if (errno) {
>
> From errno(3), errno is never set to zero by any system call or library
> function, so errno isn't reset to zero on strtoull and this check always
> fails for me, with errno = ENOENT, because:
>
> ...
> access("/usr/share/dracut/modules.d/01fips", F_OK) = -1 ENOENT (No such file
> or directory)
> ...
> write(4, "strtoull: No such file or direct"..., 36strtoull: No such file or
> directory
>
> the errno was from access(2) call in my case.
Right. Man page for strtoull() says:
Since strtoul() can legitimately return 0 or ULONG_MAX (ULLONG_MAX for
strtoull()) on both success and failure, the calling program should
set errno to 0 before the call, and then determine if an error
occurred by checking whether errno has a nonzero value after the call.
I will set errno to 0 before strtoull().
Thanks.
>> diff --git a/tests/generic/390 b/tests/generic/390
>> new file mode 100755
>> index 000..f069988
>> --- /dev/null
>> +++ b/tests/generic/390
>> @@ -0,0 +1,238 @@
>> +#! /bin/bash
>> +# FS QA Test No. generic/390
>> +#
>> +# Tests to verify policy for filesystem timestamps for
>> +# supported ranges:
>> +# 1. Verify filesystem rw mount according to sysctl
>> +# timestamp_supported.
>> +# 2. Verify timestamp clamping for timestamps beyond max
>> +# timestamp supported.
>> +#
>> +# Exit status 1: either or both tests above fail.
>> +# Exit status 0: both the above tests pass.
>
> Please use "./new" script to generate template, which contains all
> necessary initial setups and the copyright info.
Thanks, will do.
>> +
>> +seq=`basename $0`
>> +seqres=$RESULT_DIR/$seq
>> +echo "QA output created by $seq"
>> +#echo "output in $seqres.full"
>> +here=`pwd`
>> +
>> +# Get standard environment, filters and checks.
>> +. ./common/rc
>> +. ./common/filter
>> +. ./common/attr
>> +
>> +SRC_GROUPS=`find tests -not -path tests -type d -printf "%f "`
>
> What's this for? Seems it's not used in the test.
Yes, this is not required. Leftovers from some previous version of the test.
Thanks.
>> +
>> +# Prerequisites for the test run.
>> +_supported_fs generic
>> +_supported_os Linux
>> +_require_scratch
>
> Need to check the existence of y2038_futimens program, to make sure it's
> really built, e.g.
>
> _require_test_program "y2038_futimens"
Will add this
>> +Y2038_PROG=$here/src/y2038_futimens
>> +
>> +#initialize exit status
>> +status=0
>
> We use 1 as the default value of status, so you can just "exit" on
> failure (because trap will catch the signal and exit with $status again)
> and only set status=0 and exit when test passes. "./new" already sets it
> up for you :)
Will take care of this.
>> +
>> +# Generic test cleanup function.
>> +_cleanup()
>> +{
>> +# Remove any leftover files from last run.
>> +rm -f ${SCRATCH_MNT}/test_?
>
> No need to cleanup files on SCRATCH_DEV, it's meant to be mkfs'ed every
> time before using it.
Ok, makes sense. I will remove this clean up.
>> +#unmount and mount $SCRATCH_DEV.
>> +_umount_mount_scratch_dev()
>
> There's a helper to do this: _scratch_cycle_mount, only that it doesn't
> change PWD. And if you don't want to write $SCRATCH_MNT again, this is
> what we do usually in fstests:
>
> testfile=$SCRATCH_MNT/
> ...
> do_test $testfile
Thanks, will change it similar to what you suggest.
>> +{
>> +#change directory so that you are not using