From ac576a53877bdcfc3b80d08932deeea7dfe0eb32 Mon Sep 17 00:00:00 2001 From: Ashish Pandey Date: Tue, 20 Dec 2016 16:09:10 +0530 Subject: 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 >Reviewed-on: http://review.gluster.org/16212 >Smoke: Gluster Build System >NetBSD-regression: NetBSD Build System >CentOS-regression: Gluster Build System >Reviewed-by: Pranith Kumar Karampuri >Signed-off-by: Ashish Pandey Change-Id: Ie4966a550ed44046e0f2d10e9dbd540182ea97d2 BUG: 1407014 Signed-off-by: Ashish Pandey Reviewed-on: http://review.gluster.org/16267 Smoke: Gluster Build System NetBSD-regression: NetBSD Build System CentOS-regression: Gluster Build System Reviewed-by: Pranith Kumar Karampuri --- 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 0b1fe56b9b4..da57cb48da2 100644 --- a/xlators/storage/posix/src/posix.c +++ b/xlators/storage/posix/src/posix.c @@ -1479,8 +1479,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)) { -- cgit