From: Huiwen He Date: Thu, 2 Apr 2026 14:18:30 +0000 (+0000) Subject: smb/client: refactor ntstatus_to_dos() to return mapping entry X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=772d5920c3d417fc4ba44c0b6fb61ca4f19f5809;p=thirdparty%2Fkernel%2Flinux.git 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 Reviewed-by: ChenXiaoSong Signed-off-by: Steve French --- diff --git a/fs/smb/client/smb1maperror.c b/fs/smb/client/smb1maperror.c index 53313b39d1de7..c906f233ac645 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);