aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/cifs/smb2inode.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/fs/cifs/smb2inode.c b/fs/cifs/smb2inode.c
index 50d4a9afb36a..9e7ef7ec2d70 100644
--- a/fs/cifs/smb2inode.c
+++ b/fs/cifs/smb2inode.c
@@ -293,6 +293,7 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
293{ 293{
294 int rc; 294 int rc;
295 struct smb2_file_all_info *smb2_data; 295 struct smb2_file_all_info *smb2_data;
296 __u32 create_options = 0;
296 297
297 *adjust_tz = false; 298 *adjust_tz = false;
298 *symlink = false; 299 *symlink = false;
@@ -301,16 +302,20 @@ smb2_query_path_info(const unsigned int xid, struct cifs_tcon *tcon,
301 GFP_KERNEL); 302 GFP_KERNEL);
302 if (smb2_data == NULL) 303 if (smb2_data == NULL)
303 return -ENOMEM; 304 return -ENOMEM;
305 if (backup_cred(cifs_sb))
306 create_options |= CREATE_OPEN_BACKUP_INTENT;
304 307
305 rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, 308 rc = smb2_compound_op(xid, tcon, cifs_sb, full_path,
306 FILE_READ_ATTRIBUTES, FILE_OPEN, 0, 309 FILE_READ_ATTRIBUTES, FILE_OPEN, create_options,
307 smb2_data, SMB2_OP_QUERY_INFO); 310 smb2_data, SMB2_OP_QUERY_INFO);
308 if (rc == -EOPNOTSUPP) { 311 if (rc == -EOPNOTSUPP) {
309 *symlink = true; 312 *symlink = true;
313 create_options |= OPEN_REPARSE_POINT;
314
310 /* Failed on a symbolic link - query a reparse point info */ 315 /* Failed on a symbolic link - query a reparse point info */
311 rc = smb2_compound_op(xid, tcon, cifs_sb, full_path, 316 rc = smb2_compound_op(xid, tcon, cifs_sb, full_path,
312 FILE_READ_ATTRIBUTES, FILE_OPEN, 317 FILE_READ_ATTRIBUTES, FILE_OPEN,
313 OPEN_REPARSE_POINT, smb2_data, 318 create_options, smb2_data,
314 SMB2_OP_QUERY_INFO); 319 SMB2_OP_QUERY_INFO);
315 } 320 }
316 if (rc) 321 if (rc)