From 1c0b33293486a49ce44c8525bb7cc7bcd391896c Mon Sep 17 00:00:00 2001 From: Christoph Hellwig Date: Tue, 12 Jan 2010 22:47:21 +0100 Subject: [PATCH] add a test for ctimes updates in futimens Add a test to check if we update the ctime properly if not updating the mtime in futimens. Uses a C program contributed by Eric Blake . Signed-off-by: Christoph Hellwig Reviewed-by: Dave Chinner --- 221 | 49 ++++++++++++++++++++++++++++++++++++++++++++++++ 221.out | 2 ++ group | 1 + src/Makefile | 3 ++- src/t_futimens.c | 32 +++++++++++++++++++++++++++++++ 5 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 221 create mode 100644 221.out create mode 100644 src/t_futimens.c diff --git a/221 b/221 new file mode 100644 index 000000000..c7fa64d9b --- /dev/null +++ b/221 @@ -0,0 +1,49 @@ +#! /bin/sh +# FS QA Test No. 221 +# +# Check ctime updates when calling futimens without UTIME_OMIT for the +# mtime entry. +# +# Based on a bug report and testcase from Eric Blake . +# +#----------------------------------------------------------------------- +# Copyright (c) 2010 Christoph Hellwig. All Rights Reserved. +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it would be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write the Free Software Foundation, +# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +#----------------------------------------------------------------------- +# +# creator +owner=hch@lst.de + +seq=`basename $0` +echo "QA output created by $seq" + +here=`pwd` +tmp=/tmp/$$ +status=1 # failure is the default! + +# get standard environment, filters and checks +. ./common.rc + +# real QA test starts here +_supported_fs generic +_supported_os Linux + +echo "Silence is golden." + +(cd $TEST_DIR && $here/src/t_futimens) + +status=0 +exit $status diff --git a/221.out b/221.out new file mode 100644 index 000000000..1c6aa0f92 --- /dev/null +++ b/221.out @@ -0,0 +1,2 @@ +QA output created by 221 +Silence is golden. diff --git a/group b/group index ecf15c6b2..07bcf2655 100644 --- a/group +++ b/group @@ -330,3 +330,4 @@ prealloc 218 auto fsr quick 219 auto quota quick 220 auto quota quick +221 auto metadata quick diff --git a/src/Makefile b/src/Makefile index 9f1960510..71a32c912 100644 --- a/src/Makefile +++ b/src/Makefile @@ -15,7 +15,8 @@ TARGETS = dirstress fill fill2 getpagesize holes lstat64 \ LINUX_TARGETS = xfsctl bstat t_mtab getdevicesize \ preallo_rw_pattern_reader preallo_rw_pattern_writer ftrunc trunc \ fs_perms testx looptest locktest unwritten_mmap \ - bulkstat_unlink_test bulkstat_unlink_test_modified t_dir_offset + bulkstat_unlink_test bulkstat_unlink_test_modified t_dir_offset \ + t_futimens ifeq ($(HAVE_XLOG_ASSIGN_LSN), true) LINUX_TARGETS += loggen diff --git a/src/t_futimens.c b/src/t_futimens.c new file mode 100644 index 000000000..0c48e945e --- /dev/null +++ b/src/t_futimens.c @@ -0,0 +1,32 @@ +/* + * Check ctime updates when calling futimens without UTIME_OMIT for the + * mtime entry. + * + * Copyright (c) 2009 Eric Blake + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2, or (at your option) + * any later version. + */ +#include +#include +#include +#include + +int +main(int argc, char **argv) +{ + int fd = creat ("file", 0600); + struct stat st1, st2; + struct timespec t[2] = { { 1000000000, 0 }, { 0, UTIME_OMIT } }; + + fstat(fd, &st1); + sleep(1); + futimens(fd, t); + fstat(fd, &st2); + + if (st1.st_ctime == st2.st_ctime) + printf("failed to update ctime!\n"); + return 0; +} -- 2.50.1