filesystems mounted within an SMB share and REPARSE_TAG_MOUNT_POINT

Andrew Walker awalker at ixsystems.com
Wed Feb 22 21:30:04 UTC 2023


I was recently reviewing fileid behavior in Samba for ZFS datasets mounted
within an SMB share and decided to see how a Windows server handles such a
situation (by mounting a separate NTFS volume within an SMB share on Server
2022 and poking around at it). I can provide pcaps for the morbidly curious.

SUBDS on Windows Server:
```
PS C:\SHARE> Get-Item .\SUBDS | format-list


    Directory: C:\SHARE



Name           : SUBDS
CreationTime   : 2/22/2023 10:45:52 AM
LastWriteTime  : 2/22/2023 10:45:52 AM
LastAccessTime : 2/22/2023 10:45:52 AM
Mode           : d----l
LinkType       : Junction
Target         : {Volume{5afcf2e4-f78f-4931-bfb1-a657a2577d06}\}
```

SMB2 QUERY_DIRECTORY with FileIdBothDirectoryInfo has
FILE_ATTRIBUTE_REPARSE_POINT set as well as REPARSE_TAG_MOUNT_POINT.
```
FileIdBothDirectoryInfo: SUBDS
    Next Offset: 0
    File Index: 0x00000000
    Create: Feb 22, 2023 10:45:52.500407200 Pacific Standard Time
    Last Access: Feb 22, 2023 10:45:52.500407200 Pacific Standard Time
    Last Write: Feb 22, 2023 10:45:52.500407200 Pacific Standard Time
    Last Change: Feb 22, 2023 10:45:56.880741900 Pacific Standard Time
    End Of File: 0
    Allocation Size: 0
    File Attributes: 0x00000410
    Filename Length: 10
    Reparse Tag: REPARSE_TAG_MOUNT_POINT (0xa0000003)
    Short Name Length: 0
    Reserved: 00
    Reserved: 0000
    File Id: 0x001e00000000b590
    Filename: SUBS
```

FILE_ATTRIBUTE_REPARSE_POINT is also set in File Attributes on SMB2 CREATE
response.

Samba currently uses the device ID and inode number to generate 64-bit file
ids in subordinate filesystems within an SMB share, but it seems like this
can lead to potential collisions. Windows, for instance, appears to make no
change to the 64-bit file IDs returned for NTFS volumes mounted within an
SMB share.

So this is a long way of asking, should we be flagging mounted filesystems
as reparse points and not altering the inode numbers?

The advantages of this are:
1. Windows File Explorer GUI clearly labels as a mounted filesystem and not
a directory
2. Windows File Explorer GUI clearly shows size of the filesystem
separately from one being shared.
3. REPARSE_TAG_MOUNT_POINT can be used by SMB clients to judge whether the
particular fileid should maybe be treated differently (since it may collide
with other volume mountpoints). (not sure if any non-MS clients do this).

Andrew


More information about the samba-technical mailing list