From 87b8de75ba71b67418c91dfa1b8e0ed5bb611a15 Mon Sep 17 00:00:00 2001 From: Shachar Sharon Date: Wed, 17 Sep 2025 14:25:27 +0300 Subject: [PATCH 1/2] vfs_ceph_new: dont use ceph_ll_nonblocking_readv_writev for fsync_send Commit 4ae922413844 ("vfs_ceph_new: use libcephfs nonblocking API for async-io ops") uses ceph_ll_nonblocking_readv_writev for fsync_send. However, the actual behaviour of libcephfs when using this API with 'fsync=true' is not async-fsync, as one may assume. Instead, vfs_ceph_new should use a nonblocking fsync API[1], once it is ready. Removed the usage of ceph_ll_nonblocking_readv_writev for fsync. Bug: https://bugzilla.samba.org/show_bug.cgi?id=15919 [1] https://github.com/ceph/ceph/commit/c88a21c30d8b265adb152f631d2629d29539f7b7 Signed-off-by: Shachar Sharon Reviewed-by: Anoop C S Reviewed-by: Xavi Hernandez Reviewed-by: Guenther Deschner (cherry picked from commit 82c0988a8bc3d3e364e2d56ad8ea27e359fbc3f0) --- source3/modules/vfs_ceph_new.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/source3/modules/vfs_ceph_new.c b/source3/modules/vfs_ceph_new.c index 996edc73458..ae02841aba5 100644 --- a/source3/modules/vfs_ceph_new.c +++ b/source3/modules/vfs_ceph_new.c @@ -3019,16 +3019,6 @@ static struct tevent_req *vfs_ceph_fsync_send(struct vfs_handle_struct *handle, SMBPROFILE_BYTES_ASYNC_SET_IDLE_X(state->profile_bytes, state->profile_bytes_x); -#if HAVE_CEPH_ASYNCIO - state->req = req; - state->data = NULL; - state->len = 0; - state->off = 0; - state->fsync = true; - vfs_ceph_aio_submit(handle, req, ev); - return req; -#endif - vfs_ceph_aio_start(state); ret = vfs_ceph_ll_fsync(handle, state->cfh, false); vfs_ceph_aio_finish(state, ret); -- 2.51.0 From 55e9c1ccbe5d429e1b44ed70adb46fc94e2ffa41 Mon Sep 17 00:00:00 2001 From: Anoop C S Date: Mon, 22 Sep 2025 11:11:46 +0530 Subject: [PATCH 2/2] vfs_ceph_new: Use integer value instead of boolean MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ceph_ll_fsync() API[1] accepts the third and final argument as integer and not a boolean value. [1] https://github.com/ceph/ceph/blob/main/src/include/cephfs/libcephfs.h#L2041 BUG: https://bugzilla.samba.org/show_bug.cgi?id=15919 Signed-off-by: Anoop C S Reviewed-by: Guenther Deschner Autobuild-User(master): Günther Deschner Autobuild-Date(master): Mon Sep 22 12:24:35 UTC 2025 on atb-devel-224 (cherry picked from commit 5200c120f34c4a28fa9f4cb55b46dbb9d90eb758) --- source3/modules/vfs_ceph_new.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source3/modules/vfs_ceph_new.c b/source3/modules/vfs_ceph_new.c index ae02841aba5..3cd7cb8cb4e 100644 --- a/source3/modules/vfs_ceph_new.c +++ b/source3/modules/vfs_ceph_new.c @@ -3020,7 +3020,7 @@ static struct tevent_req *vfs_ceph_fsync_send(struct vfs_handle_struct *handle, state->profile_bytes_x); vfs_ceph_aio_start(state); - ret = vfs_ceph_ll_fsync(handle, state->cfh, false); + ret = vfs_ceph_ll_fsync(handle, state->cfh, 0); vfs_ceph_aio_finish(state, ret); if (ret != 0) { /* ceph_fsync returns -errno on error. */ -- 2.51.0