From 26d16b90ec7f8acbe07e56e8fe1baf9c9fa1519e Mon Sep 17 00:00:00 2001 From: Raghavendra G Date: Wed, 23 Mar 2016 13:47:27 +0530 Subject: mount/fuse: report ESTALE as ENOENT When the inode/gfid is missing, brick report back as an ESTALE error. However, most of the applications don't accept ESTALE as an error for a file-system object missing, changing their behaviour. For eg., rm -rf ignores ENOENT errors during unlink of files/directories. But with ESTALE error it doesn't send rmdir on a directory if unlink had failed with ESTALE for any of the files or directories within it. Thanks to Ravishankar N , here is a link as to why we split up ENOENT into ESTALE and ENOENT. http://review.gluster.org/#/c/6318/ Change-Id: I467df0fdf22734a8ef20c79ac52606410fad04d1 BUG: 1245065 Signed-off-by: Raghavendra G Reviewed-on: http://review.gluster.org/13816 Smoke: Gluster Build System Reviewed-by: Jeff Darcy Reviewed-by: N Balachandran Reviewed-by: Niels de Vos Tested-by: N Balachandran CentOS-regression: Gluster Build System NetBSD-regression: NetBSD Build System --- xlators/mount/fuse/src/fuse-bridge.c | 3 +++ 1 file changed, 3 insertions(+) (limited to 'xlators/mount') diff --git a/xlators/mount/fuse/src/fuse-bridge.c b/xlators/mount/fuse/src/fuse-bridge.c index aca1b3d14fd..ee93aa3291f 100644 --- a/xlators/mount/fuse/src/fuse-bridge.c +++ b/xlators/mount/fuse/src/fuse-bridge.c @@ -349,6 +349,9 @@ send_fuse_err (xlator_t *this, fuse_in_header_t *finh, int error) struct iovec iov_out; inode_t *inode = NULL; + if (error == ESTALE) + error = ENOENT; + fouh.error = -error; iov_out.iov_base = &fouh; -- cgit