ksmbd: add continuous availability share parameter
If capabilities of the share is not SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY, ksmbd should not grant a persistent handle to the client. This patch add continuous availability share parameter to control it. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
0268a7cc7f
commit
e9d8c2f95a
2 changed files with 27 additions and 19 deletions
|
@ -340,23 +340,24 @@ enum KSMBD_TREE_CONN_STATUS {
|
||||||
/*
|
/*
|
||||||
* Share config flags.
|
* Share config flags.
|
||||||
*/
|
*/
|
||||||
#define KSMBD_SHARE_FLAG_INVALID (0)
|
#define KSMBD_SHARE_FLAG_INVALID (0)
|
||||||
#define KSMBD_SHARE_FLAG_AVAILABLE BIT(0)
|
#define KSMBD_SHARE_FLAG_AVAILABLE BIT(0)
|
||||||
#define KSMBD_SHARE_FLAG_BROWSEABLE BIT(1)
|
#define KSMBD_SHARE_FLAG_BROWSEABLE BIT(1)
|
||||||
#define KSMBD_SHARE_FLAG_WRITEABLE BIT(2)
|
#define KSMBD_SHARE_FLAG_WRITEABLE BIT(2)
|
||||||
#define KSMBD_SHARE_FLAG_READONLY BIT(3)
|
#define KSMBD_SHARE_FLAG_READONLY BIT(3)
|
||||||
#define KSMBD_SHARE_FLAG_GUEST_OK BIT(4)
|
#define KSMBD_SHARE_FLAG_GUEST_OK BIT(4)
|
||||||
#define KSMBD_SHARE_FLAG_GUEST_ONLY BIT(5)
|
#define KSMBD_SHARE_FLAG_GUEST_ONLY BIT(5)
|
||||||
#define KSMBD_SHARE_FLAG_STORE_DOS_ATTRS BIT(6)
|
#define KSMBD_SHARE_FLAG_STORE_DOS_ATTRS BIT(6)
|
||||||
#define KSMBD_SHARE_FLAG_OPLOCKS BIT(7)
|
#define KSMBD_SHARE_FLAG_OPLOCKS BIT(7)
|
||||||
#define KSMBD_SHARE_FLAG_PIPE BIT(8)
|
#define KSMBD_SHARE_FLAG_PIPE BIT(8)
|
||||||
#define KSMBD_SHARE_FLAG_HIDE_DOT_FILES BIT(9)
|
#define KSMBD_SHARE_FLAG_HIDE_DOT_FILES BIT(9)
|
||||||
#define KSMBD_SHARE_FLAG_INHERIT_OWNER BIT(10)
|
#define KSMBD_SHARE_FLAG_INHERIT_OWNER BIT(10)
|
||||||
#define KSMBD_SHARE_FLAG_STREAMS BIT(11)
|
#define KSMBD_SHARE_FLAG_STREAMS BIT(11)
|
||||||
#define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS BIT(12)
|
#define KSMBD_SHARE_FLAG_FOLLOW_SYMLINKS BIT(12)
|
||||||
#define KSMBD_SHARE_FLAG_ACL_XATTR BIT(13)
|
#define KSMBD_SHARE_FLAG_ACL_XATTR BIT(13)
|
||||||
#define KSMBD_SHARE_FLAG_UPDATE BIT(14)
|
#define KSMBD_SHARE_FLAG_UPDATE BIT(14)
|
||||||
#define KSMBD_SHARE_FLAG_CROSSMNT BIT(15)
|
#define KSMBD_SHARE_FLAG_CROSSMNT BIT(15)
|
||||||
|
#define KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY BIT(16)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Tree connect request flags.
|
* Tree connect request flags.
|
||||||
|
|
|
@ -1988,7 +1988,12 @@ int smb2_tree_connect(struct ksmbd_work *work)
|
||||||
write_unlock(&sess->tree_conns_lock);
|
write_unlock(&sess->tree_conns_lock);
|
||||||
rsp->StructureSize = cpu_to_le16(16);
|
rsp->StructureSize = cpu_to_le16(16);
|
||||||
out_err1:
|
out_err1:
|
||||||
rsp->Capabilities = 0;
|
if (server_conf.flags & KSMBD_GLOBAL_FLAG_DURABLE_HANDLE &&
|
||||||
|
test_share_config_flag(share,
|
||||||
|
KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY))
|
||||||
|
rsp->Capabilities = SMB2_SHARE_CAP_CONTINUOUS_AVAILABILITY;
|
||||||
|
else
|
||||||
|
rsp->Capabilities = 0;
|
||||||
rsp->Reserved = 0;
|
rsp->Reserved = 0;
|
||||||
/* default manual caching */
|
/* default manual caching */
|
||||||
rsp->ShareFlags = SMB2_SHAREFLAG_MANUAL_CACHING;
|
rsp->ShareFlags = SMB2_SHAREFLAG_MANUAL_CACHING;
|
||||||
|
@ -3502,7 +3507,9 @@ int smb2_open(struct ksmbd_work *work)
|
||||||
memcpy(fp->client_guid, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE);
|
memcpy(fp->client_guid, conn->ClientGUID, SMB2_CLIENT_GUID_SIZE);
|
||||||
|
|
||||||
if (dh_info.type == DURABLE_REQ_V2 || dh_info.type == DURABLE_REQ) {
|
if (dh_info.type == DURABLE_REQ_V2 || dh_info.type == DURABLE_REQ) {
|
||||||
if (dh_info.type == DURABLE_REQ_V2 && dh_info.persistent)
|
if (dh_info.type == DURABLE_REQ_V2 && dh_info.persistent &&
|
||||||
|
test_share_config_flag(work->tcon->share_conf,
|
||||||
|
KSMBD_SHARE_FLAG_CONTINUOUS_AVAILABILITY))
|
||||||
fp->is_persistent = true;
|
fp->is_persistent = true;
|
||||||
else
|
else
|
||||||
fp->is_durable = true;
|
fp->is_durable = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue