4 # This file and its contents are supplied under the terms of the
5 # Common Development and Distribution License ("CDDL"), version 1.0.
6 # You may only use this file in accordance with the terms of version
9 # A full copy of the text of the CDDL should have accompanied this
10 # source. A copy of the CDDL is also available via the Internet at
11 # http://www.illumos.org/license/CDDL.
15 # Copyright (c) 2012, 2016 by Delphix. All rights reserved.
18 .
$STF_SUITE/include
/libtest.shlib
19 .
$STF_SUITE/tests
/functional
/nopwrite
/nopwrite.shlib
23 # Verify that nopwrite still updates file metadata correctly
26 # 1. Create a clone with nopwrite enabled.
27 # 2. Write to the file in that clone and verify the mtime and ctime change,
28 # but the atime does not.
31 verify_runnable
"global"
32 origin
="$TESTPOOL/$TESTFS"
37 datasetexists
$origin && log_must zfs destroy
-R $origin
38 log_must zfs create
-o mountpoint
=$TESTDIR $origin
41 log_assert
"nopwrite updates file metadata correctly"
43 log_must zfs
set compress=on
$origin
44 log_must zfs
set checksum
=sha256
$origin
45 dd if=/dev
/urandom of
=$TESTDIR/file bs
=1024k count
=$MEGS conv
=notrunc \
46 >/dev
/null
2>&1 || log_fail
"dd into $TESTDIR/file failed."
47 zfs snapshot
$origin@a || log_fail
"zfs snap failed"
48 log_must zfs clone
$origin@a
$origin/clone
50 o_atime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/atime/ {print $4}')
51 o_ctime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/ctime/ {print $4}')
52 o_mtime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/mtime/ {print $4}')
53 dd if=/$TESTDIR/file of
=/$TESTDIR/clone
/file bs
=1024k count
=$MEGS \
54 conv
=notrunc
>/dev
/null
2>&1 || log_fail
"dd failed."
55 atime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/atime/ {print $4}')
56 ctime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/ctime/ {print $4}')
57 mtime
=$
(ls -E% all
$TESTDIR/clone
/file |
awk '/mtime/ {print $4}')
59 [[ $o_atime = $atime ]] || log_fail
"atime changed: $o_atime $atime"
60 [[ $o_ctime = $ctime ]] && log_fail
"ctime unchanged: $o_ctime $ctime"
61 [[ $o_mtime = $mtime ]] && log_fail
"mtime unchanged: $o_mtime $mtime"
63 log_must verify_nopwrite
$origin $origin@a
$origin/clone
65 log_pass
"nopwrite updates file metadata correctly"