4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * (C) Copyright 2014 Commissariat a l'energie atomique et aux energies
9 * All rights reserved. This program and the accompanying materials
10 * are made available under the terms of the GNU Lesser General Public License
11 * (LGPL) version 2.1 or (at your discretion) any later version.
12 * (LGPL) version 2.1 accompanies this distribution, and is available at
13 * http://www.gnu.org/licenses/lgpl-2.1.html
15 * This library is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * Lesser General Public License for more details.
23 * lustre/utils/liblustreapi_lease.c
25 * lustreapi library for file leases
27 * Author: Henri Doreau <henri.doreau@cea.fr>
32 #include <sys/ioctl.h>
34 #include <lustre/lustreapi.h>
35 #include "lustreapi_internal.h"
38 static inline const char *lease_mode2str(int mode)
41 case LL_LEASE_WRLCK: return "WRITE";
42 case LL_LEASE_RDLCK: return "READ";
43 case LL_LEASE_UNLCK: return "UNLOCK";
49 * Get a lease on an open file.
51 * \param fd File to get the lease on.
52 * \param mode Lease mode, either LL_LEASE_RDLCK or LL_LEASE_WRLCK.
54 * \retval 0 on success.
55 * \retval -errno on error.
57 int llapi_lease_get(int fd, int mode)
61 if (mode != LL_LEASE_RDLCK && mode != LL_LEASE_WRLCK)
64 rc = ioctl(fd, LL_IOC_SET_LEASE, mode);
67 llapi_error(LLAPI_MSG_ERROR, rc, "cannot get %s lease",
68 lease_mode2str(mode));
74 * Check if a lease is still set on a file.
76 * \param fd File to check the lease on.
78 * \retval lease type if present (LL_LEASE_READ or LL_LEASE_WRITE).
79 * \retval 0 if no lease is present.
80 * \retval -errno on error.
82 int llapi_lease_check(int fd)
86 rc = ioctl(fd, LL_IOC_GET_LEASE);
89 llapi_error(LLAPI_MSG_ERROR, rc, "cannot check lease");
97 * \param fd File to remove the lease from.
99 * \retval type of the lease that was removed (LL_LEASE_READ or LL_LEASE_WRITE).
100 * \retval 0 if no lease was present.
101 * \retval -errno on error.
103 int llapi_lease_put(int fd)
107 rc = ioctl(fd, LL_IOC_SET_LEASE, LL_LEASE_UNLCK);
110 llapi_error(LLAPI_MSG_ERROR, rc, "cannot put lease");