[PATCH 4/4] ksmbd: enforce write-through on CA share opens
Yunseong Kim <[email protected]>
| Newsgroups | org.kernel.vger.linux-kernel,org.kernel.vger.linux-cifs |
|---|---|
| Message-ID | <[email protected]> |
Per MS-SMB2 3.3.5.9, opens on Continuously Available shares MUST have FILE_WRITE_THROUGH semantics to ensure data is committed to stable storage before the operation completes. This is required because persistent handles may need to be recovered after a server failure, and any data not flushed to disk would be lost. Force FILE_WRITE_THROUGH_LE in the CreateOptions passed to ksmbd_vfs_set_fadvise() for files opened on CA shares, which sets O_SYNC on the underlying file descriptor. Signed-off-by: Yunseong Kim <[email protected]> --- fs/smb/server/smb2pdu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/fs/smb/server/smb2pdu.c b/fs/smb/server/smb2pdu.c index 36efc3f0bf15..beb5120013ed 100644 --- a/fs/smb/server/smb2pdu.c +++ b/fs/smb/server/smb2pdu.c @@ -4681,7 +4681,14 @@ int smb2_open(struct ksmbd_work *work) file_info = FILE_CREATED; } - ksmbd_vfs_set_fadvise(filp, req->CreateOptions); + /* + * MS-SMB2 3.3.5.9: Opens on CA shares MUST have FILE_WRITE_THROUGH + * semantics to ensure data is committed to stable storage. + */ + if (test_share_config_flag(share, KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY)) + ksmbd_vfs_set_fadvise(filp, req->CreateOptions | FILE_WRITE_THROUGH_LE); + else + ksmbd_vfs_set_fadvise(filp, req->CreateOptions); /* Obtain Volatile-ID */ fp = ksmbd_open_fd(work, filp); -- 2.47.3