send_op(op);
 
-       rv = wait_event_killable(recv_wq, (op->done != 0));
-       if (rv == -ERESTARTSYS) {
-               spin_lock(&ops_lock);
-               /* recheck under ops_lock if we got a done != 0,
-                * if so this interrupt case should be ignored
-                */
-               if (op->done != 0) {
+       if (op->info.wait) {
+               rv = wait_event_killable(recv_wq, (op->done != 0));
+               if (rv == -ERESTARTSYS) {
+                       spin_lock(&ops_lock);
+                       /* recheck under ops_lock if we got a done != 0,
+                        * if so this interrupt case should be ignored
+                        */
+                       if (op->done != 0) {
+                               spin_unlock(&ops_lock);
+                               goto do_lock_wait;
+                       }
+                       list_del(&op->list);
                        spin_unlock(&ops_lock);
-                       goto do_lock_wait;
-               }
-               list_del(&op->list);
-               spin_unlock(&ops_lock);
 
-               log_debug(ls, "%s: wait interrupted %x %llx pid %d",
-                         __func__, ls->ls_global_id,
-                         (unsigned long long)number, op->info.pid);
-               do_unlock_close(&op->info);
-               dlm_release_plock_op(op);
-               goto out;
+                       log_debug(ls, "%s: wait interrupted %x %llx pid %d",
+                                 __func__, ls->ls_global_id,
+                                 (unsigned long long)number, op->info.pid);
+                       do_unlock_close(&op->info);
+                       dlm_release_plock_op(op);
+                       goto out;
+               }
+       } else {
+               wait_event(recv_wq, (op->done != 0));
        }
 
 do_lock_wait: