]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
smb3: send backup intent on compounded query info
authorSteve French <stfrench@microsoft.com>
Fri, 19 Oct 2018 05:32:41 +0000 (00:32 -0500)
committerSteve French <stfrench@microsoft.com>
Wed, 24 Oct 2018 02:16:05 +0000 (21:16 -0500)
When mounting with backupuid set, we should be setting
CREATE_OPEN_BACKUP_INTENT flag on compounded opens as well,
especially the case of compounded smb2_query_path_info.

Signed-off-by: Steve French <stfrench@microsoft.com>
Reviewed-by: Ronnie Sahlberg <lsahlber@redhat.com>
fs/cifs/smb2inode.c

index 50d4a9afb36adda610ba3578a1809cd9106b88df..9e7ef7ec2d70f0d84002dbfed141fa325d20ad8d 100644 (file)
@@ -293,6 +293,7 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
 {
        int rc;
        struct smb2_file_all_info *smb2_data;
+       __u32 create_options = 0;
 
        *adjust_tz = false;
        *symlink = false;
@@ -301,16 +302,20 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
                            GFP_KERNEL);
        if (smb2_data == NULL)
                return -ENOMEM;
+       if (backup_cred(cifs_sb))
+               create_options |= CREATE_OPEN_BACKUP_INTENT;
 
        rc = smb2_compound_op(xid, tcon, cifs_sb, full_path,
-                             FILE_READ_ATTRIBUTES, FILE_OPEN, 0,
+                             FILE_READ_ATTRIBUTES, FILE_OPEN, create_options,
                              smb2_data, SMB2_OP_QUERY_INFO);
        if (rc == -EOPNOTSUPP) {
                *symlink = true;
+               create_options |= OPEN_REPARSE_POINT;
+
                /* Failed on a symbolic link - query a reparse point info */
                rc = smb2_compound_op(xid, tcon, cifs_sb, full_path,
                                      FILE_READ_ATTRIBUTES, FILE_OPEN,
-                                     OPEN_REPARSE_POINT, smb2_data,
+                                     create_options, smb2_data,
                                      SMB2_OP_QUERY_INFO);
        }
        if (rc)