Linux CIFS filesystem development
 help / color / mirror / Atom feed
* SMB2 DELETE vs UNLINK
@ 2024-10-06 10:31 Pali Rohár
  2024-10-07  4:18 ` Steve French
                   ` (2 more replies)
  0 siblings, 3 replies; 23+ messages in thread
From: Pali Rohár @ 2024-10-06 10:31 UTC (permalink / raw)
  To: Steve French, Paulo Alcantara, Namjae Jeon; +Cc: linux-cifs

Hello,

Windows NT systems and SMB2 protocol support only DELETE operation which
unlinks file from the directory after the last client/process closes the
opened handle.

So when file is opened by more client/processes and somebody wants to
unlink that file, it stay in the directory until the last client/process
stop using it.

This DELETE operation can be issued either by CLOSE request on handle
opened by DELETE_ON_CLOSE flag, or by SET_INFO request with class 13
(FileDispositionInformation) and with set DeletePending flag.


But starting with Windows 10, version 1709, there is support also for
UNLINK operation, via class 64 (FileDispositionInformationEx) [1] where
is FILE_DISPOSITION_POSIX_SEMANTICS flag [2] which does UNLINK after
CLOSE and let file content usable for all other processes. Internally
Windows NT kernel moves this file on NTFS from its directory into some
hidden are. Which is de-facto same as what is POSIX unlink. There is
also class 65 (FileRenameInformationEx) which is allows to issue POSIX
rename (unlink the target if it exists).

What do you think about using & implementing this functionality for the
Linux unlink operation? As the class numbers are already reserved and
documented, I think that it could make sense to use them also over SMB
on POSIX systems.


Also there is another flag FILE_DISPOSITION_IGNORE_READONLY_ATTRIBUTE
which can be useful for unlink. It allows to unlink also file which has
read-only attribute set. So no need to do that racy (unset-readonly,
set-delete-pending, set-read-only) compound on files with more file
hardlinks.

I think that this is something which SMB3 POSIX extensions can use and
do not have to invent new extensions for the same functionality.


[1] - https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/wdm/ne-wdm-_file_information_class
[2] - https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntddk/ns-ntddk-_file_disposition_information_ex
[3] - https://learn.microsoft.com/en-us/windows-hardware/drivers/ddi/ntifs/ns-ntifs-_file_rename_information

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

end of thread, other threads:[~2025-08-31 12:55 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-06 10:31 SMB2 DELETE vs UNLINK Pali Rohár
2024-10-07  4:18 ` Steve French
2024-10-07 18:48   ` Pali Rohár
2024-10-08  0:07     ` Steve French
2024-10-08  9:40 ` Ralph Boehme
2024-10-08 18:18   ` Pali Rohár
2024-10-08 20:16     ` Ralph Boehme
2024-10-09  5:03     ` Steve French
2024-10-14  9:49       ` Pali Rohár
2024-12-27 15:58         ` Pali Rohár
2024-12-27 16:30           ` Tom Talpey
2024-12-25 14:47 ` Pali Rohár
2024-12-27 16:21   ` Tom Talpey
2024-12-27 16:32     ` Pali Rohár
2024-12-27 16:43       ` Tom Talpey
2024-12-27 18:51         ` Pali Rohár
2025-04-08 22:43           ` Pali Rohár
2025-04-09  6:50             ` Fwd: " Ralph Boehme
2025-04-09 15:57               ` [EXTERNAL] Fwd: SMB2 DELETE vs UNLINK - TrackingID#2504090040009564 Michael Bowen
2025-04-10  5:57                 ` Tom Talpey
2025-04-10 11:07                 ` Obaid Farooqi
2025-05-06 19:00                   ` Obaid Farooqi
2025-08-31 12:55                     ` Pali Rohár

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox