Modifying XATTRs doesnt change the ctime

Changing any metadata, should modify the ctime.

Reviewed-by: Chunwei Chen <tuxoko@gmail.com>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: gaurkuma <gauravk.18@gmail.com>
Closes #3644
Closes #6586
This commit is contained in:
Gaurav Kumar
2017-09-13 12:20:07 -07:00
committed by Tony Hutter
parent a2a0440918
commit d3e7d981d4
5 changed files with 84 additions and 6 deletions
@@ -3,10 +3,11 @@ include $(top_srcdir)/config/Rules.am
pkgdatadir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/ctime
dist_pkgdata_SCRIPTS = \
ctime_001_pos.ksh \
cleanup.ksh \
setup.ksh
pkgexecdir = $(datadir)/@PACKAGE@/zfs-tests/tests/functional/ctime
pkgexec_PROGRAMS = ctime_001_pos
ctime_001_pos_SOURCES = ctime_001_pos.c
pkgexec_PROGRAMS = ctime
ctime_SOURCES = ctime.c
@@ -31,6 +31,7 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/xattr.h>
#include <utime.h>
#include <stdio.h>
#include <stdlib.h>
@@ -250,6 +251,24 @@ do_chown(const char *pfile)
return (ret);
}
static int
do_xattr(const char *pfile)
{
int ret = 0;
char *value = "user.value";
if (pfile == NULL) {
return (-1);
}
if (setxattr(pfile, "user.x", value, strlen(value), 0) == -1) {
(void) fprintf(stderr, "setxattr(%s, %d, %d) failed with errno "
"%d\n", pfile, (int)getuid(), (int)getgid(), errno);
return (1);
}
return (ret);
}
static void
cleanup(void)
{
@@ -270,6 +289,7 @@ static timetest_t timetest_table[] = {
{ ST_CTIME, "st_ctime", do_chown },
{ ST_CTIME, "st_ctime", do_link },
{ ST_CTIME, "st_ctime", do_utime },
{ ST_CTIME, "st_ctime", do_xattr },
};
#define NCOMMAND (sizeof (timetest_table) / sizeof (timetest_table[0]))
@@ -281,7 +301,6 @@ main(int argc, char *argv[])
int i, ret, fd;
char *penv[] = {"TESTDIR", "TESTFILE0"};
(void) fprintf(stdout, "Verify [acm]time is modified appropriately.\n");
(void) atexit(cleanup);
/*
@@ -347,6 +366,5 @@ main(int argc, char *argv[])
}
}
(void) fprintf(stdout, "PASS\n");
return (0);
}
@@ -0,0 +1,44 @@
#!/bin/ksh -p
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License (the "License").
# You may not use this file except in compliance with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
# Copyright 2007 Sun Microsystems, Inc. All rights reserved.
# Use is subject to license terms.
#
. $STF_SUITE/include/libtest.shlib
# . $STF_SUITE/tests/functional/xattr/xattr_common.kshlib
#
# DESCRIPTION:
#
# Verify [acm]time is modified appropriately with xattr=on|sa
set -A args "sa" "on"
log_note "Verify [acm]time is modified appropriately."
for arg in ${args[*]}; do
log_note "Testing with xattr set to $arg"
log_must zfs set xattr=$arg $TESTPOOL
log_must $STF_SUITE/tests/functional/ctime/ctime
done
log_pass "PASS"