2023-12-16 22:37 GMT+09:00, Tom Talpey <tom@xxxxxxxxxx>: > On 12/16/2023 7:29 AM, Namjae Jeon wrote: >> If file opened with v2 lease is upgraded with v1 lease, smb server > > Can you elaborate on this scenario? Lease v1 is SMB2, while v2 is SMB3. > So how can the same client expect to do both? And how can the server > support that? This patch is to fix smb2.lease.epoch2 testcase in smbtorture. This test case assumes the following scenario: 1. smb2 create with v2 lease(R, LEASE1 key) 2. smb server return smb2 create response with v2 lease context(R, LEASE1 key, epoch + 1) 3. smb2 create with v1 lease(RH, LEASE1 key) 4. smb server return smb2 create response with v2 lease context(RH, LEASE1 key, epoch + 2) i.e. If same client(same lease key) try to open a file that is being opened with v2 lease with v1 lease, smb server should return v2 lease create context to client. > > MS-SMB2: > >> 3.2.4.3.8 Requesting a Lease on a File or a Directory > ... >> If Connection.Dialect belongs to the SMB 3.x dialect family, the client >> MUST attach an >> SMB2_CREATE_REQUEST_LEASE_V2 create context to the request. The create >> context MUST be >> formatted as described in section 2.2.13.2.10 with the following values > ... >> If Connection.Dialect is equal to "2.1", the client MUST attach an >> SMB2_CREATE_REQUEST_LEASE >> create context to the request. The create context MUST be formatted as >> described in section >> 2.2.13.2.8, with the LeaseState value provided by the application > > > > Tom. > >> should response v2 lease create context to client. >> This patch fix smb2.lease.v2_epoch2 test failure. >> >> Signed-off-by: Namjae Jeon <linkinjeon@xxxxxxxxxx> >> --- >> fs/smb/server/oplock.c | 1 + >> 1 file changed, 1 insertion(+) >> >> diff --git a/fs/smb/server/oplock.c b/fs/smb/server/oplock.c >> index 562b180459a1..9a19d8b06c8c 100644 >> --- a/fs/smb/server/oplock.c >> +++ b/fs/smb/server/oplock.c >> @@ -1036,6 +1036,7 @@ static void copy_lease(struct oplock_info *op1, >> struct oplock_info *op2) >> lease2->duration = lease1->duration; >> lease2->flags = lease1->flags; >> lease2->epoch = lease1->epoch++; >> + lease2->version = lease1->version; >> } >> >> static int add_lease_global_list(struct oplock_info *opinfo) >