blob: ef57396e4328feebb6fe9b202286f8b9aa91cd0d [file] [log] [blame]
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +00001#!/bin/sh
2
3# Check how ftruncate, lseek and stat family syscalls are traced.
4
5. "${srcdir=.}/init.sh"
6
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +00007check_prog dd
8check_prog find
9check_prog grep
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000010
Dmitry V. Levin655633e2015-01-08 00:32:35 +000011OUT="$LOG.out"
12size=46118400000
13sample=stat_sample
14
15rm -f $sample
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000016umask 022
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000017
Dmitry V. Levined7ada22015-01-13 00:06:09 +000018truncate_cmd="dd seek=$size bs=1 count=0 if=/dev/null of=$sample"
Dmitry V. Levin655633e2015-01-08 00:32:35 +000019$truncate_cmd > "$OUT" 2>&1 || {
20 cat "$OUT"
21 framework_skip_ 'failed to create a large sparse file'
22}
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000023
Dmitry V. Levin655633e2015-01-08 00:32:35 +000024find_cmd="find $sample -quit"
25$find_cmd || framework_skip_ "$find_cmd failed"
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000026
Dmitry V. Levin655633e2015-01-08 00:32:35 +000027find_L_cmd="find -L $sample -quit"
28$find_L_cmd || framework_skip_ "$find_L_cmd failed"
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000029
Dmitry V. Levin655633e2015-01-08 00:32:35 +000030rm -f $sample
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000031
Dmitry V. Levin655633e2015-01-08 00:32:35 +000032$STRACE -o "$LOG" -edesc $truncate_cmd 2>&1 > "$OUT" 2>&1 || {
33 cat "$LOG" "$OUT"
34 fail_ "$STRACE -edesc $truncate_cmd failed"
35}
36
37rm -f "$OUT"
38
39r_ftruncate="ftruncate(64)?\\(1, $size\\) += 0"
40LC_ALL=C grep -E -x "$r_ftruncate" "$LOG" > /dev/null || {
41 cat "$LOG"
42 fail_ 'strace -edesc failed to trace ftruncate/ftruncate64 properly'
43}
44
45r_lseek="lseek\\(1, $size, SEEK_CUR\\) += $size"
46r_llseek="_llseek\\(1, $size, \\[$size\\], SEEK_CUR\\) += 0"
47LC_ALL=C grep -E -x "$r_lseek|$r_llseek" "$LOG" > /dev/null || {
48 cat "$LOG"
49 fail_ 'strace -edesc failed to trace lseek/_llseek properly'
50}
51
52$STRACE -o "$LOG" -efile $find_L_cmd || {
53 cat "$LOG"
54 fail_ "$STRACE -efile $find_L_cmd failed"
55}
56
57stat="\\{st_mode=S_IFREG\\|0644, st_size=$size, \\.\\.\\.\\}"
58r_stat="stat(64)?\\(\"$sample\", $stat\\) += 0"
59r_fstatat="(new)?fstatat(64)?\\(AT_FDCWD, \"$sample\", $stat, 0\\) += 0"
60LC_ALL=C grep -E -x "$r_stat|$r_fstatat" "$LOG" > /dev/null || {
61 cat "$LOG"
62 fail_ 'strace -efile failed to trace stat/stat64 properly'
63}
64
65$STRACE -o "$LOG" -efile $find_cmd || {
66 cat "$LOG"
67 fail_ "$STRACE -efile $find_cmd failed"
68}
69
70r_lstat="lstat(64)?\\(\"$sample\", $stat\\) += 0"
71r_lfstatat="(new)?fstatat(64)?\\(AT_FDCWD, \"$sample\", $stat, AT_SYMLINK_NOFOLLOW\\) += 0"
72LC_ALL=C grep -E -x "$r_lstat|$r_lfstatat" "$LOG" > /dev/null || {
73 cat "$LOG"
74 fail_ 'strace -efile failed to trace fstatat/fstatat64 properly'
75}
76
77rm -f $sample
Mike Frysinger1970da02013-05-02 15:35:40 -040078
Dmitry V. Levin318b0dd2013-05-02 00:44:57 +000079exit 0