lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite for Android: free password hash cracker in your pocket
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20251123235242.3361706-1-dhowells@redhat.com>
Date: Sun, 23 Nov 2025 23:52:27 +0000
From: David Howells <dhowells@...hat.com>
To: Steve French <sfrench@...ba.org>
Cc: David Howells <dhowells@...hat.com>,
	Paulo Alcantara <pc@...guebit.org>,
	Shyam Prasad N <sprasad@...rosoft.com>,
	Stefan Metzmacher <metze@...ba.org>,
	linux-cifs@...r.kernel.org,
	netfs@...ts.linux.dev,
	linux-fsdevel@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH v3 00/12] cifs: Miscellaneous prep patches for rewrite of I/O layer

Hi Steve,

Could you take these patches extracted from my I/O layer rewrite for the
upcoming merge window.  The performance change should be neutral, but it
cleans up the code a bit.

 (1) Do some minor cleanups so that patch 2 can be generated wholly by a
     script.

 (2) Organise the declarations in the cifs client header files, naming the
     arguments the same as for the implementations, inserting divider
     comments, ordering them the same as they're found in the files and
     dividing them better between general, smb1 and smb2/3 categories.

     The organisation is entirely scripted with the script in the second
     patch's commit message.  The first patch does a bit of preparation to
     make sure that the second patch's output will build.

     By filling in the argument names, this stops checkpatch moaning about
     unnamed arguments from search-and-replace changes in later patches.
     (Note that it doesn't fix func pointer declarations).

     smbdirect is left untouched as requested by Stefan Metzmacher.

 (3) Add the smb3_read_* tracepoints to SMB1 as well as SMB2/3.

 (4) Use netfs_alloc/free_folioq_buffer() rather than cifs doing its own
     version.

 (5) Rename struct mid_q_entry to smb_message.  In my rewrite, smb_message
     will get allocated in the marshalling functions in smb2pdu.c and
     cifssmb.c rather than in transport.c and used to hand parameters down
     - and so I think it could be better named for that.

 (6) Remove the RFC1002 header from the smb_hdr struct so that it's
     consistent with SMB2/3.  This allows I/O routines to be simplified and
     shared.

 (7) Make SMB1's SendReceive() wrap cifs_send_recv() and thus share code
     with SMB2/3.

 (8) Clean up a bunch of extra kvec[] that were required for RFC1002
     headers from SMB1's header struct.

 (9) Replace SendReceiveBlockingLock() with SendReceive() plus flags.

(10) Remove the server pointer from smb_message.  It can be passed down
     from the caller to all places that need it.

(11) Don't need state locking in smb2_get_mid_entry() as we're just doing a
     single read inside the lock.  READ_ONCE() should suffice instead.

(12) Add a tracepoint to log EIO errors and up to a couple of bits of info
     for each to make it easier to find out why an EIO error happened when
     the system is very busy without introducing printk delays.

The patches can be found here also:

	https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs.git/log/?h=cifs-cleanup

Thanks,
David

Changes
=======
ver #3)
 - Rebased on the ksmbd-for-next branch.
 - Add the patches to clean up the function prototypes in the headers.
   - Don't touch smbdirect.
   - Put prototypes into netlink.h and cached_dir.h rather than
     centralising them.
   - Indent the arguments in the prototypes to the opening bracket + 1.
 - Cleaned up most other checkpatch complaints.
 - Added the EIO tracepoint patch to the end.

ver #2)
 - Rebased on the ksmbd-for-next-next branch.
 - Moved the patch to use netfs_alloc/free_folioq_buffer() down the stack.

David Howells (12):
  cifs: Do some preparation prior to organising the function
    declarations
  cifs: Clean up declarations
  cifs: Add the smb3_read_* tracepoints to SMB1
  cifs: Use netfs_alloc/free_folioq_buffer()
  cifs: Rename mid_q_entry to smb_message
  cifs: Remove the RFC1002 header from smb_hdr
  cifs: Make smb1's SendReceive() wrap cifs_send_recv()
  cifs: Clean up some places where an extra kvec[] was required for
    rfc1002
  cifs: Replace SendReceiveBlockingLock() with SendReceive() plus flags
  cifs: Remove the server pointer from smb_message
  cifs: Don't need state locking in smb2_get_mid_entry()
  cifs: Add a tracepoint to log EIO errors

 fs/smb/client/cached_dir.c    |    2 +-
 fs/smb/client/cached_dir.h    |   37 +-
 fs/smb/client/cifs_debug.c    |   51 +-
 fs/smb/client/cifs_debug.h    |   15 +-
 fs/smb/client/cifs_spnego.h   |    2 -
 fs/smb/client/cifs_swn.h      |   15 +-
 fs/smb/client/cifs_unicode.c  |    1 +
 fs/smb/client/cifs_unicode.h  |   16 -
 fs/smb/client/cifsacl.c       |   11 +-
 fs/smb/client/cifsencrypt.c   |   83 +-
 fs/smb/client/cifsfs.c        |   36 +-
 fs/smb/client/cifsfs.h        |   64 --
 fs/smb/client/cifsglob.h      |  219 ++----
 fs/smb/client/cifspdu.h       |   13 +-
 fs/smb/client/cifsproto.h     | 1340 +++++++++++++++++----------------
 fs/smb/client/cifssmb.c       |  954 +++++++++++++----------
 fs/smb/client/cifstransport.c |  439 ++---------
 fs/smb/client/compress.c      |   23 +-
 fs/smb/client/compress.h      |   20 +-
 fs/smb/client/connect.c       |  200 ++---
 fs/smb/client/dfs.h           |    4 -
 fs/smb/client/dfs_cache.h     |   16 -
 fs/smb/client/dir.c           |    9 +-
 fs/smb/client/dns_resolve.h   |    3 -
 fs/smb/client/file.c          |    7 +-
 fs/smb/client/fs_context.c    |    2 +-
 fs/smb/client/fs_context.h    |    9 -
 fs/smb/client/fscache.h       |   13 +-
 fs/smb/client/inode.c         |   15 +-
 fs/smb/client/ioctl.c         |    1 +
 fs/smb/client/link.c          |   11 +-
 fs/smb/client/misc.c          |   53 +-
 fs/smb/client/netlink.h       |    8 +-
 fs/smb/client/netmisc.c       |   21 +-
 fs/smb/client/nterr.h         |    2 -
 fs/smb/client/ntlmssp.h       |   13 -
 fs/smb/client/readdir.c       |    2 +-
 fs/smb/client/reparse.c       |   53 +-
 fs/smb/client/reparse.h       |   11 -
 fs/smb/client/sess.c          |   17 +-
 fs/smb/client/smb1ops.c       |  116 ++-
 fs/smb/client/smb1proto.h     |  227 ++++++
 fs/smb/client/smb2file.c      |    9 +-
 fs/smb/client/smb2inode.c     |   12 +-
 fs/smb/client/smb2maperror.c  |    3 +
 fs/smb/client/smb2misc.c      |   11 +-
 fs/smb/client/smb2ops.c       |  249 +++---
 fs/smb/client/smb2pdu.c       |  228 +++---
 fs/smb/client/smb2proto.h     |  516 ++++++-------
 fs/smb/client/smb2transport.c |  113 ++-
 fs/smb/client/smbdirect.c     |   18 +-
 fs/smb/client/smbdirect.h     |    1 +
 fs/smb/client/trace.h         |  153 ++++
 fs/smb/client/transport.c     |  302 ++++----
 fs/smb/client/xattr.c         |    2 +-
 fs/smb/common/smb2pdu.h       |    3 -
 fs/smb/common/smbglob.h       |    1 -
 57 files changed, 2913 insertions(+), 2862 deletions(-)
 create mode 100644 fs/smb/client/smb1proto.h


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ