All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] cifs: Cleanup of duplicated structures
@ 2024-12-22 17:24 Pali Rohár
  2024-12-22 17:24 ` [PATCH 1/3] cifs: Remove struct reparse_posix_data from struct cifs_open_info_data Pali Rohár
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Pali Rohár @ 2024-12-22 17:24 UTC (permalink / raw)
  To: Steve French, Paulo Alcantara, Ronnie Sahlberg, Namjae Jeon,
	Sergey Senozhatsky
  Cc: linux-cifs, linux-kernel

This patch series contains only code cleanup of few duplicates structures
and enums between smb/common and smb/client subdirs. No function change.

Can be useful also for ksmbd server part.

Pali Rohár (3):
  cifs: Remove struct reparse_posix_data from struct cifs_open_info_data
  cifs: Remove duplicate struct reparse_symlink_data and
    SYMLINK_FLAG_RELATIVE
  cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and
    move to common/smb2pdu.h

 fs/smb/client/cifsglob.h |  5 +----
 fs/smb/client/cifspdu.h  | 30 ------------------------------
 fs/smb/client/reparse.c  | 15 +++++++--------
 fs/smb/common/smb2pdu.h  | 14 +++++++++++++-
 4 files changed, 21 insertions(+), 43 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH 1/3] cifs: Remove struct reparse_posix_data from struct cifs_open_info_data
  2024-12-22 17:24 [PATCH 0/3] cifs: Cleanup of duplicated structures Pali Rohár
@ 2024-12-22 17:24 ` Pali Rohár
  2024-12-22 17:24 ` [PATCH 2/3] cifs: Remove duplicate struct reparse_symlink_data and SYMLINK_FLAG_RELATIVE Pali Rohár
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Pali Rohár @ 2024-12-22 17:24 UTC (permalink / raw)
  To: Steve French, Paulo Alcantara, Ronnie Sahlberg, Namjae Jeon,
	Sergey Senozhatsky
  Cc: linux-cifs, linux-kernel

Linux SMB client already supports more reparse point types but only the
reparse_posix_data is defined in union of struct cifs_open_info_data.
This union is currently used as implicit casting between point types.

With this code style, it hides information that union is used for pointer
casting, and just in mknod_nfs() and posix_reparse_to_fattr() functions.

Other reparse point buffers do not use this kind of casting. So remove
reparse_posix_data from reparse part of struct cifs_open_info_data and for
all cases of reparse buffer use just struct reparse_data_buffer *buf.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 fs/smb/client/cifsglob.h | 5 +----
 fs/smb/client/reparse.c  | 5 ++---
 2 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
index b56fca6dd195..5045ead02c43 100644
--- a/fs/smb/client/cifsglob.h
+++ b/fs/smb/client/cifsglob.h
@@ -262,10 +262,7 @@ struct cifs_open_info_data {
 			struct kvec iov;
 		} io;
 		__u32 tag;
-		union {
-			struct reparse_data_buffer *buf;
-			struct reparse_posix_data *posix;
-		};
+		struct reparse_data_buffer *buf;
 	} reparse;
 	struct {
 		__u8		eas[SMB2_WSL_MAX_QUERY_EA_RESP_SIZE];
diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
index f01214d6c5d4..40070e99fc8a 100644
--- a/fs/smb/client/reparse.c
+++ b/fs/smb/client/reparse.c
@@ -486,7 +486,7 @@ static int mknod_nfs(unsigned int xid, struct inode *inode,
 
 	data = (struct cifs_open_info_data) {
 		.reparse_point = true,
-		.reparse = { .tag = IO_REPARSE_TAG_NFS, .posix = p, },
+		.reparse = { .tag = IO_REPARSE_TAG_NFS, .buf = (struct reparse_data_buffer *)p, },
 		.symlink_target = kstrdup(symname, GFP_KERNEL),
 	};
 
@@ -1165,8 +1165,7 @@ static bool posix_reparse_to_fattr(struct cifs_sb_info *cifs_sb,
 				   struct cifs_fattr *fattr,
 				   struct cifs_open_info_data *data)
 {
-	struct reparse_posix_data *buf = data->reparse.posix;
-
+	struct reparse_posix_data *buf = (struct reparse_posix_data *)data->reparse.buf;
 
 	if (buf == NULL)
 		return true;
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 2/3] cifs: Remove duplicate struct reparse_symlink_data and SYMLINK_FLAG_RELATIVE
  2024-12-22 17:24 [PATCH 0/3] cifs: Cleanup of duplicated structures Pali Rohár
  2024-12-22 17:24 ` [PATCH 1/3] cifs: Remove struct reparse_posix_data from struct cifs_open_info_data Pali Rohár
@ 2024-12-22 17:24 ` Pali Rohár
  2024-12-22 17:24 ` [PATCH 3/3] cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and move to common/smb2pdu.h Pali Rohár
  2024-12-24  7:38 ` [PATCH 0/3] cifs: Cleanup of duplicated structures Namjae Jeon
  3 siblings, 0 replies; 5+ messages in thread
From: Pali Rohár @ 2024-12-22 17:24 UTC (permalink / raw)
  To: Steve French, Paulo Alcantara, Ronnie Sahlberg, Namjae Jeon,
	Sergey Senozhatsky
  Cc: linux-cifs, linux-kernel

In file common/smb2pdu.h is defined struct reparse_symlink_data_buffer
which is same as struct reparse_symlink_data and is used in the whole code.
So remove duplicate struct reparse_symlink_data from client/cifspdu.h.

In file common/smb2pdu.h is defined also SYMLINK_FLAG_RELATIVE constant, so
remove duplication from client/cifspdu.h.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 fs/smb/client/cifspdu.h | 16 ----------------
 1 file changed, 16 deletions(-)

diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h
index d0e7fbc5cacd..2a29fa31c927 100644
--- a/fs/smb/client/cifspdu.h
+++ b/fs/smb/client/cifspdu.h
@@ -1485,22 +1485,6 @@ struct file_notify_information {
 	__u8  FileName[];
 } __attribute__((packed));
 
-/* For IO_REPARSE_TAG_SYMLINK */
-struct reparse_symlink_data {
-	__le32	ReparseTag;
-	__le16	ReparseDataLength;
-	__u16	Reserved;
-	__le16	SubstituteNameOffset;
-	__le16	SubstituteNameLength;
-	__le16	PrintNameOffset;
-	__le16	PrintNameLength;
-	__le32	Flags;
-	char	PathBuffer[];
-} __attribute__((packed));
-
-/* Flag above */
-#define SYMLINK_FLAG_RELATIVE 0x00000001
-
 /* For IO_REPARSE_TAG_NFS */
 #define NFS_SPECFILE_LNK	0x00000000014B4E4C
 #define NFS_SPECFILE_CHR	0x0000000000524843
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [PATCH 3/3] cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and move to common/smb2pdu.h
  2024-12-22 17:24 [PATCH 0/3] cifs: Cleanup of duplicated structures Pali Rohár
  2024-12-22 17:24 ` [PATCH 1/3] cifs: Remove struct reparse_posix_data from struct cifs_open_info_data Pali Rohár
  2024-12-22 17:24 ` [PATCH 2/3] cifs: Remove duplicate struct reparse_symlink_data and SYMLINK_FLAG_RELATIVE Pali Rohár
@ 2024-12-22 17:24 ` Pali Rohár
  2024-12-24  7:38 ` [PATCH 0/3] cifs: Cleanup of duplicated structures Namjae Jeon
  3 siblings, 0 replies; 5+ messages in thread
From: Pali Rohár @ 2024-12-22 17:24 UTC (permalink / raw)
  To: Steve French, Paulo Alcantara, Ronnie Sahlberg, Namjae Jeon,
	Sergey Senozhatsky
  Cc: linux-cifs, linux-kernel

Function parse_reparse_posix() parses NFS-style reparse points, which are
used only by Windows NFS server since Windows Server 2012 version. This
style is not understood by Microsoft POSIX/Interix/SFU/SUA subsystems.

So make it clear that parse_reparse_posix() function and reparse_posix_data
structure are not POSIX general, but rather NFS specific.

All reparse buffer structures are defined in common/smb2pdu.h and have
_buffer suffix. So move struct reparse_posix_data from client/cifspdu.h to
common/smb2pdu.h and rename it to reparse_nfs_data_buffer for consistency.
Note that also SMB specification in [MS-FSCC] document, section 2.1.2.6
defines it under name "Network File System (NFS) Reparse Data Buffer".
So use this name for consistency.

Having this structure in common/smb2pdu.h can be useful for ksmbd server
code as NFS-style reparse points is the preferred way for implementing
support for special files.

Signed-off-by: Pali Rohár <pali@kernel.org>
---
 fs/smb/client/cifspdu.h | 14 --------------
 fs/smb/client/reparse.c | 12 ++++++------
 fs/smb/common/smb2pdu.h | 14 +++++++++++++-
 3 files changed, 19 insertions(+), 21 deletions(-)

diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h
index 2a29fa31c927..f4c348b5c4f1 100644
--- a/fs/smb/client/cifspdu.h
+++ b/fs/smb/client/cifspdu.h
@@ -1485,20 +1485,6 @@ struct file_notify_information {
 	__u8  FileName[];
 } __attribute__((packed));
 
-/* For IO_REPARSE_TAG_NFS */
-#define NFS_SPECFILE_LNK	0x00000000014B4E4C
-#define NFS_SPECFILE_CHR	0x0000000000524843
-#define NFS_SPECFILE_BLK	0x00000000004B4C42
-#define NFS_SPECFILE_FIFO	0x000000004F464946
-#define NFS_SPECFILE_SOCK	0x000000004B434F53
-struct reparse_posix_data {
-	__le32	ReparseTag;
-	__le16	ReparseDataLength;
-	__u16	Reserved;
-	__le64	InodeType; /* LNK, FIFO, CHR etc. */
-	__u8	DataBuffer[];
-} __attribute__((packed));
-
 struct cifs_quota_data {
 	__u32	rsrvd1;  /* 0 */
 	__u32	sid_size;
diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
index 40070e99fc8a..9fe9dd71a6fa 100644
--- a/fs/smb/client/reparse.c
+++ b/fs/smb/client/reparse.c
@@ -407,7 +407,7 @@ static int create_native_socket(const unsigned int xid, struct inode *inode,
 	return rc;
 }
 
-static int nfs_set_reparse_buf(struct reparse_posix_data *buf,
+static int nfs_set_reparse_buf(struct reparse_nfs_data_buffer *buf,
 			       mode_t mode, dev_t dev,
 			       __le16 *symname_utf16,
 			       int symname_utf16_len,
@@ -454,7 +454,7 @@ static int mknod_nfs(unsigned int xid, struct inode *inode,
 {
 	struct cifs_sb_info *cifs_sb = CIFS_SB(inode->i_sb);
 	struct cifs_open_info_data data;
-	struct reparse_posix_data *p = NULL;
+	struct reparse_nfs_data_buffer *p = NULL;
 	__le16 *symname_utf16 = NULL;
 	int symname_utf16_len = 0;
 	struct inode *new;
@@ -478,7 +478,7 @@ static int mknod_nfs(unsigned int xid, struct inode *inode,
 			goto out;
 		}
 	} else {
-		p = (struct reparse_posix_data *)buf;
+		p = (struct reparse_nfs_data_buffer *)buf;
 	}
 	rc = nfs_set_reparse_buf(p, mode, dev, symname_utf16, symname_utf16_len, &iov);
 	if (rc)
@@ -716,7 +716,7 @@ int smb2_mknod_reparse(unsigned int xid, struct inode *inode,
 }
 
 /* See MS-FSCC 2.1.2.6 for the 'NFS' style reparse tags */
-static int parse_reparse_posix(struct reparse_posix_data *buf,
+static int parse_reparse_nfs(struct reparse_nfs_data_buffer *buf,
 			       struct cifs_sb_info *cifs_sb,
 			       struct cifs_open_info_data *data)
 {
@@ -1069,7 +1069,7 @@ int parse_reparse_point(struct reparse_data_buffer *buf,
 	/* See MS-FSCC 2.1.2 */
 	switch (le32_to_cpu(buf->ReparseTag)) {
 	case IO_REPARSE_TAG_NFS:
-		return parse_reparse_posix((struct reparse_posix_data *)buf,
+		return parse_reparse_nfs((struct reparse_nfs_data_buffer *)buf,
 					   cifs_sb, data);
 	case IO_REPARSE_TAG_SYMLINK:
 		return parse_reparse_native_symlink(
@@ -1165,7 +1165,7 @@ static bool posix_reparse_to_fattr(struct cifs_sb_info *cifs_sb,
 				   struct cifs_fattr *fattr,
 				   struct cifs_open_info_data *data)
 {
-	struct reparse_posix_data *buf = (struct reparse_posix_data *)data->reparse.buf;
+	struct reparse_nfs_data_buffer *buf = (struct reparse_nfs_data_buffer *)data->reparse.buf;
 
 	if (buf == NULL)
 		return true;
diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h
index 3c7c706c797d..3336df2ea5d4 100644
--- a/fs/smb/common/smb2pdu.h
+++ b/fs/smb/common/smb2pdu.h
@@ -1550,7 +1550,19 @@ struct reparse_symlink_data_buffer {
 	__u8	PathBuffer[]; /* Variable Length */
 } __packed;
 
-/* See MS-FSCC 2.1.2.6 and cifspdu.h for struct reparse_posix_data */
+/* For IO_REPARSE_TAG_NFS - see MS-FSCC 2.1.2.6 */
+#define NFS_SPECFILE_LNK	0x00000000014B4E4C
+#define NFS_SPECFILE_CHR	0x0000000000524843
+#define NFS_SPECFILE_BLK	0x00000000004B4C42
+#define NFS_SPECFILE_FIFO	0x000000004F464946
+#define NFS_SPECFILE_SOCK	0x000000004B434F53
+struct reparse_nfs_data_buffer {
+	__le32	ReparseTag;
+	__le16	ReparseDataLength;
+	__u16	Reserved;
+	__le64	InodeType; /* NFS_SPECFILE_* */
+	__u8	DataBuffer[];
+} __packed;
 
 /* For IO_REPARSE_TAG_LX_SYMLINK */
 struct reparse_wsl_symlink_data_buffer {
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH 0/3] cifs: Cleanup of duplicated structures
  2024-12-22 17:24 [PATCH 0/3] cifs: Cleanup of duplicated structures Pali Rohár
                   ` (2 preceding siblings ...)
  2024-12-22 17:24 ` [PATCH 3/3] cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and move to common/smb2pdu.h Pali Rohár
@ 2024-12-24  7:38 ` Namjae Jeon
  3 siblings, 0 replies; 5+ messages in thread
From: Namjae Jeon @ 2024-12-24  7:38 UTC (permalink / raw)
  To: Pali Rohár
  Cc: Steve French, Paulo Alcantara, Ronnie Sahlberg,
	Sergey Senozhatsky, linux-cifs, linux-kernel

On Mon, Dec 23, 2024 at 2:24 AM Pali Rohár <pali@kernel.org> wrote:
>
> This patch series contains only code cleanup of few duplicates structures
> and enums between smb/common and smb/client subdirs. No function change.
>
> Can be useful also for ksmbd server part.
>
> Pali Rohár (3):
>   cifs: Remove struct reparse_posix_data from struct cifs_open_info_data
>   cifs: Remove duplicate struct reparse_symlink_data and
>     SYMLINK_FLAG_RELATIVE
>   cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and
>     move to common/smb2pdu.h
Looks good to me:)
Reviewed-by: Namjae Jeon <linkinjeon@kernel.org>

Thanks!
>
>  fs/smb/client/cifsglob.h |  5 +----
>  fs/smb/client/cifspdu.h  | 30 ------------------------------
>  fs/smb/client/reparse.c  | 15 +++++++--------
>  fs/smb/common/smb2pdu.h  | 14 +++++++++++++-
>  4 files changed, 21 insertions(+), 43 deletions(-)
>
> --
> 2.20.1
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2024-12-24  7:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-22 17:24 [PATCH 0/3] cifs: Cleanup of duplicated structures Pali Rohár
2024-12-22 17:24 ` [PATCH 1/3] cifs: Remove struct reparse_posix_data from struct cifs_open_info_data Pali Rohár
2024-12-22 17:24 ` [PATCH 2/3] cifs: Remove duplicate struct reparse_symlink_data and SYMLINK_FLAG_RELATIVE Pali Rohár
2024-12-22 17:24 ` [PATCH 3/3] cifs: Rename struct reparse_posix_data to reparse_nfs_data_buffer and move to common/smb2pdu.h Pali Rohár
2024-12-24  7:38 ` [PATCH 0/3] cifs: Cleanup of duplicated structures Namjae Jeon

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.