[SCM] Samba Shared Repository - branch master updated
Günther Deschner
gd at samba.org
Wed Aug 7 14:21:01 UTC 2024
The branch, master has been updated
via aa043a5808b vfs_ceph_new: handle errno properly for 'readdir'
via a7f4e2bd47c vfs_ceph{_new}: do not set errno upon successful call to libcephfs
from c0d0767a3ab script/autobuild.py: do some basic testing using --without-winbind
https://git.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit aa043a5808b73fc272de585c1446372fa3f21d08
Author: Shachar Sharon <ssharon at redhat.com>
Date: Tue Jul 30 17:36:09 2024 +0300
vfs_ceph_new: handle errno properly for 'readdir'
Take special care for readdir errno setting: in case of error, update
errno by libcephfs (and protect from possible over-write by debug
logging); in the case of successful result or end-of-stream restore
errno to its previous value before calling the readdir_fn VFS hook.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15686
Signed-off-by: Shachar Sharon <ssharon at redhat.com>
Reviewed-by: Guenther Deschner <gd at samba.org>
Reviewed-by: Anoop C S <anoopcs at samba.org>
Autobuild-User(master): Günther Deschner <gd at samba.org>
Autobuild-Date(master): Wed Aug 7 14:20:02 UTC 2024 on atb-devel-224
commit a7f4e2bd47c7f4728f3ac8d90af693156a69c557
Author: Shachar Sharon <ssharon at redhat.com>
Date: Tue Jul 30 09:55:44 2024 +0300
vfs_ceph{_new}: do not set errno upon successful call to libcephfs
There is code in Samba that expects errno from a previous system call
to be preserved through a subsequent system call. Thus, avoid setting
"errno = 0" in status_code() and lstatus_code() upon successful return
from libcephfs API call.
BUG: https://bugzilla.samba.org/show_bug.cgi?id=15686
Signed-off-by: Shachar Sharon <ssharon at redhat.com>
Reviewed-by: Guenther Deschner <gd at samba.org>
Reviewed-by: Anoop C S <anoopcs at samba.org>
-----------------------------------------------------------------------
Summary of changes:
source3/modules/vfs_ceph.c | 2 --
source3/modules/vfs_ceph_new.c | 15 +++++++--------
2 files changed, 7 insertions(+), 10 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/modules/vfs_ceph.c b/source3/modules/vfs_ceph.c
index 1dd136e569b..fd450af16c2 100644
--- a/source3/modules/vfs_ceph.c
+++ b/source3/modules/vfs_ceph.c
@@ -66,7 +66,6 @@ static inline int status_code(int ret)
errno = -ret;
return -1;
}
- errno = 0;
return ret;
}
@@ -76,7 +75,6 @@ static inline ssize_t lstatus_code(intmax_t ret)
errno = -((int)ret);
return -1;
}
- errno = 0;
return (ssize_t)ret;
}
diff --git a/source3/modules/vfs_ceph_new.c b/source3/modules/vfs_ceph_new.c
index 99d4a1fe407..cf7e6b121db 100644
--- a/source3/modules/vfs_ceph_new.c
+++ b/source3/modules/vfs_ceph_new.c
@@ -66,7 +66,6 @@ static int status_code(int ret)
errno = -ret;
return -1;
}
- errno = 0;
return ret;
}
@@ -76,7 +75,6 @@ static ssize_t lstatus_code(intmax_t ret)
errno = -((int)ret);
return -1;
}
- errno = 0;
return (ssize_t)ret;
}
@@ -1484,19 +1482,20 @@ static struct dirent *vfs_ceph_readdir(struct vfs_handle_struct *handle,
{
const struct vfs_ceph_fh *dircfh = (const struct vfs_ceph_fh *)dirp;
struct dirent *result = NULL;
- int errval = 0;
+ int saved_errno = errno;
DBG_DEBUG("[CEPH] readdir(%p, %p)\n", handle, dirp);
+
errno = 0;
result = vfs_ceph_ll_readdir(handle, dircfh);
- errval = errno;
- if ((result == NULL) && (errval != 0)) {
- DBG_DEBUG("[CEPH] readdir(...) = %d\n", errval);
+ if ((result == NULL) && (errno != 0)) {
+ saved_errno = errno;
+ DBG_DEBUG("[CEPH] readdir(...) = %d\n", errno);
} else {
DBG_DEBUG("[CEPH] readdir(...) = %p\n", result);
}
- /* re-assign errno to avoid possible over-write by DBG_DEBUG */
- errno = errval;
+
+ errno = saved_errno;
return result;
}
--
Samba Shared Repository
More information about the samba-cvs
mailing list