|
|
|
@ -748,6 +748,16 @@ smb2_create_lease_buf(u8 *lease_key, u8 oplock) |
|
|
|
|
return (char *)buf; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static __u8 |
|
|
|
|
smb2_parse_lease_buf(void *buf) |
|
|
|
|
{ |
|
|
|
|
struct create_lease *lc = (struct create_lease *)buf; |
|
|
|
|
|
|
|
|
|
if (lc->lcontext.LeaseFlags & SMB2_LEASE_FLAG_BREAK_IN_PROGRESS) |
|
|
|
|
return SMB2_OPLOCK_LEVEL_NOCHANGE; |
|
|
|
|
return le32_to_cpu(lc->lcontext.LeaseState); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
struct smb_version_operations smb20_operations = { |
|
|
|
|
.compare_fids = smb2_compare_fids, |
|
|
|
|
.setup_request = smb2_setup_request, |
|
|
|
@ -816,6 +826,7 @@ struct smb_version_operations smb20_operations = { |
|
|
|
|
.is_read_op = smb2_is_read_op, |
|
|
|
|
.set_oplock_level = smb2_set_oplock_level, |
|
|
|
|
.create_lease_buf = smb2_create_lease_buf, |
|
|
|
|
.parse_lease_buf = smb2_parse_lease_buf, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct smb_version_operations smb21_operations = { |
|
|
|
@ -886,6 +897,7 @@ struct smb_version_operations smb21_operations = { |
|
|
|
|
.is_read_op = smb21_is_read_op, |
|
|
|
|
.set_oplock_level = smb21_set_oplock_level, |
|
|
|
|
.create_lease_buf = smb2_create_lease_buf, |
|
|
|
|
.parse_lease_buf = smb2_parse_lease_buf, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct smb_version_operations smb30_operations = { |
|
|
|
@ -958,6 +970,7 @@ struct smb_version_operations smb30_operations = { |
|
|
|
|
.is_read_op = smb21_is_read_op, |
|
|
|
|
.set_oplock_level = smb21_set_oplock_level, |
|
|
|
|
.create_lease_buf = smb2_create_lease_buf, |
|
|
|
|
.parse_lease_buf = smb2_parse_lease_buf, |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
struct smb_version_values smb20_values = { |
|
|
|
|