Blob Blame History Raw
From 9f8b8df58d65fcefbe858d39328f4a9db7d4ebf6 Mon Sep 17 00:00:00 2001
From: Ashish Pandey <aspandey@redhat.com>
Date: Tue, 20 Dec 2016 16:09:10 +0530
Subject: [PATCH 251/257] storage/posix: Do not create a directory which
 already exist

Problem: While brick process starts, it tries to create trashcan
and internal_op directory with fixed gfids. For the first time
these directories will not be present. However, stop and start
of volume again tries to create these directories, which are
already present.
This throws a gfid exist warning and EEXIST error in logs.

Solution: Check if the directory exist on brick and gfid of
this dir and the requested gfid matches or not.

>Change-Id: Ie4966a550ed44046e0f2d10e9dbd540182ea97d2
>BUG: 1406348
>Signed-off-by: Ashish Pandey <aspandey@redhat.com>
>Reviewed-on: http://review.gluster.org/16212
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
>Signed-off-by: Ashish Pandey <aspandey@redhat.com>

Change-Id: Ie4966a550ed44046e0f2d10e9dbd540182ea97d2
BUG: 1404110
Signed-off-by: Ashish Pandey <aspandey@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/93559
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Tested-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
---
 xlators/storage/posix/src/posix.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/xlators/storage/posix/src/posix.c b/xlators/storage/posix/src/posix.c
index 2d9e3f6..266cd5d 100644
--- a/xlators/storage/posix/src/posix.c
+++ b/xlators/storage/posix/src/posix.c
@@ -1465,8 +1465,15 @@ posix_mkdir (call_frame_t *frame, xlator_t *this,
 
         SET_FS_ID (frame->root->uid, gid);
 
-        if (xdata)
+        if (xdata) {
                 op_ret = dict_get_ptr (xdata, "gfid-req", &uuid_req);
+                if (!op_ret && !gf_uuid_compare (stbuf.ia_gfid, uuid_req)) {
+                        op_ret = -1;
+                        op_errno = EEXIST;
+                        goto out;
+                }
+        }
+
         if (uuid_req && !gf_uuid_is_null (uuid_req)) {
                 op_ret = posix_istat (this, uuid_req, NULL, &stbuf);
                 if ((op_ret == 0) && IA_ISDIR (stbuf.ia_type)) {
-- 
2.9.3