3.16.62-rc1 review patch. If anyone has any objections, please let me know.
------------------
From: Steve French stfrench@microsoft.com
commit 5e19697b56a64004e2d0ff1bb952ea05493c088f upstream.
When "backup intent" is requested on the mount (e.g. backupuid or backupgid mount options), the corresponding flag needs to be set on opens of directories (and files) but was missing in some places causing access denied trying to enumerate and backup servers.
Fixes kernel bugzilla #200953 https://bugzilla.kernel.org/show_bug.cgi?id=200953
Reported-and-tested-by: whh@rubrik.com Signed-off-by: Steve French stfrench@microsoft.com Reviewed-by: Pavel Shilovsky pshilov@microsoft.com [bwh: Backported to 3.16: drop changes in smb2_query_eas(), smb2_set_ea()] Signed-off-by: Ben Hutchings ben@decadent.org.uk --- --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c @@ -446,6 +446,8 @@ cifs_sfu_type(struct cifs_fattr *fattr, oparms.cifs_sb = cifs_sb; oparms.desired_access = GENERIC_READ; oparms.create_options = CREATE_NOT_DIR; + if (backup_cred(cifs_sb)) + oparms.create_options |= CREATE_OPEN_BACKUP_INTENT; oparms.disposition = FILE_OPEN; oparms.path = path; oparms.fid = &fid; --- a/fs/cifs/smb2ops.c +++ b/fs/cifs/smb2ops.c @@ -315,7 +315,10 @@ smb2_is_path_accessible(const unsigned i oparms.tcon = tcon; oparms.desired_access = FILE_READ_ATTRIBUTES; oparms.disposition = FILE_OPEN; - oparms.create_options = 0; + if (backup_cred(cifs_sb)) + oparms.create_options = CREATE_OPEN_BACKUP_INTENT; + else + oparms.create_options = 0; oparms.fid = &fid; oparms.reconnect = false;
@@ -725,7 +728,10 @@ smb2_query_dir_first(const unsigned int oparms.tcon = tcon; oparms.desired_access = FILE_READ_ATTRIBUTES | FILE_READ_DATA; oparms.disposition = FILE_OPEN; - oparms.create_options = 0; + if (backup_cred(cifs_sb)) + oparms.create_options = CREATE_OPEN_BACKUP_INTENT; + else + oparms.create_options = 0; oparms.fid = fid; oparms.reconnect = false;
@@ -891,7 +897,10 @@ smb2_query_symlink(const unsigned int xi oparms.tcon = tcon; oparms.desired_access = FILE_READ_ATTRIBUTES; oparms.disposition = FILE_OPEN; - oparms.create_options = 0; + if (backup_cred(cifs_sb)) + oparms.create_options = CREATE_OPEN_BACKUP_INTENT; + else + oparms.create_options = 0; oparms.fid = &fid; oparms.reconnect = false;