This patch moves the return of FILE_LOCK_DEFERRED a little bit earlier
than checking afterwards again if the request was an asynchronous request.

Signed-off-by: Alexander Aring <aahri...@redhat.com>
---
 fs/dlm/plock.c | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

diff --git a/fs/dlm/plock.c b/fs/dlm/plock.c
index 4e60dd657cb6..757d9013788a 100644
--- a/fs/dlm/plock.c
+++ b/fs/dlm/plock.c
@@ -149,26 +149,25 @@ int dlm_posix_lock(dlm_lockspace_t *lockspace, u64 
number, struct file *file,
                op_data->file   = file;
 
                op->data = op_data;
+
+               send_op(op);
+               rv = FILE_LOCK_DEFERRED;
+               goto out;
        } else {
                op->info.owner  = (__u64)(long) fl->fl_owner;
        }
 
        send_op(op);
 
-       if (!op->data) {
-               rv = wait_event_interruptible(recv_wq, (op->done != 0));
-               if (rv == -ERESTARTSYS) {
-                       log_debug(ls, "dlm_posix_lock: wait killed %llx",
-                                 (unsigned long long)number);
-                       spin_lock(&ops_lock);
-                       list_del(&op->list);
-                       spin_unlock(&ops_lock);
-                       dlm_release_plock_op(op);
-                       do_unlock_close(ls, number, file, fl);
-                       goto out;
-               }
-       } else {
-               rv = FILE_LOCK_DEFERRED;
+       rv = wait_event_interruptible(recv_wq, (op->done != 0));
+       if (rv == -ERESTARTSYS) {
+               log_debug(ls, "%s: wait killed %llx", __func__,
+                         (unsigned long long)number);
+               spin_lock(&ops_lock);
+               list_del(&op->list);
+               spin_unlock(&ops_lock);
+               dlm_release_plock_op(op);
+               do_unlock_close(ls, number, file, fl);
                goto out;
        }
 
-- 
2.31.1

Reply via email to