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.gnu.org/licenses/gpl-2.0.html
23 * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved.
24 * Use is subject to license terms.
26 * Copyright (c) 2015, Intel Corporation.
29 * This file is part of Lustre, http://www.lustre.org/
30 * Lustre is a trademark of Sun Microsystems, Inc.
32 * lustre/tests/flock.c
34 * Lustre Light user test program
44 #include <sys/types.h>
47 #include <sys/queue.h>
55 static char lustre_path[] = "/mnt/lustre";
61 sprintf(buf, "===== START %s: %s ", __FUNCTION__, (str)); \
64 memset(buf+len, '=', 100-len); \
75 sprintf(buf, "===== END TEST %s: successfully ", \
79 memset(buf+len, '=', 100-len); \
88 #define MAX_PATH_LENGTH 4096
91 int t_fcntl(int fd, int cmd, ...)
104 printf("fcntl GETFL failed: %s\n",
110 arg = va_arg(ap, long);
112 rc = fcntl(fd, cmd, arg);
114 printf("fcntl SETFL %ld failed: %s\n",
115 arg, strerror(errno));
122 lock = va_arg(ap, struct flock *);
124 rc = fcntl(fd, cmd, lock);
126 printf("fcntl cmd %d failed: %s\n",
127 cmd, strerror(errno));
132 arg = va_arg(ap, long);
134 rc = fcntl(fd, cmd, arg);
136 printf("fcntl F_DUPFD %d failed: %s\n",
137 (int)arg, strerror(errno));
143 printf("fcntl cmd %d not supported\n", cmd);
146 printf("fcntl %d = %d, ltype = %d\n", cmd, rc, lock->l_type);
150 int t_unlink(const char *path)
156 printf("unlink(%s) error: %s\n", path, strerror(errno));
164 char file[MAX_PATH_LENGTH] = "";
166 struct flock lock = {
168 .l_whence = SEEK_SET,
171 ENTRY("basic fcntl support");
172 snprintf(file, MAX_PATH_LENGTH, "%s/test_t21_file", lustre_path);
174 fd = open(file, O_RDWR|O_CREAT, (mode_t)0666);
176 printf("open(%s) error: %s\n", file, strerror(errno));
180 t_fcntl(fd, F_SETFL, O_APPEND);
181 if (!(ret = t_fcntl(fd, F_GETFL)) & O_APPEND) {
182 printf("error get flag: ret %x\n", ret);
186 t_fcntl(fd, F_SETLK, &lock);
187 t_fcntl(fd, F_GETLK, &lock);
188 lock.l_type = F_WRLCK;
189 t_fcntl(fd, F_SETLKW, &lock);
190 t_fcntl(fd, F_GETLK, &lock);
191 lock.l_type = F_UNLCK;
192 t_fcntl(fd, F_SETLK, &lock);
200 int main(int argc, char * const argv[])
202 /* Set D_VFSTRACE to see messages from ll_file_flock.
203 The test passes either with -o flock or -o noflock
204 mount -o flock -t lustre uml1:/mds1/client /mnt/lustre */
207 printf("completed successfully\n");