mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-01 02:36:02 +00:00
fs/smb/client: cifs_prime_dcache() for SMB3 POSIX reparse points
Spares an extra revalidation request Cc: stable@vger.kernel.org Acked-by: Paulo Alcantara (Red Hat) <pc@manguebit.com> Signed-off-by: Ralph Boehme <slow@samba.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
6a832bc8bb
commit
8cb0bc5436
@ -71,6 +71,8 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
||||
struct inode *inode;
|
||||
struct super_block *sb = parent->d_sb;
|
||||
struct cifs_sb_info *cifs_sb = CIFS_SB(sb);
|
||||
bool posix = cifs_sb_master_tcon(cifs_sb)->posix_extensions;
|
||||
bool reparse_need_reval = false;
|
||||
DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wq);
|
||||
int rc;
|
||||
|
||||
@ -85,7 +87,21 @@ cifs_prime_dcache(struct dentry *parent, struct qstr *name,
|
||||
* this spares us an invalidation.
|
||||
*/
|
||||
retry:
|
||||
if ((fattr->cf_cifsattrs & ATTR_REPARSE) ||
|
||||
if (posix) {
|
||||
switch (fattr->cf_mode & S_IFMT) {
|
||||
case S_IFLNK:
|
||||
case S_IFBLK:
|
||||
case S_IFCHR:
|
||||
reparse_need_reval = true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
} else if (fattr->cf_cifsattrs & ATTR_REPARSE) {
|
||||
reparse_need_reval = true;
|
||||
}
|
||||
|
||||
if (reparse_need_reval ||
|
||||
(fattr->cf_flags & CIFS_FATTR_NEED_REVAL))
|
||||
return;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user