summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorKrutika Dhananjay <kdhananj@redhat.com>2016-07-28 22:37:38 +0530
committerPranith Kumar Karampuri <pkarampu@redhat.com>2016-07-30 03:59:00 -0700
commitb653bcbf652e05659189e2f9dbb9767dcd969d55 (patch)
tree18e7e0578405363c707bd7a07899587c280d5131 /xlators
parentfe1054110ac54750ca0333a727d83b14a98e165e (diff)
storage/posix: Look for file in "unlink" dir IFF open on real-path fails with ENOENT
Backport of: http://review.gluster.org/#/c/15039/ PROBLEM: In some of our users' setups, open() on the anon fd failed for a reason other than ENOENT. But this error code is getting masked by a subsequent open() under posix's hidden "unlink" directory, which will fail with ENOENT because the gfid handle still exists under .glusterfs. And the log message following the two open()s ends up logging ENOENT, causing much confusion. FIX: Look for the presence of the file under "unlink" ONLY if the open() on the real_path failed with ENOENT. Change-Id: Id83782fb3995d578881f7a586c83c3e0baea2ae8 BUG: 1361449 Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com> Reviewed-on: http://review.gluster.org/15042 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/storage/posix/src/posix-helpers.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c
index d6209521206..f93e81589a5 100644
--- a/xlators/storage/posix/src/posix-helpers.c
+++ b/xlators/storage/posix/src/posix-helpers.c
@@ -1673,7 +1673,7 @@ __posix_fd_ctx_get (fd_t *fd, xlator_t *this, struct posix_fd **pfd_p,
*/
if (fd->inode->ia_type == IA_IFREG) {
_fd = open (real_path, fd->flags);
- if (_fd == -1) {
+ if ((_fd == -1) && (errno == ENOENT)) {
POSIX_GET_FILE_UNLINK_PATH (priv->base_path,
fd->inode->gfid,
unlink_path);