vfs_btrfs: don't keep state->subreq in btrfs_offload_write_send/recv()
authorStefan Metzmacher <metze@samba.org>
Wed, 23 May 2018 10:40:21 +0000 (12:40 +0200)
committerStefan Metzmacher <metze@samba.org>
Mon, 18 Jun 2018 06:59:18 +0000 (08:59 +0200)
This can be a local variable as used in most of our tevent_req based
code.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/modules/vfs_btrfs.c

index cc082f7fbbf324df22ef39e0a3c14df99c1cc160..515859d6b90a66d61e1b97905283e7eca2ce6d0d 100644 (file)
@@ -199,7 +199,6 @@ static NTSTATUS btrfs_offload_read_recv(struct tevent_req *req,
 struct btrfs_offload_write_state {
        struct vfs_handle_struct *handle;
        off_t copied;
-       struct tevent_req *subreq;      /* non-null if passed to next VFS fn */
 };
 static void btrfs_offload_write_done(struct tevent_req *subreq);
 
@@ -215,6 +214,7 @@ static struct tevent_req *btrfs_offload_write_send(struct vfs_handle_struct *han
 {
        struct tevent_req *req = NULL;
        struct btrfs_offload_write_state *state = NULL;
+       struct tevent_req *subreq = NULL;
        struct btrfs_ioctl_clone_range_args cr_args;
        struct lock_struct src_lck;
        struct lock_struct dest_lck;
@@ -264,19 +264,19 @@ static struct tevent_req *btrfs_offload_write_send(struct vfs_handle_struct *han
        }
 
        if (!handle_offload_write) {
-               state->subreq = SMB_VFS_NEXT_OFFLOAD_WRITE_SEND(handle,
-                                                               state,
-                                                               ev,
-                                                               fsctl,
-                                                               token,
-                                                               transfer_offset,
-                                                               dest_fsp,
-                                                               dest_off,
-                                                               num);
-               if (tevent_req_nomem(state->subreq, req)) {
+               subreq = SMB_VFS_NEXT_OFFLOAD_WRITE_SEND(handle,
+                                                        state,
+                                                        ev,
+                                                        fsctl,
+                                                        token,
+                                                        transfer_offset,
+                                                        dest_fsp,
+                                                        dest_off,
+                                                        num);
+               if (tevent_req_nomem(subreq, req)) {
                        return tevent_req_post(req, ev);
                }
-               tevent_req_set_callback(state->subreq,
+               tevent_req_set_callback(subreq,
                                        btrfs_offload_write_done,
                                        req);
                return req;
@@ -345,20 +345,20 @@ static struct tevent_req *btrfs_offload_write_send(struct vfs_handle_struct *han
                          (unsigned long long)cr_args.src_offset,
                          dest_fsp->fh->fd,
                          (unsigned long long)cr_args.dest_offset));
-               state->subreq = SMB_VFS_NEXT_OFFLOAD_WRITE_SEND(handle,
-                                                               state,
-                                                               ev,
-                                                               fsctl,
-                                                               token,
-                                                               transfer_offset,
-                                                               dest_fsp,
-                                                               dest_off,
-                                                               num);
-               if (tevent_req_nomem(state->subreq, req)) {
+               subreq = SMB_VFS_NEXT_OFFLOAD_WRITE_SEND(handle,
+                                                        state,
+                                                        ev,
+                                                        fsctl,
+                                                        token,
+                                                        transfer_offset,
+                                                        dest_fsp,
+                                                        dest_off,
+                                                        num);
+               if (tevent_req_nomem(subreq, req)) {
                        return tevent_req_post(req, ev);
                }
                /* wait for subreq completion */
-               tevent_req_set_callback(state->subreq,
+               tevent_req_set_callback(subreq,
                                        btrfs_offload_write_done,
                                        req);
                return req;
@@ -383,8 +383,9 @@ static void btrfs_offload_write_done(struct tevent_req *subreq)
        NTSTATUS status;
 
        status = SMB_VFS_NEXT_OFFLOAD_WRITE_RECV(state->handle,
-                                                state->subreq,
+                                                subreq,
                                                 &state->copied);
+       TALLOC_FREE(subreq);
        if (tevent_req_nterror(req, status)) {
                return;
        }