]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: VFS: vfs_ceph_snapshots. Implement mkdirat().
authorJeremy Allison <jra@samba.org>
Wed, 4 Sep 2019 22:43:44 +0000 (15:43 -0700)
committerRalph Boehme <slow@samba.org>
Wed, 11 Sep 2019 18:24:29 +0000 (18:24 +0000)
Currently identical to mkdir().

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_ceph_snapshots.c

index 3980067816da6acb7af667f173e81b2800a5537a..fb5ea46c556ea5aad3f0c04c5a36d76643c04184 100644 (file)
@@ -1331,6 +1331,31 @@ static int ceph_snap_gmt_mkdir(vfs_handle_struct *handle,
        return SMB_VFS_NEXT_MKDIR(handle, csmb_fname, mode);
 }
 
+static int ceph_snap_gmt_mkdirat(vfs_handle_struct *handle,
+                               struct files_struct *dirfsp,
+                               const struct smb_filename *csmb_fname,
+                               mode_t mode)
+{
+       time_t timestamp = 0;
+       int ret;
+
+       ret = ceph_snap_gmt_strip_snapshot(handle,
+                                       csmb_fname->base_name,
+                                       &timestamp, NULL, 0);
+       if (ret < 0) {
+               errno = -ret;
+               return -1;
+       }
+       if (timestamp != 0) {
+               errno = EROFS;
+               return -1;
+       }
+       return SMB_VFS_NEXT_MKDIRAT(handle,
+                       dirfsp,
+                       csmb_fname,
+                       mode);
+}
+
 static int ceph_snap_gmt_rmdir(vfs_handle_struct *handle,
                                const struct smb_filename *csmb_fname)
 {
@@ -1644,6 +1669,7 @@ static struct vfs_fn_pointers ceph_snap_fns = {
        .fget_nt_acl_fn = ceph_snap_gmt_fget_nt_acl,
        .get_nt_acl_fn = ceph_snap_gmt_get_nt_acl,
        .mkdir_fn = ceph_snap_gmt_mkdir,
+       .mkdirat_fn = ceph_snap_gmt_mkdirat,
        .rmdir_fn = ceph_snap_gmt_rmdir,
        .getxattr_fn = ceph_snap_gmt_getxattr,
        .getxattrat_send_fn = vfs_not_implemented_getxattrat_send,