|
@@ -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 = {
|