return SMB_VFS_NEXT_SYMLINK(handle, link_contents, new_smb_fname);
}
-static int ceph_snap_gmt_link(vfs_handle_struct *handle,
- const struct smb_filename *old_smb_fname,
- const struct smb_filename *new_smb_fname)
-{
- int ret;
- time_t timestamp_old = 0;
- time_t timestamp_new = 0;
-
- ret = ceph_snap_gmt_strip_snapshot(handle,
- old_smb_fname->base_name,
- ×tamp_old,
- NULL, 0);
- if (ret < 0) {
- errno = -ret;
- return -1;
- }
- ret = ceph_snap_gmt_strip_snapshot(handle,
- new_smb_fname->base_name,
- ×tamp_new,
- NULL, 0);
- if (ret < 0) {
- errno = -ret;
- return -1;
- }
- if ((timestamp_old != 0) || (timestamp_new != 0)) {
- errno = EROFS;
- return -1;
- }
- return SMB_VFS_NEXT_LINK(handle, old_smb_fname, new_smb_fname);
-}
-
static int ceph_snap_gmt_linkat(vfs_handle_struct *handle,
files_struct *srcfsp,
const struct smb_filename *old_smb_fname,
.disk_free_fn = ceph_snap_gmt_disk_free,
.get_quota_fn = ceph_snap_gmt_get_quota,
.renameat_fn = ceph_snap_gmt_renameat,
- .link_fn = ceph_snap_gmt_link,
.linkat_fn = ceph_snap_gmt_linkat,
.symlink_fn = ceph_snap_gmt_symlink,
.stat_fn = ceph_snap_gmt_stat,