4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
28 * Copyright (c) 2012 by Delphix. All rights reserved.
32 * --------------------------------------------------------------------
33 * The purpose of this test is to see if the bug reported (#4723351) for
34 * UFS exists when using a ZFS file system.
35 * --------------------------------------------------------------------
44 #include <sys/types.h>
50 static char *filebase
;
55 return (random() % 1000);
65 len
= strlen(filebase
) + 5;
69 (void) snprintf(buf
, len
, "%s.%03d", filebase
, idx
);
70 ret
= rename(filebase
, buf
);
71 if (ret
< 0 && errno
!= ENOENT
)
72 (void) perror("renaming file");
85 len
= strlen(filebase
) + 5;
89 (void) snprintf(buf
, len
, "%s.%03d", filebase
, idx
);
91 if (ret
< 0 && errno
!= ENOENT
)
92 (void) perror("removing file");
108 *fd
= open(filebase
, O_APPEND
| O_RDWR
| O_CREAT
, 0644);
110 perror("fail to open test file, refreshing it");
114 ret
= write(*fd
, "test\n", 5);
116 perror("writing file");
123 main(int argc
, char **argv
)
129 (void) printf("Usage: %s <filebase>\n", argv
[0]);
134 fd
= open(filebase
, O_APPEND
| O_RDWR
| O_CREAT
, 0644);
136 perror("creating test file");
140 (void) pthread_setconcurrency(4); /* 3 threads + main */
141 (void) pthread_create(&tid
, NULL
, mover
, NULL
);
142 (void) pthread_create(&tid
, NULL
, cleaner
, NULL
);
143 (void) pthread_create(&tid
, NULL
, writer
, (void *) &fd
);
149 ret
= stat(filebase
, &st
);
150 if (ret
== 0 && (st
.st_nlink
> 2 || st
.st_nlink
< 1)) {
151 (void) printf("st.st_nlink = %d, exiting\n", \