smb: client: don't clobber ->i_rdev from cached reparse points
authorSteve French <stfrench@microsoft.com>
Mon, 29 Jan 2024 00:09:10 +0000 (18:09 -0600)
committerSteve French <stfrench@microsoft.com>
Mon, 29 Jan 2024 00:09:10 +0000 (18:09 -0600)
Don't clobber ->i_rdev from valid reparse inodes over readdir(2) as it
can't be provided by query dir responses.

Signed-off-by: Paulo Alcantara <pc@manguebit.com>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/cifs/readdir.c

index e24684112ab0a0a8ce412c906632c4bd3d963d6a..94255401b38dcb24c705f255731db2791e171c8d 100644 (file)
@@ -133,14 +133,14 @@ retry:
                                 * Query dir responses don't provide enough
                                 * information about reparse points other than
                                 * their reparse tags.  Save an invalidation by
-                                * not clobbering the existing mode, size and
-                                * symlink target (if any) when reparse tag and
-                                * ctime haven't changed.
+                                * not clobbering some existing attributes when
+                                * reparse tag and ctime haven't changed.
                                 */
                                rc = 0;
                                if (fattr->cf_cifsattrs & ATTR_REPARSE) {
                                        if (likely(reparse_inode_match(inode, fattr))) {
                                                fattr->cf_mode = inode->i_mode;
+                                               fattr->cf_rdev = inode->i_rdev;
                                                fattr->cf_eof = CIFS_I(inode)->server_eof;
                                                fattr->cf_symlink_target = NULL;
                                        } else {