The Samba-Bugzilla – Attachment 15264 Details for
Bug 14010
Unable to create or rename file/directory inside shares configured with vfs_glusterfs_fuse module
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Updated patchset rebased on current master
gluster-get-real-filename-ENOENT-ENOATTR.patch (text/plain), 4.18 KB, created by
Michael Adam
on 2019-06-26 10:44:37 UTC
(
hide
)
Description:
Updated patchset rebased on current master
Filename:
MIME Type:
Creator:
Michael Adam
Created:
2019-06-26 10:44:37 UTC
Size:
4.18 KB
patch
obsolete
>From 9aae2d7072eb95a6789eef4c15e67df7123e016d Mon Sep 17 00:00:00 2001 >From: Michael Adam <obnox@samba.org> >Date: Thu, 20 Jun 2019 15:14:57 +0200 >Subject: [PATCH 1/2] vfs:glusterfs: treat ENOATTR as ENOENT > >The original implementation of the virtual xattr get_real_filename >in gluster was misusing the ENOENT errno as the authoritative anwer >that the file/dir that we were asking the real filename for does not >exist. But since the getxattr call is done on the parent directory, >this is a violation of the getxattr API which uses ENOENT for the >case that the file/dir that the getxattr call is done against does >not exist. > >Now after a recent regression for fuse-mount re-exports due to >gluster mapping ENOENT to ESTALE in the fuse-bridge, the gluster >implementation is changed to more correctly return ENOATTR if the >requested file does not exist. > >This patch changes the glusterfs vfs module to treat ENOATTR as ENOENT >to be fully functional again with latest gluster. > >- Without this patch, samba against a new gluster will work correctly, > but the get_real_filename optimization for a non-existing entry > is lost. > >- With this patch, Samba will not work correctly any more against > very old gluster servers: Those (correctly) returned ENOATTR > always, which Samba originally interpreted as EOPNOTSUPP, triggering > the expensive directory scan. With this patch, ENOATTR is > interpreted as ENOENT, the authoritative answer that the requested > entry does not exist, which is wrong unless it really does not exist. > >Signed-off-by: Michael Adam <obnox@samba.org> >--- > source3/modules/vfs_glusterfs.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c >index e8617215355..95f32f9d0a6 100644 >--- a/source3/modules/vfs_glusterfs.c >+++ b/source3/modules/vfs_glusterfs.c >@@ -1473,7 +1473,7 @@ static int vfs_gluster_get_real_filename(struct vfs_handle_struct *handle, > GLUSTER_NAME_MAX + 1); > if (ret == -1) { > if (errno == ENOATTR) { >- errno = EOPNOTSUPP; >+ errno = ENOENT; > } > return -1; > } >-- >2.21.0 > > >From d8574d0955f852fc07f92d2101e729af17f8311a Mon Sep 17 00:00:00 2001 >From: Michael Adam <obnox@samba.org> >Date: Thu, 20 Jun 2019 15:14:57 +0200 >Subject: [PATCH 2/2] vfs:glusterfs_fuse: treat ENOATTR as ENOENT > >The original implementation of the virtual xattr get_real_filename >in gluster was misusing the ENOENT errno as the authoritative anwer >that the file/dir that we were asking the real filename for does not >exist. But since the getxattr call is done on the parent directory, >this is a violation of the getxattr API which uses ENOENT for the >case that the file/dir that the getxattr call is done against does >not exist. > >Now after a recent regression for fuse-mount re-exports due to >gluster mapping ENOENT to ESTALE in the fuse-bridge, the gluster >implementation is changed to more correctly return ENOATTR if the >requested file does not exist. > >This patch changes the glusterfs_fuse vfs module to treat ENOATTR as >ENOENT to be fully functional again with latest gluster. > >- Without this patch, samba against a new gluster will work correctly, > but the get_real_filename optimization for a non-existing entry > is lost. > >- With this patch, Samba will not work correctly any more against > very old gluster servers: Those (correctly) returned ENOATTR > always, which Samba originally interpreted as EOPNOTSUPP, triggering > the expensive directory scan. With this patch, ENOATTR is > interpreted as ENOENT, the authoritative answer that the requested > entry does not exist, which is wrong unless it really does not exist. > >Signed-off-by: Michael Adam <obnox@samba.org> >--- > source3/modules/vfs_glusterfs_fuse.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > >diff --git a/source3/modules/vfs_glusterfs_fuse.c b/source3/modules/vfs_glusterfs_fuse.c >index d92f5e2b08b..51515aa0df4 100644 >--- a/source3/modules/vfs_glusterfs_fuse.c >+++ b/source3/modules/vfs_glusterfs_fuse.c >@@ -45,7 +45,7 @@ static int vfs_gluster_fuse_get_real_filename(struct vfs_handle_struct *handle, > ret = getxattr(path, key_buf, val_buf, GLUSTER_NAME_MAX + 1); > if (ret == -1) { > if (errno == ENOATTR) { >- errno = EOPNOTSUPP; >+ errno = ENOENT; > } > return -1; > } >-- >2.21.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Flags:
gd
:
review+
Actions:
View
Attachments on
bug 14010
:
15263
| 15264 |
15279