[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251205132536.2703110-8-chenxiaosong.chenxiaosong@linux.dev>
Date: Fri, 5 Dec 2025 21:25:33 +0800
From: chenxiaosong.chenxiaosong@...ux.dev
To: sfrench@...ba.org,
smfrench@...il.com,
linkinjeon@...nel.org,
linkinjeon@...ba.org
Cc: linux-cifs@...r.kernel.org,
linux-kernel@...r.kernel.org,
liuzhengyuan@...inos.cn,
huhai@...inos.cn,
liuyun01@...inos.cn,
ChenXiaoSong <chenxiaosong@...inos.cn>
Subject: [PATCH v3 7/9] smb/client: introduce smb2_get_err_map()
From: ChenXiaoSong <chenxiaosong@...inos.cn>
We may need to get struct status_to_posix_error information in other files
in the future. So we move struct status_to_posix_error to smb2glob.h, and
introduce new global function smb2_get_err_map().
Additionally, delete unused forward declaration `struct statfs`
in smb2proto.h.
Signed-off-by: ChenXiaoSong <chenxiaosong@...inos.cn>
---
fs/smb/client/smb2glob.h | 6 ++++++
fs/smb/client/smb2maperror.c | 28 +++++++++++++++-------------
fs/smb/client/smb2proto.h | 3 ++-
3 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/fs/smb/client/smb2glob.h b/fs/smb/client/smb2glob.h
index e56e4d402f13..fe6a5c7f01c4 100644
--- a/fs/smb/client/smb2glob.h
+++ b/fs/smb/client/smb2glob.h
@@ -13,6 +13,12 @@
#ifndef _SMB2_GLOB_H
#define _SMB2_GLOB_H
+struct status_to_posix_error {
+ __le32 smb2_status;
+ int posix_error;
+ char *status_string;
+};
+
/*
*****************************************************************
* Constants go here
diff --git a/fs/smb/client/smb2maperror.c b/fs/smb/client/smb2maperror.c
index df8db12ff7a9..0d46fa98952c 100644
--- a/fs/smb/client/smb2maperror.c
+++ b/fs/smb/client/smb2maperror.c
@@ -17,12 +17,6 @@
#include "smb2glob.h"
#include "trace.h"
-struct status_to_posix_error {
- __le32 smb2_status;
- int posix_error;
- char *status_string;
-};
-
static struct status_to_posix_error smb2_error_map_table[] = {
{STATUS_WAIT_1, -EIO, "STATUS_WAIT_1"},
{STATUS_WAIT_2, -EIO, "STATUS_WAIT_2"},
@@ -2433,13 +2427,26 @@ static int cmp_smb2_status(const void *_a, const void *_b)
return 0;
}
+struct status_to_posix_error *smb2_get_err_map(__le32 smb2_status)
+{
+ struct status_to_posix_error *err_map, key;
+
+ key = (struct status_to_posix_error) {
+ .smb2_status = smb2_status,
+ };
+ err_map = bsearch(&key, smb2_error_map_table, err_map_num,
+ sizeof(struct status_to_posix_error),
+ cmp_smb2_status);
+ return err_map;
+}
+
int
map_smb2_to_linux_error(char *buf, bool log_err)
{
struct smb2_hdr *shdr = (struct smb2_hdr *)buf;
int rc = -EIO;
__le32 smb2err = shdr->Status;
- struct status_to_posix_error *err_map, key;
+ struct status_to_posix_error *err_map;
if (smb2err == 0) {
trace_smb3_cmd_done(le32_to_cpu(shdr->Id.SyncId.TreeId),
@@ -2453,12 +2460,7 @@ map_smb2_to_linux_error(char *buf, bool log_err)
(smb2err != STATUS_END_OF_FILE)) ||
(cifsFYI & CIFS_RC);
- key = (struct status_to_posix_error) {
- .smb2_status = smb2err,
- };
- err_map = bsearch(&key, smb2_error_map_table, err_map_num,
- sizeof(struct status_to_posix_error),
- cmp_smb2_status);
+ err_map = smb2_get_err_map(smb2err);
if (!err_map)
goto out;
diff --git a/fs/smb/client/smb2proto.h b/fs/smb/client/smb2proto.h
index c988f6b37a1b..224840e3a00d 100644
--- a/fs/smb/client/smb2proto.h
+++ b/fs/smb/client/smb2proto.h
@@ -12,8 +12,8 @@
#include <linux/nls.h>
#include <linux/key-type.h>
-struct statfs;
struct smb_rqst;
+struct status_to_posix_error;
/*
*****************************************************************
@@ -21,6 +21,7 @@ struct smb_rqst;
*****************************************************************
*/
extern int map_smb2_to_linux_error(char *buf, bool log_err);
+extern struct status_to_posix_error *smb2_get_err_map(__le32 smb2_status);
extern void smb2_init_maperror(void);
extern int smb2_check_message(char *buf, unsigned int length,
struct TCP_Server_Info *server);
--
2.43.0
Powered by blists - more mailing lists