diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c index 0a181327d27..7aaa8e3aa24 100644 --- a/source3/modules/vfs_ceph.c +++ b/source3/modules/vfs_ceph.c @@ -1171,6 +1171,28 @@ static int cephwrap_link(struct vfs_handle_struct *handle, WRAP_RETURN(result); } +static int cephwrap_linkat(struct vfs_handle_struct *handle, + files_struct *srcfsp, + const struct smb_filename *old_smb_fname, + files_struct *dstfsp, + const struct smb_filename *new_smb_fname, + int flags) +{ + int result = -1; + DBG_DEBUG("[CEPH] link(%p, %s, %s)\n", handle, + old_smb_fname->base_name, + new_smb_fname->base_name); + + SMB_ASSERT(srcfsp == srcfsp->conn->cwd_fsp); + SMB_ASSERT(dstfsp == dstfsp->conn->cwd_fsp); + + result = ceph_link(handle->data, + old_smb_fname->base_name, + new_smb_fname->base_name); + DBG_DEBUG("[CEPH] link(...) = %d\n", result); + WRAP_RETURN(result); +} + static int cephwrap_mknod(struct vfs_handle_struct *handle, const struct smb_filename *smb_fname, mode_t mode, @@ -1452,6 +1474,7 @@ static struct vfs_fn_pointers ceph_fns = { .symlink_fn = cephwrap_symlink, .readlink_fn = cephwrap_readlink, .link_fn = cephwrap_link, + .linkat_fn = cephwrap_linkat, .mknod_fn = cephwrap_mknod, .realpath_fn = cephwrap_realpath, .chflags_fn = cephwrap_chflags,