d2787b
From 5c81d813c8b1f494d31d54c1ab09a3f0153ebfd4 Mon Sep 17 00:00:00 2001
d2787b
From: Amar Tumballi <amarts@redhat.com>
d2787b
Date: Sat, 9 Feb 2019 13:13:47 +0530
d2787b
Subject: [PATCH 567/584] inode: create inode outside locked region
d2787b
d2787b
Only linking of inode to the table, and inserting it in
d2787b
a list needs to be in locked region.
d2787b
d2787b
Backport of:
d2787b
> Upstream-patch: https://review.gluster.org/#/c/glusterfs/+/22183/
d2787b
> Updates: bz#1670031
d2787b
> Change-Id: I6ea7e956b80cf2765c2233d761909c4bf9c7253c
d2787b
> Signed-off-by: Amar Tumballi <amarts@redhat.com>
d2787b
d2787b
BUG: 1927640
d2787b
Change-Id: I6ea7e956b80cf2765c2233d761909c4bf9c7253c
d2787b
Signed-off-by: Amar Tumballi <amarts@redhat.com>
d2787b
Reviewed-on: https://code.engineering.redhat.com/gerrit/c/rhs-glusterfs/+/244961
d2787b
Tested-by: RHGS Build Bot <nigelb@redhat.com>
d2787b
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
d2787b
---
d2787b
 libglusterfs/src/inode.c | 23 ++++++++++++-----------
d2787b
 1 file changed, 12 insertions(+), 11 deletions(-)
d2787b
d2787b
diff --git a/libglusterfs/src/inode.c b/libglusterfs/src/inode.c
d2787b
index 98f8ea6..46db04f 100644
d2787b
--- a/libglusterfs/src/inode.c
d2787b
+++ b/libglusterfs/src/inode.c
d2787b
@@ -620,7 +620,7 @@ out:
d2787b
 }
d2787b
 
d2787b
 static inode_t *
d2787b
-__inode_create(inode_table_t *table)
d2787b
+inode_create(inode_table_t *table)
d2787b
 {
d2787b
     inode_t *newi = NULL;
d2787b
 
d2787b
@@ -647,11 +647,7 @@ __inode_create(inode_table_t *table)
d2787b
         goto out;
d2787b
     }
d2787b
 
d2787b
-    list_add(&newi->list, &table->lru);
d2787b
-    table->lru_size++;
d2787b
-
d2787b
 out:
d2787b
-
d2787b
     return newi;
d2787b
 }
d2787b
 
d2787b
@@ -668,14 +664,16 @@ inode_new(inode_table_t *table)
d2787b
         return NULL;
d2787b
     }
d2787b
 
d2787b
-    pthread_mutex_lock(&table->lock);
d2787b
-    {
d2787b
-        inode = __inode_create(table);
d2787b
-        if (inode != NULL) {
d2787b
+    inode = inode_create(table);
d2787b
+    if (inode) {
d2787b
+        pthread_mutex_lock(&table->lock);
d2787b
+        {
d2787b
+            list_add(&inode->list, &table->lru);
d2787b
+            table->lru_size++;
d2787b
             __inode_ref(inode, false);
d2787b
         }
d2787b
+        pthread_mutex_unlock(&table->lock);
d2787b
     }
d2787b
-    pthread_mutex_unlock(&table->lock);
d2787b
 
d2787b
     return inode;
d2787b
 }
d2787b
@@ -1613,7 +1611,10 @@ __inode_table_init_root(inode_table_t *table)
d2787b
     if (!table)
d2787b
         return;
d2787b
 
d2787b
-    root = __inode_create(table);
d2787b
+    root = inode_create(table);
d2787b
+
d2787b
+    list_add(&root->list, &table->lru);
d2787b
+    table->lru_size++;
d2787b
 
d2787b
     iatt.ia_gfid[15] = 1;
d2787b
     iatt.ia_ino = 1;
d2787b
-- 
d2787b
1.8.3.1
d2787b