#define   CIFS_HAS_CREDITS 0x0400    /* already has credits */
 #define   CIFS_TRANSFORM_REQ 0x0800    /* transform request before sending */
+#define   CIFS_NO_SRV_RSP    0x1000    /* there is no server response */
 
 /* Security Flags: indicate type of session setup needed */
 #define   CIFSSEC_MAY_SIGN     0x00001
 
 
        if (lockType == LOCKING_ANDX_OPLOCK_RELEASE) {
                /* no response expected */
-               flags = CIFS_ASYNC_OP | CIFS_OBREAK_OP;
+               flags = CIFS_NO_SRV_RSP | CIFS_ASYNC_OP | CIFS_OBREAK_OP;
                pSMB->Timeout = 0;
        } else if (waitFlag) {
                flags = CIFS_BLOCKING_OP; /* blocking operation, no timeout */
 
 
        mutex_unlock(&ses->server->srv_mutex);
 
-       if (rc < 0) {
-               /* Sending failed for some reason - return credits back */
+       /*
+        * If sending failed for some reason or it is an oplock break that we
+        * will not receive a response to - return credits back
+        */
+       if (rc < 0 || (flags & CIFS_NO_SRV_RSP)) {
                for (i = 0; i < num_rqst; i++)
                        add_credits(ses->server, &credits[i], optype);
                goto out;
                smb311_update_preauth_hash(ses, rqst[0].rq_iov,
                                           rqst[0].rq_nvec);
 
-       if ((flags & CIFS_TIMEOUT_MASK) == CIFS_ASYNC_OP)
-               goto out;
-
        for (i = 0; i < num_rqst; i++) {
                rc = wait_for_response(ses->server, midQ[i]);
                if (rc != 0)