@@ -5665,6 +5665,19 @@
return _setattr(in, &attr, CEPH_SETATTR_MTIME|CEPH_SETATTR_ATIME);
}
+int Client::flock(int fd, int operation, uint64_t owner)
+{
+ Mutex::Locker lock(client_lock);
+ tout(cct) << "flock" << std::endl;
+ tout(cct) << fd << std::endl;
+ tout(cct) << operation << std::endl;
+ Fh *f = get_filehandle(fd);
+ if (!f)
+ return -EBADF;
+
+ return _flock(f, operation, owner, NULL);
+}
+
int Client::opendir(const char *relpath, dir_result_t **dirpp)
{
Mutex::Locker lock(client_lock);
@@ -813,6 +813,7 @@
int lchown(const char *path, int uid, int gid);
int utime(const char *path, struct utimbuf *buf);
int lutime(const char *path, struct utimbuf *buf);
+ int flock(int fd, int operation, uint64_t owner);
int truncate(const char *path, loff_t size);
// file ops
@@ -684,6 +684,21 @@
int ceph_utime(struct ceph_mount_info *cmount, const char *path, struct utimbuf *buf);
/**
+ * Apply or remove an advisory lock.
+ *
+ * @param cmount the ceph mount handle to use for performing the utime.
+ * @param fd the open file descriptor to change advisory lock.
+ * @param operation the advisory lock operation to be performed on the file
+ * descriptor among LOCK_SH (shared lock), LOCK_EX (exclusive lock),
+ * or LOCK_UN (remove lock). The LOCK_NB value can be ORed to perform a
+ * non-blocking operation.
+ * @param owner the user-supplied owner identifier
+ * @returns 0 on success or negative error code on failure.
+ */
+int ceph_flock(struct ceph_mount_info *cmount, int fd, int operation,
+ uint64_t owner);
+
+/**
* Truncate the file to the given size. If this operation causes the
* file to expand, the empty bytes will be filled in with zeros.
*
@@ -718,6 +718,14 @@
return cmount->get_client()->utime(path, buf);
}
+extern "C" int ceph_flock(struct ceph_mount_info *cmount, int fd, int operation,
+ uint64_t owner)
+{
+ if (!cmount->is_mounted())
+ return -ENOTCONN;
+ return cmount->get_client()->flock(fd, operation, owner);
+}
+
extern "C" int ceph_truncate(struct ceph_mount_info *cmount, const char *path,
int64_t size)
{