diff options
| author | Huiwen He <hehuiwen@kylinos.cn> | 2026-04-02 17:18:30 +0300 |
|---|---|---|
| committer | Steve French <stfrench@microsoft.com> | 2026-04-06 03:58:40 +0300 |
| commit | 772d5920c3d417fc4ba44c0b6fb61ca4f19f5809 (patch) | |
| tree | c4168089198a1536963a7596d4d134b81daad48b /fs | |
| parent | c825f6b7432a11a801feb5f5783765cf31f2c3ff (diff) | |
| download | linux-772d5920c3d417fc4ba44c0b6fb61ca4f19f5809.tar.xz | |
smb/client: refactor ntstatus_to_dos() to return mapping entry
Refactor ntstatus_to_dos() to return a pointer to the mapping entry
instead of using output parameters. This allows callers to access all
fields of the entry directly.
In map_smb_to_linux_error(), integrate the printing logic directly
to avoid redundant lookups previously performed by cifs_print_status(),
which is now removed.
Signed-off-by: Huiwen He <hehuiwen@kylinos.cn>
Reviewed-by: ChenXiaoSong <chenxiaosong@kylinos.cn>
Signed-off-by: Steve French <stfrench@microsoft.com>
Diffstat (limited to 'fs')
| -rw-r--r-- | fs/smb/client/smb1maperror.c | 51 |
1 files changed, 19 insertions, 32 deletions
diff --git a/fs/smb/client/smb1maperror.c b/fs/smb/client/smb1maperror.c index 53313b39d1de..c906f233ac64 100644 --- a/fs/smb/client/smb1maperror.c +++ b/fs/smb/client/smb1maperror.c @@ -116,41 +116,19 @@ static const struct ntstatus_to_dos_err ntstatus_to_dos_map[] = { {0, 0, 0, NULL} }; -/***************************************************************************** - Print an error message from the status code - *****************************************************************************/ -static void -cifs_print_status(__u32 status_code) -{ - int idx = 0; - - while (ntstatus_to_dos_map[idx].nt_errstr) { - if (ntstatus_to_dos_map[idx].ntstatus == status_code) { - pr_notice("Status code returned 0x%08x %s\n", - status_code, ntstatus_to_dos_map[idx].nt_errstr); - return; - } - idx++; - } - return; -} - - -static void -ntstatus_to_dos(__u32 ntstatus, __u8 *eclass, __u16 *ecode) +static const struct ntstatus_to_dos_err * +ntstatus_to_dos(__u32 ntstatus) { int i; /* Check nt_errstr to allow mapping of NT_STATUS_OK (0) */ for (i = 0; ntstatus_to_dos_map[i].nt_errstr; i++) { if (ntstatus == ntstatus_to_dos_map[i].ntstatus) { - *eclass = ntstatus_to_dos_map[i].dos_class; - *ecode = ntstatus_to_dos_map[i].dos_code; - return; + return &ntstatus_to_dos_map[i]; } } - *eclass = ERRHRD; - *ecode = ERRgeneral; + + return NULL; } int @@ -172,11 +150,20 @@ map_smb_to_linux_error(char *buf, bool logErr) /* translate the newer STATUS codes to old style SMB errors * and then to POSIX errors */ __u32 err = le32_to_cpu(smb->Status.CifsError); - if (logErr && (err != (NT_STATUS_MORE_PROCESSING_REQUIRED))) - cifs_print_status(err); - else if (cifsFYI & CIFS_RC) - cifs_print_status(err); - ntstatus_to_dos(err, &smberrclass, &smberrcode); + const struct ntstatus_to_dos_err *map = ntstatus_to_dos(err); + + if (map) { + if ((logErr && err != NT_STATUS_MORE_PROCESSING_REQUIRED) || + (cifsFYI & CIFS_RC)) + pr_notice("Status code returned 0x%08x %s\n", + map->ntstatus, map->nt_errstr); + + smberrclass = map->dos_class; + smberrcode = map->dos_code; + } else { + smberrclass = ERRHRD; + smberrcode = ERRgeneral; + } } else { smberrclass = smb->Status.DosError.ErrorClass; smberrcode = le16_to_cpu(smb->Status.DosError.Error); |
