]> www.infradead.org Git - users/willy/xarray.git/commitdiff
ksmbd: avoid to send duplicate oplock break notifications
authorNamjae Jeon <linkinjeon@kernel.org>
Thu, 9 May 2024 06:25:39 +0000 (15:25 +0900)
committerSteve French <stfrench@microsoft.com>
Sun, 12 May 2024 21:53:16 +0000 (16:53 -0500)
This patch fixes generic/011 when oplocks is enable.

Avoid to send duplicate oplock break notifications like smb2 leases
case.

Fixes: 97c2ec64667b ("ksmbd: avoid to send duplicate lease break notifications")
Cc: stable@vger.kernel.org
Signed-off-by: Namjae Jeon <linkinjeon@kernel.org>
Signed-off-by: Steve French <stfrench@microsoft.com>
fs/smb/server/oplock.c

index b9d9116fc2b3f2848cefd1f8aeea18f2d0708a10..a8f52c4ebbdadd2c966b5a247058c3205be6e0f3 100644 (file)
@@ -610,19 +610,24 @@ static int oplock_break_pending(struct oplock_info *opinfo, int req_op_level)
                if (opinfo->op_state == OPLOCK_CLOSING)
                        return -ENOENT;
                else if (opinfo->level <= req_op_level) {
-                       if (opinfo->is_lease &&
-                           opinfo->o_lease->state !=
-                            (SMB2_LEASE_HANDLE_CACHING_LE |
-                             SMB2_LEASE_READ_CACHING_LE))
+                       if (opinfo->is_lease == false)
+                               return 1;
+
+                       if (opinfo->o_lease->state !=
+                           (SMB2_LEASE_HANDLE_CACHING_LE |
+                            SMB2_LEASE_READ_CACHING_LE))
                                return 1;
                }
        }
 
        if (opinfo->level <= req_op_level) {
-               if (opinfo->is_lease &&
-                   opinfo->o_lease->state !=
-                    (SMB2_LEASE_HANDLE_CACHING_LE |
-                     SMB2_LEASE_READ_CACHING_LE)) {
+               if (opinfo->is_lease == false) {
+                       wake_up_oplock_break(opinfo);
+                       return 1;
+               }
+               if (opinfo->o_lease->state !=
+                   (SMB2_LEASE_HANDLE_CACHING_LE |
+                    SMB2_LEASE_READ_CACHING_LE)) {
                        wake_up_oplock_break(opinfo);
                        return 1;
                }