[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <0105d773-3030-4ee9-8b25-b074768df73c@samba.org>
Date: Sun, 29 Sep 2024 11:09:44 +0200
From: Ralph Boehme <slow@...ba.org>
To: Steve French <smfrench@...il.com>, Pali Rohár
<pali@...nel.org>
Cc: Steve French <sfrench@...ba.org>, Paulo Alcantara <pc@...guebit.com>,
Ronnie Sahlberg <ronniesahlberg@...il.com>, linux-cifs@...r.kernel.org,
linux-kernel@...r.kernel.org
Subject: Re: [PATCH 8/8] cifs: Rename posix to nfs in parse_reparse_posix()
and reparse_posix_data
Keep in mind that the inode type info will also be available via the
posix infolevel in the mode bits. The changes for Samba by Volker have
already been merged last week.
Spec draft:
https://gitlab.com/samba-team/smb3-posix-spec/-/merge_requests/2
<https://www.samba.org/~slow/SMB3_POSIX/fscc_posix_extensions.html#posix-mode>
Fwiw, in a future version of POSIX-FSA we will probably say that in
POSIX mode (per handle) the POSIX client MUST use the POSIXMode field
for the inode type and one MUST NOT use the NFS reparse point tag for
this. The server in POSIX mode MAY also set the reparse tag, but that's
still open to debate from my pov.
The NFS reparse tag will be there basically for the Windows clients in
non-POSIX mode and support will be mandatory in the server. The only
reparse tag we'd in POSIX mode for inode type information would be
IO_REPARSE_TAG_SYMLINK for symlinks.
-slow
On 9/29/24 6:57 AM, Steve French wrote:
> since they are being used by default for servers supporting special
> files in the "SMB3.1.1 POSIX Extensions" ... it might be appropriate
> to keep a less confusing name ("NFS" for "SMB3.1.1 POSIX" could be
> confusing)
>
> On Sat, Sep 28, 2024 at 5:01 PM Pali Rohár <pali@...nel.org> wrote:
>>
>> This function parses NFS-style reparse points, which are used only by
>> Windows NFS server since Windows Server 2012 version. This style of special
>> files 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.
>>
>> Signed-off-by: Pali Rohár <pali@...nel.org>
>> ---
>> fs/smb/client/cifsglob.h | 2 +-
>> fs/smb/client/cifspdu.h | 2 +-
>> fs/smb/client/reparse.c | 14 +++++++-------
>> fs/smb/client/reparse.h | 2 +-
>> fs/smb/common/smb2pdu.h | 2 +-
>> 5 files changed, 11 insertions(+), 11 deletions(-)
>>
>> diff --git a/fs/smb/client/cifsglob.h b/fs/smb/client/cifsglob.h
>> index 9eae8649f90c..119537e98f77 100644
>> --- a/fs/smb/client/cifsglob.h
>> +++ b/fs/smb/client/cifsglob.h
>> @@ -223,7 +223,7 @@ struct cifs_open_info_data {
>> __u32 tag;
>> union {
>> struct reparse_data_buffer *buf;
>> - struct reparse_posix_data *posix;
>> + struct reparse_nfs_data *nfs;
>> };
>> } reparse;
>> struct {
>> diff --git a/fs/smb/client/cifspdu.h b/fs/smb/client/cifspdu.h
>> index c3b6263060b0..fefd7e5eb170 100644
>> --- a/fs/smb/client/cifspdu.h
>> +++ b/fs/smb/client/cifspdu.h
>> @@ -1506,7 +1506,7 @@ struct reparse_symlink_data {
>> #define NFS_SPECFILE_BLK 0x00000000004B4C42
>> #define NFS_SPECFILE_FIFO 0x000000004F464946
>> #define NFS_SPECFILE_SOCK 0x000000004B434F53
>> -struct reparse_posix_data {
>> +struct reparse_nfs_data {
>> __le32 ReparseTag;
>> __le16 ReparseDataLength;
>> __u16 Reserved;
>> diff --git a/fs/smb/client/reparse.c b/fs/smb/client/reparse.c
>> index 35e8f2e18530..a23ea2f78c09 100644
>> --- a/fs/smb/client/reparse.c
>> +++ b/fs/smb/client/reparse.c
>> @@ -81,7 +81,7 @@ int smb2_create_reparse_symlink(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 *buf,
>> mode_t mode, dev_t dev,
>> struct kvec *iov)
>> {
>> @@ -120,20 +120,20 @@ static int mknod_nfs(unsigned int xid, struct inode *inode,
>> const char *full_path, umode_t mode, dev_t dev)
>> {
>> struct cifs_open_info_data data;
>> - struct reparse_posix_data *p;
>> + struct reparse_nfs_data *p;
>> struct inode *new;
>> struct kvec iov;
>> __u8 buf[sizeof(*p) + sizeof(__le64)];
>> int rc;
>>
>> - p = (struct reparse_posix_data *)buf;
>> + p = (struct reparse_nfs_data *)buf;
>> rc = nfs_set_reparse_buf(p, mode, dev, &iov);
>> if (rc)
>> return rc;
>>
>> data = (struct cifs_open_info_data) {
>> .reparse_point = true,
>> - .reparse = { .tag = IO_REPARSE_TAG_NFS, .posix = p, },
>> + .reparse = { .tag = IO_REPARSE_TAG_NFS, .nfs = p, },
>> };
>>
>> new = smb2_get_reparse_inode(&data, inode->i_sb, xid,
>> @@ -313,7 +313,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 *buf,
>> struct cifs_sb_info *cifs_sb,
>> struct cifs_open_info_data *data)
>> {
>> @@ -414,7 +414,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 *)buf,
>> cifs_sb, data);
>> case IO_REPARSE_TAG_SYMLINK:
>> return parse_reparse_symlink(
>> @@ -507,7 +507,7 @@ bool cifs_reparse_point_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_nfs_data *buf = data->reparse.nfs;
>> u32 tag = data->reparse.tag;
>>
>> if (tag == IO_REPARSE_TAG_NFS && buf) {
>> diff --git a/fs/smb/client/reparse.h b/fs/smb/client/reparse.h
>> index 5be54878265e..2a91f64de557 100644
>> --- a/fs/smb/client/reparse.h
>> +++ b/fs/smb/client/reparse.h
>> @@ -18,7 +18,7 @@
>> */
>> #define IO_REPARSE_TAG_INTERNAL ((__u32)~0U)
>>
>> -static inline dev_t reparse_nfs_mkdev(struct reparse_posix_data *buf)
>> +static inline dev_t reparse_nfs_mkdev(struct reparse_nfs_data *buf)
>> {
>> u32 major, minor;
>>
>> diff --git a/fs/smb/common/smb2pdu.h b/fs/smb/common/smb2pdu.h
>> index c769f9dbc0b4..0e77a4c0145a 100644
>> --- a/fs/smb/common/smb2pdu.h
>> +++ b/fs/smb/common/smb2pdu.h
>> @@ -1550,7 +1550,7 @@ 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 */
>> +/* See MS-FSCC 2.1.2.6 and cifspdu.h for struct reparse_nfs_data */
>>
>> struct validate_negotiate_info_req {
>> __le32 Capabilities;
>> --
>> 2.20.1
>>
>>
>
>
Download attachment "OpenPGP_signature.asc" of type "application/pgp-signature" (841 bytes)
Powered by blists - more mailing lists