continue;
                        }
 
-                       if (lctx->req_state != lease->state)
-                               lease->epoch++;
-
                        /* upgrading lease */
                        if ((atomic_read(&ci->op_count) +
                             atomic_read(&ci->sop_count)) == 1) {
                                if (lease->state != SMB2_LEASE_NONE_LE &&
                                    lease->state == (lctx->req_state & lease->state)) {
+                                       lease->epoch++;
                                        lease->state |= lctx->req_state;
                                        if (lctx->req_state &
                                                SMB2_LEASE_WRITE_CACHING_LE)
                                    atomic_read(&ci->sop_count)) > 1) {
                                if (lctx->req_state ==
                                    (SMB2_LEASE_READ_CACHING_LE |
-                                    SMB2_LEASE_HANDLE_CACHING_LE))
+                                    SMB2_LEASE_HANDLE_CACHING_LE)) {
+                                       lease->epoch++;
                                        lease->state = lctx->req_state;
+                               }
                        }
 
                        if (lctx->req_state && lease->state ==
-                           SMB2_LEASE_NONE_LE)
+                           SMB2_LEASE_NONE_LE) {
+                               lease->epoch++;
                                lease_none_upgrade(opinfo, lctx->req_state);
+                       }
                }
                read_lock(&ci->m_lock);
        }
 
        if (!file_info->ReplaceIfExists)
                flags = RENAME_NOREPLACE;
 
+       smb_break_all_levII_oplock(work, fp, 0);
        rc = ksmbd_vfs_rename(work, &fp->filp->f_path, new_name, flags);
 out:
        kfree(new_name);