9ae3f9
From c38b38249fdf951565f6501ce8e9a4d01142d43e Mon Sep 17 00:00:00 2001
9ae3f9
From: l17zhou <cynthia.zhou@nokia-sbell.com>
9ae3f9
Date: Tue, 3 Dec 2019 07:43:35 +0200
9ae3f9
Subject: [PATCH 456/456] add clean local after grant lock
9ae3f9
9ae3f9
found by flock test, without correct ref number of fd,
9ae3f9
lock will not be correctly released.
9ae3f9
9ae3f9
Upstream patch:
9ae3f9
> Upstream patch link: https://review.gluster.org/c/glusterfs/+/23794
9ae3f9
> Fixes: bz#1779089
9ae3f9
> Change-Id: I3e466b17c852eb219c8778e43af8ad670a8449cc
9ae3f9
> Signed-off-by: l17zhou <cynthia.zhou@nokia-sbell.com>
9ae3f9
9ae3f9
BUG: 1854165
9ae3f9
Change-Id: I3e466b17c852eb219c8778e43af8ad670a8449cc
9ae3f9
Signed-off-by: Xavi Hernandez <xhernandez@redhat.com>
9ae3f9
Reviewed-on: https://code.engineering.redhat.com/gerrit/206673
9ae3f9
Tested-by: RHGS Build Bot <nigelb@redhat.com>
9ae3f9
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
9ae3f9
---
9ae3f9
 xlators/features/locks/src/common.c | 15 ++++++++-------
9ae3f9
 1 file changed, 8 insertions(+), 7 deletions(-)
9ae3f9
9ae3f9
diff --git a/xlators/features/locks/src/common.c b/xlators/features/locks/src/common.c
9ae3f9
index 0c52853..cddbfa6 100644
9ae3f9
--- a/xlators/features/locks/src/common.c
9ae3f9
+++ b/xlators/features/locks/src/common.c
9ae3f9
@@ -961,7 +961,7 @@ grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode)
9ae3f9
     struct list_head granted_list;
9ae3f9
     posix_lock_t *tmp = NULL;
9ae3f9
     posix_lock_t *lock = NULL;
9ae3f9
-
9ae3f9
+    pl_local_t *local = NULL;
9ae3f9
     INIT_LIST_HEAD(&granted_list);
9ae3f9
 
9ae3f9
     pthread_mutex_lock(&pl_inode->mutex);
9ae3f9
@@ -976,9 +976,9 @@ grant_blocked_locks(xlator_t *this, pl_inode_t *pl_inode)
9ae3f9
 
9ae3f9
         pl_trace_out(this, lock->frame, NULL, NULL, F_SETLKW, &lock->user_flock,
9ae3f9
                      0, 0, NULL);
9ae3f9
-
9ae3f9
-        STACK_UNWIND_STRICT(lk, lock->frame, 0, 0, &lock->user_flock, NULL);
9ae3f9
-
9ae3f9
+        local = lock->frame->local;
9ae3f9
+        PL_STACK_UNWIND_AND_FREE(local, lk, lock->frame, 0, 0,
9ae3f9
+                                 &lock->user_flock, NULL);
9ae3f9
         __destroy_lock(lock);
9ae3f9
     }
9ae3f9
 
9ae3f9
@@ -997,6 +997,7 @@ pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,
9ae3f9
     struct list_head granted_list;
9ae3f9
     posix_lock_t *tmp = NULL;
9ae3f9
     posix_lock_t *lock = NULL;
9ae3f9
+    pl_local_t *local = NULL;
9ae3f9
 
9ae3f9
     int ret = -1;
9ae3f9
 
9ae3f9
@@ -1024,9 +1025,9 @@ pl_send_prelock_unlock(xlator_t *this, pl_inode_t *pl_inode,
9ae3f9
 
9ae3f9
         pl_trace_out(this, lock->frame, NULL, NULL, F_SETLKW, &lock->user_flock,
9ae3f9
                      0, 0, NULL);
9ae3f9
-
9ae3f9
-        STACK_UNWIND_STRICT(lk, lock->frame, 0, 0, &lock->user_flock, NULL);
9ae3f9
-
9ae3f9
+        local = lock->frame->local;
9ae3f9
+        PL_STACK_UNWIND_AND_FREE(local, lk, lock->frame, 0, 0,
9ae3f9
+                                 &lock->user_flock, NULL);
9ae3f9
         __destroy_lock(lock);
9ae3f9
     }
9ae3f9
 
9ae3f9
-- 
9ae3f9
1.8.3.1
9ae3f9