]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: VFS: vfs_glusterfs. Pass in struct vfs_gluster_fsync_state as the callback data...
authorJeremy Allison <jra@samba.org>
Fri, 28 Feb 2020 23:59:16 +0000 (15:59 -0800)
committerJeremy Allison <jra@samba.org>
Sun, 8 Mar 2020 18:07:44 +0000 (18:07 +0000)
Find the req we're finishing off by looking inside vfs_gluster_fsync_state.
In a shutdown close the caller calls talloc_free(req), so we can't
access it directly as callback data.

The next commit will NULL out the vfs_gluster_fsync_state->req pointer
when a caller calls talloc_free(req), and the request is still in
flight.

BUG: https://bugzilla.samba.org/show_bug.cgi?id=14301

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
source3/modules/vfs_glusterfs.c

index d5d402d72ab9eddd068d4769f6f05a959a3c6b4b..4706e6f918971863c520c4dfb07badfbe9bd9cd4 100644 (file)
@@ -1158,7 +1158,7 @@ static struct tevent_req *vfs_gluster_fsync_send(struct vfs_handle_struct
        if (tevent_req_nomem(subreq, req)) {
                return tevent_req_post(req, ev);
        }
-       tevent_req_set_callback(subreq, vfs_gluster_fsync_done, req);
+       tevent_req_set_callback(subreq, vfs_gluster_fsync_done, state);
 
        talloc_set_destructor(state, vfs_gluster_fsync_state_destructor);
 
@@ -1202,10 +1202,9 @@ static int vfs_gluster_fsync_state_destructor(struct vfs_gluster_fsync_state *st
 
 static void vfs_gluster_fsync_done(struct tevent_req *subreq)
 {
-       struct tevent_req *req = tevent_req_callback_data(
-               subreq, struct tevent_req);
-       struct vfs_gluster_fsync_state *state = tevent_req_data(
-               req, struct vfs_gluster_fsync_state);
+       struct vfs_gluster_fsync_state *state = tevent_req_callback_data(
+               subreq, struct vfs_gluster_fsync_state);
+       struct tevent_req *req = state->req;
        int ret;
 
        ret = pthreadpool_tevent_job_recv(subreq);