summaryrefslogtreecommitdiff
path: root/fs/smb/client/inode.c
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2024-09-05 14:01:38 -0600
committerJonathan Corbet <corbet@lwn.net>2024-09-05 14:01:38 -0600
commitd224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe (patch)
treeb7b6b8c98595c89f7ad5307120cb3156708991bc /fs/smb/client/inode.c
parenteb5ed2fae19745fcb7dd0dcfbfbcd8b2847bc5c1 (diff)
parent431c1646e1f86b949fa3685efc50b660a364c2b6 (diff)
downloadlwn-d224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe.tar.gz
lwn-d224338aa105bf3c4c4aa8b2ccdbd675c71ffbfe.zip
Merge tag 'v6.11-rc6' into docs-mw
This is done primarily to get a docs build fix merged via another tree so that "make htmldocs" stops failing.
Diffstat (limited to 'fs/smb/client/inode.c')
-rw-r--r--fs/smb/client/inode.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/fs/smb/client/inode.c b/fs/smb/client/inode.c
index 4a8aa1de9522..dd0afa23734c 100644
--- a/fs/smb/client/inode.c
+++ b/fs/smb/client/inode.c
@@ -1042,13 +1042,26 @@ static int reparse_info_to_fattr(struct cifs_open_info_data *data,
}
rc = -EOPNOTSUPP;
- switch ((data->reparse.tag = tag)) {
- case 0: /* SMB1 symlink */
+ data->reparse.tag = tag;
+ if (!data->reparse.tag) {
if (server->ops->query_symlink) {
rc = server->ops->query_symlink(xid, tcon,
cifs_sb, full_path,
&data->symlink_target);
}
+ if (rc == -EOPNOTSUPP)
+ data->reparse.tag = IO_REPARSE_TAG_INTERNAL;
+ }
+
+ switch (data->reparse.tag) {
+ case 0: /* SMB1 symlink */
+ break;
+ case IO_REPARSE_TAG_INTERNAL:
+ rc = 0;
+ if (le32_to_cpu(data->fi.Attributes) & ATTR_DIRECTORY) {
+ cifs_create_junction_fattr(fattr, sb);
+ goto out;
+ }
break;
case IO_REPARSE_TAG_MOUNT_POINT:
cifs_create_junction_fattr(fattr, sb);