mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-05 10:31:46 +09:00
ksmbd: set epoch in create context v2 lease
[ Upstream commit d045850b628aaf931fc776c90feaf824dca5a1cf ] To support v2 lease(directory lease), ksmbd set epoch in create context v2 lease response. Signed-off-by: Namjae Jeon <linkinjeon@kernel.org> Signed-off-by: Steve French <stfrench@microsoft.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
52a32eafd0
commit
3eddc811a7
@@ -104,7 +104,7 @@ static int alloc_lease(struct oplock_info *opinfo, struct lease_ctx_info *lctx)
|
|||||||
lease->duration = lctx->duration;
|
lease->duration = lctx->duration;
|
||||||
memcpy(lease->parent_lease_key, lctx->parent_lease_key, SMB2_LEASE_KEY_SIZE);
|
memcpy(lease->parent_lease_key, lctx->parent_lease_key, SMB2_LEASE_KEY_SIZE);
|
||||||
lease->version = lctx->version;
|
lease->version = lctx->version;
|
||||||
lease->epoch = 0;
|
lease->epoch = le16_to_cpu(lctx->epoch);
|
||||||
INIT_LIST_HEAD(&opinfo->lease_entry);
|
INIT_LIST_HEAD(&opinfo->lease_entry);
|
||||||
opinfo->o_lease = lease;
|
opinfo->o_lease = lease;
|
||||||
|
|
||||||
@@ -1032,6 +1032,7 @@ static void copy_lease(struct oplock_info *op1, struct oplock_info *op2)
|
|||||||
SMB2_LEASE_KEY_SIZE);
|
SMB2_LEASE_KEY_SIZE);
|
||||||
lease2->duration = lease1->duration;
|
lease2->duration = lease1->duration;
|
||||||
lease2->flags = lease1->flags;
|
lease2->flags = lease1->flags;
|
||||||
|
lease2->epoch = lease1->epoch++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int add_lease_global_list(struct oplock_info *opinfo)
|
static int add_lease_global_list(struct oplock_info *opinfo)
|
||||||
@@ -1364,6 +1365,7 @@ void create_lease_buf(u8 *rbuf, struct lease *lease)
|
|||||||
memcpy(buf->lcontext.LeaseKey, lease->lease_key,
|
memcpy(buf->lcontext.LeaseKey, lease->lease_key,
|
||||||
SMB2_LEASE_KEY_SIZE);
|
SMB2_LEASE_KEY_SIZE);
|
||||||
buf->lcontext.LeaseFlags = lease->flags;
|
buf->lcontext.LeaseFlags = lease->flags;
|
||||||
|
buf->lcontext.Epoch = cpu_to_le16(++lease->epoch);
|
||||||
buf->lcontext.LeaseState = lease->state;
|
buf->lcontext.LeaseState = lease->state;
|
||||||
memcpy(buf->lcontext.ParentLeaseKey, lease->parent_lease_key,
|
memcpy(buf->lcontext.ParentLeaseKey, lease->parent_lease_key,
|
||||||
SMB2_LEASE_KEY_SIZE);
|
SMB2_LEASE_KEY_SIZE);
|
||||||
@@ -1423,6 +1425,7 @@ struct lease_ctx_info *parse_lease_state(void *open_req)
|
|||||||
memcpy(lreq->lease_key, lc->lcontext.LeaseKey, SMB2_LEASE_KEY_SIZE);
|
memcpy(lreq->lease_key, lc->lcontext.LeaseKey, SMB2_LEASE_KEY_SIZE);
|
||||||
lreq->req_state = lc->lcontext.LeaseState;
|
lreq->req_state = lc->lcontext.LeaseState;
|
||||||
lreq->flags = lc->lcontext.LeaseFlags;
|
lreq->flags = lc->lcontext.LeaseFlags;
|
||||||
|
lreq->epoch = lc->lcontext.Epoch;
|
||||||
lreq->duration = lc->lcontext.LeaseDuration;
|
lreq->duration = lc->lcontext.LeaseDuration;
|
||||||
memcpy(lreq->parent_lease_key, lc->lcontext.ParentLeaseKey,
|
memcpy(lreq->parent_lease_key, lc->lcontext.ParentLeaseKey,
|
||||||
SMB2_LEASE_KEY_SIZE);
|
SMB2_LEASE_KEY_SIZE);
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ struct lease_ctx_info {
|
|||||||
__le32 flags;
|
__le32 flags;
|
||||||
__le64 duration;
|
__le64 duration;
|
||||||
__u8 parent_lease_key[SMB2_LEASE_KEY_SIZE];
|
__u8 parent_lease_key[SMB2_LEASE_KEY_SIZE];
|
||||||
|
__le16 epoch;
|
||||||
int version;
|
int version;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user