diff options
-rw-r--r-- | fs/cifs/smb2inode.c | 9 |
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) |