4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 only,
8 * as published by the Free Software Foundation.
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * General Public License version 2 for more details (a copy is included
14 * in the LICENSE file that accompanied this code).
16 * You should have received a copy of the GNU General Public License
17 * version 2 along with this program; If not, see
18 * http://www.sun.com/software/products/lustre/docs/GPLv2.pdf
20 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
21 * CA 95054 USA or visit www.sun.com if you need additional information or
27 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
28 * Use is subject to license terms.
31 * This file is part of Lustre, http://www.lustre.org/
32 * Lustre is a trademark of Sun Microsystems, Inc.
34 * lustre/tests/flock.c
36 * Lustre Light user test program
46 #include <sys/types.h>
49 #include <sys/queue.h>
57 static char lustre_path[] = "/mnt/lustre";
63 sprintf(buf, "===== START %s: %s ", __FUNCTION__, (str)); \
66 memset(buf+len, '=', 100-len); \
77 sprintf(buf, "===== END TEST %s: successfully ", \
81 memset(buf+len, '=', 100-len); \
90 #define MAX_PATH_LENGTH 4096
93 int t_fcntl(int fd, int cmd, ...)
106 printf("fcntl GETFL failed: %s\n",
112 arg = va_arg(ap, long);
114 rc = fcntl(fd, cmd, arg);
116 printf("fcntl SETFL %ld failed: %s\n",
117 arg, strerror(errno));
124 lock = va_arg(ap, struct flock *);
126 rc = fcntl(fd, cmd, lock);
128 printf("fcntl cmd %d failed: %s\n",
129 cmd, strerror(errno));
134 arg = va_arg(ap, long);
136 rc = fcntl(fd, cmd, arg);
138 printf("fcntl F_DUPFD %d failed: %s\n",
139 (int)arg, strerror(errno));
145 printf("fcntl cmd %d not supported\n", cmd);
148 printf("fcntl %d = %d, ltype = %d\n", cmd, rc, lock->l_type);
152 int t_unlink(const char *path)
158 printf("unlink(%s) error: %s\n", path, strerror(errno));
166 char file[MAX_PATH_LENGTH] = "";
168 struct flock lock = {
170 .l_whence = SEEK_SET,
173 ENTRY("basic fcntl support");
174 snprintf(file, MAX_PATH_LENGTH, "%s/test_t21_file", lustre_path);
176 fd = open(file, O_RDWR|O_CREAT, (mode_t)0666);
178 printf("error open file: %m\n", file);
182 t_fcntl(fd, F_SETFL, O_APPEND);
183 if (!(ret = t_fcntl(fd, F_GETFL)) & O_APPEND) {
184 printf("error get flag: ret %x\n", ret);
188 t_fcntl(fd, F_SETLK, &lock);
189 t_fcntl(fd, F_GETLK, &lock);
190 lock.l_type = F_WRLCK;
191 t_fcntl(fd, F_SETLKW, &lock);
192 t_fcntl(fd, F_GETLK, &lock);
193 lock.l_type = F_UNLCK;
194 t_fcntl(fd, F_SETLK, &lock);
202 int main(int argc, char * const argv[])
204 /* Set D_VFSTRACE to see messages from ll_file_flock.
205 The test passes either with -o flock or -o noflock
206 mount -o flock -t lustre uml1:/mds1/client /mnt/lustre */
209 printf("completed successfully\n");