[PATCH v4 00/10] smb: improve search speed of SMB2 maperror

chenxiaosong.chenxiaosong@linux.dev posted 10 patches 1 week, 5 days ago
fs/smb/Kconfig                    |  17 +++++
fs/smb/client/cifsfs.c            |   2 +
fs/smb/client/smb2glob.h          |   6 ++
fs/smb/client/smb2maperror.c      | 101 +++++++++++++++++-------------
fs/smb/client/smb2maperror_test.c |  71 +++++++++++++++++++++
fs/smb/client/smb2proto.h         |   4 +-
fs/smb/common/smb2status.h        |   5 +-
fs/smb/server/smb2pdu.c           |   2 +-
fs/smb/server/smb_common.h        |   6 +-
9 files changed, 165 insertions(+), 49 deletions(-)
create mode 100644 fs/smb/client/smb2maperror_test.c
[PATCH v4 00/10] smb: improve search speed of SMB2 maperror
Posted by chenxiaosong.chenxiaosong@linux.dev 1 week, 5 days ago
From: ChenXiaoSong <chenxiaosong@kylinos.cn>

Before applying this patchset, when searching for the last element of
smb2_error_map_table array and calling smb2_print_status(),
3486 comparisons are needed.

After applying this patchset, only 10 comparisons are required.

v1: https://lore.kernel.org/linux-cifs/20251204045818.2590727-1-chenxiaosong.chenxiaosong@linux.dev/
The three patches from v1 have already been applied to the for-next branch of cifs-2.6.git.
Please replace the following patches:

  - [v1 01/10] smb/client: reduce loop count in map_smb2_to_linux_error() by half: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=26866d690bd180e1860548c43e70fdefe50638ff
    - Replace it with this version(v4) patch #0001: update commit message: array has 1743 elements

  - [v1 02/10] smb/client: remove unused elements from smb2_error_map_table array: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=905d8999d67dcbe4ce12ef87996e4440e068196d
    - It is the same as patch #0002 in this version(v4).

  - [v1 03/10] smb: add two elements to smb2_error_map_table array: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=ba521f56912f6ff5121e54c17c855298f947c9ea
    - Replace it with this version(v4) patch #0003 #0004.

v3: https://lore.kernel.org/linux-cifs/20251205132536.2703110-1-chenxiaosong.chenxiaosong@linux.dev/
v3->v4:
  - Patch #0008: the KUnit test searches all elements of the smb2_error_map_table array
  - Create patch #0009

ChenXiaoSong (10):
  smb/client: reduce loop count in map_smb2_to_linux_error() by half
  smb/client: remove unused elements from smb2_error_map_table array
  smb: rename to STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP
  smb/client: add two elements to smb2_error_map_table array
  smb/client: sort smb2_error_map_table array
  smb/client: use bsearch() to find target status code
  smb/client: introduce smb2_get_err_map()
  smb/client: introduce smb2maperror KUnit tests
  smb/client: update some SMB2 status strings
  smb/server: rename include guard in smb_common.h

 fs/smb/Kconfig                    |  17 +++++
 fs/smb/client/cifsfs.c            |   2 +
 fs/smb/client/smb2glob.h          |   6 ++
 fs/smb/client/smb2maperror.c      | 101 +++++++++++++++++-------------
 fs/smb/client/smb2maperror_test.c |  71 +++++++++++++++++++++
 fs/smb/client/smb2proto.h         |   4 +-
 fs/smb/common/smb2status.h        |   5 +-
 fs/smb/server/smb2pdu.c           |   2 +-
 fs/smb/server/smb_common.h        |   6 +-
 9 files changed, 165 insertions(+), 49 deletions(-)
 create mode 100644 fs/smb/client/smb2maperror_test.c

-- 
2.43.0
Re: [PATCH v4 00/10] smb: improve search speed of SMB2 maperror
Posted by ChenXiaoSong 1 week, 2 days ago
Hi Steve and Namjae,

I have tested all patches using KUnit tests, xfstests, and smbtorture, 
and no additional test failures were observed. The detailed test results 
can be found in: https://chenxiaosong.com/en/smb-test-20251210.html

For more detailed information about the patches to be reviewed, please 
see the link: https://chenxiaosong.com/en/smb-patch.html

Thanks,
ChenXiaoSong.

On 12/6/25 23:18, chenxiaosong.chenxiaosong@linux.dev wrote:
> From: ChenXiaoSong <chenxiaosong@kylinos.cn>
> 
> Before applying this patchset, when searching for the last element of
> smb2_error_map_table array and calling smb2_print_status(),
> 3486 comparisons are needed.
> 
> After applying this patchset, only 10 comparisons are required.
> 
> v1: https://lore.kernel.org/linux-cifs/20251204045818.2590727-1-chenxiaosong.chenxiaosong@linux.dev/
> The three patches from v1 have already been applied to the for-next branch of cifs-2.6.git.
> Please replace the following patches:
> 
>    - [v1 01/10] smb/client: reduce loop count in map_smb2_to_linux_error() by half: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=26866d690bd180e1860548c43e70fdefe50638ff
>      - Replace it with this version(v4) patch #0001: update commit message: array has 1743 elements
> 
>    - [v1 02/10] smb/client: remove unused elements from smb2_error_map_table array: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=905d8999d67dcbe4ce12ef87996e4440e068196d
>      - It is the same as patch #0002 in this version(v4).
> 
>    - [v1 03/10] smb: add two elements to smb2_error_map_table array: https://git.samba.org/sfrench/?p=sfrench/cifs-2.6.git;a=commitdiff;h=ba521f56912f6ff5121e54c17c855298f947c9ea
>      - Replace it with this version(v4) patch #0003 #0004.
> 
> v3: https://lore.kernel.org/linux-cifs/20251205132536.2703110-1-chenxiaosong.chenxiaosong@linux.dev/
> v3->v4:
>    - Patch #0008: the KUnit test searches all elements of the smb2_error_map_table array
>    - Create patch #0009
> 
> ChenXiaoSong (10):
>    smb/client: reduce loop count in map_smb2_to_linux_error() by half
>    smb/client: remove unused elements from smb2_error_map_table array
>    smb: rename to STATUS_SMB_NO_PREAUTH_INTEGRITY_HASH_OVERLAP
>    smb/client: add two elements to smb2_error_map_table array
>    smb/client: sort smb2_error_map_table array
>    smb/client: use bsearch() to find target status code
>    smb/client: introduce smb2_get_err_map()
>    smb/client: introduce smb2maperror KUnit tests
>    smb/client: update some SMB2 status strings
>    smb/server: rename include guard in smb_common.h
> 
>   fs/smb/Kconfig                    |  17 +++++
>   fs/smb/client/cifsfs.c            |   2 +
>   fs/smb/client/smb2glob.h          |   6 ++
>   fs/smb/client/smb2maperror.c      | 101 +++++++++++++++++-------------
>   fs/smb/client/smb2maperror_test.c |  71 +++++++++++++++++++++
>   fs/smb/client/smb2proto.h         |   4 +-
>   fs/smb/common/smb2status.h        |   5 +-
>   fs/smb/server/smb2pdu.c           |   2 +-
>   fs/smb/server/smb_common.h        |   6 +-
>   9 files changed, 165 insertions(+), 49 deletions(-)
>   create mode 100644 fs/smb/client/smb2maperror_test.c
>