]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
cifs: Change translation of STATUS_NOT_A_REPARSE_POINT to -ENODATA
authorPali Rohár <pali@kernel.org>
Mon, 14 Oct 2024 13:18:04 +0000 (15:18 +0200)
committerSteve French <stfrench@microsoft.com>
Mon, 27 Jan 2025 05:12:03 +0000 (23:12 -0600)
STATUS_NOT_A_REPARSE_POINT indicates that object does not have reparse point
buffer attached, for example returned by FSCTL_GET_REPARSE_POINT.

Currently STATUS_NOT_A_REPARSE_POINT is translated to -EIO. Change it to
-ENODATA which better describe the situation when no reparse point is set.

Signed-off-by: Pali Rohár <pali@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/client/netmisc.c
fs/smb/client/nterr.c
fs/smb/client/nterr.h
fs/smb/client/smb2maperror.c

index 17b3e21ea8689ae7c50dbb630e7d6d35d5a5987e..9dc16211e7a1396b748fbd7957c997be19243f25 100644 (file)
@@ -871,6 +871,13 @@ map_smb_to_linux_error(char *buf, bool logErr)
        }
        /* else ERRHRD class errors or junk  - return EIO */
 
+       /* special cases for NT status codes which cannot be translated to DOS codes */
+       if (smb->Flags2 & SMBFLG2_ERR_STATUS) {
+               __u32 err = le32_to_cpu(smb->Status.CifsError);
+               if (err == (NT_STATUS_NOT_A_REPARSE_POINT))
+                       rc = -ENODATA;
+       }
+
        cifs_dbg(FYI, "Mapping smb error code 0x%x to POSIX err %d\n",
                 le32_to_cpu(smb->Status.CifsError), rc);
 
index d396a8e98a81c291dd4cabc4cf5de4f3262f7dad..8f0bc441295effb584ddf83ee382ac491a8fb137 100644 (file)
@@ -674,6 +674,7 @@ const struct nt_err_code_struct nt_errs[] = {
        {"NT_STATUS_QUOTA_LIST_INCONSISTENT",
         NT_STATUS_QUOTA_LIST_INCONSISTENT},
        {"NT_STATUS_FILE_IS_OFFLINE", NT_STATUS_FILE_IS_OFFLINE},
+       {"NT_STATUS_NOT_A_REPARSE_POINT", NT_STATUS_NOT_A_REPARSE_POINT},
        {"NT_STATUS_NO_MORE_ENTRIES", NT_STATUS_NO_MORE_ENTRIES},
        {"NT_STATUS_MORE_ENTRIES", NT_STATUS_MORE_ENTRIES},
        {"NT_STATUS_SOME_UNMAPPED", NT_STATUS_SOME_UNMAPPED},
index edd4741cab0a173cc371b8401f6d044065040936..180602c22355e1165c6a81f802925104786c96ef 100644 (file)
@@ -546,6 +546,7 @@ extern const struct nt_err_code_struct nt_errs[];
 #define NT_STATUS_TOO_MANY_LINKS 0xC0000000 | 0x0265
 #define NT_STATUS_QUOTA_LIST_INCONSISTENT 0xC0000000 | 0x0266
 #define NT_STATUS_FILE_IS_OFFLINE 0xC0000000 | 0x0267
+#define NT_STATUS_NOT_A_REPARSE_POINT 0xC0000000 | 0x0275
 #define NT_STATUS_NO_SUCH_JOB 0xC0000000 | 0xEDE       /* scheduler */
 
 #endif                         /* _NTERR_H */
index b05313acf9b2bcb4d83db71c514e0180add994b7..612e7b5181b6cb25e46e04e1a912d2a9e56cd726 100644 (file)
@@ -871,7 +871,7 @@ static const struct status_to_posix_error smb2_error_map_table[] = {
        {STATUS_VALIDATE_CONTINUE, -EIO, "STATUS_VALIDATE_CONTINUE"},
        {STATUS_NO_MATCH, -EIO, "STATUS_NO_MATCH"},
        {STATUS_NO_MORE_MATCHES, -EIO, "STATUS_NO_MORE_MATCHES"},
-       {STATUS_NOT_A_REPARSE_POINT, -EIO, "STATUS_NOT_A_REPARSE_POINT"},
+       {STATUS_NOT_A_REPARSE_POINT, -ENODATA, "STATUS_NOT_A_REPARSE_POINT"},
        {STATUS_IO_REPARSE_TAG_INVALID, -EIO, "STATUS_IO_REPARSE_TAG_INVALID"},
        {STATUS_IO_REPARSE_TAG_MISMATCH, -EIO,
        "STATUS_IO_REPARSE_TAG_MISMATCH"},