[PATCHES] for smbd durable open code
Michael Adam
obnox at samba.org
Mon Jun 3 15:34:26 MDT 2013
Anyone? :-)
On 2013-05-27 at 09:52 +0200, Michael Adam wrote:
> Hi,
>
> attached find three patches around the s3 smbd durable handle
> code. Two are only touching comments and one removes
> code duplication in the smbd_smb2_create_send() call, removing
> the code to the place where it actually belongs.
>
> Review and possibly push appreciated.
>
> Cheers - Michael
>
>
> >From 620c89f4c54ec2c128745c26bf81bd409b2b9f6b Mon Sep 17 00:00:00 2001
> From: Michael Adam <obnox at samba.org>
> Date: Wed, 22 May 2013 20:26:49 +0200
> Subject: [PATCH 1/3] s3:smbd: remove old comment about scavenger timer from
> vfs_default_durable_reconnect()
>
> scavenger functionality belongs to the smb layer (and is meanwhile
> implemented there).
>
> Signed-off-by: Michael Adam <obnox at samba.org>
> ---
> source3/smbd/durable.c | 14 --------------
> 1 file changed, 14 deletions(-)
>
> diff --git a/source3/smbd/durable.c b/source3/smbd/durable.c
> index 69ba109..9b05d48 100644
> --- a/source3/smbd/durable.c
> +++ b/source3/smbd/durable.c
> @@ -696,20 +696,6 @@ NTSTATUS vfs_default_durable_reconnect(struct connection_struct *conn,
> }
>
> /*
> - * TODO:
> - * add scavenger timer functionality
> - *
> - * For now we always allow the reconnect
> - */
> -#if 0
> - expire_time = op->global->disconnect_time;
> - expire_time += NTTIME_MAGIC(op->global->durable_timeout_msec);
> - if (expire < now) {
> - //TODO reopen and close before telling the client...
> - }
> -#endif
> -
> - /*
> * 2. proceed with opening file
> */
>
> --
> 1.7.9.5
>
>
> >From 886d1e498f66d7857733ac699b3d1f2a06a0a442 Mon Sep 17 00:00:00 2001
> From: Michael Adam <obnox at samba.org>
> Date: Wed, 22 May 2013 19:53:12 +0200
> Subject: [PATCH 2/3] s3:smbd: remove code duplication in smb2_create_send()
>
> Move the calls to smb2srv_open_recreate() from the parsing of
> the create blobs (DHNC and DH2C) to a central place in the
> open execution phase.
> This is also where it should be called: in the durable reconnect
> part, right before the call to SMB_VFS_DURABLE_RECONNECT()
>
> Signed-off-by: Michael Adam <obnox at samba.org>
> ---
> source3/smbd/smb2_create.c | 76 +++++++++++++++-----------------------------
> 1 file changed, 25 insertions(+), 51 deletions(-)
>
> diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
> index 60ba739..11b3b7f 100644
> --- a/source3/smbd/smb2_create.c
> +++ b/source3/smbd/smb2_create.c
> @@ -552,6 +552,7 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
> uint32_t durable_timeout_msec = 0;
> bool do_durable_reconnect = false;
> struct smb2_create_blob *dh2q = NULL;
> + uint64_t persistent_id = 0;
>
> exta = smb2_create_blob_find(&in_context_blobs,
> SMB2_CREATE_TAG_EXTA);
> @@ -683,41 +684,13 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
> }
>
> if (dhnc) {
> - NTTIME now = timeval_to_nttime(&smb2req->request_time);
> - uint64_t persistent_id;
> -
> persistent_id = BVAL(dhnc->data.data, 0);
>
> - status = smb2srv_open_recreate(smb2req->sconn->conn,
> - smb1req->conn->session_info,
> - persistent_id, create_guid,
> - now, &op);
> - if (!NT_STATUS_IS_OK(status)) {
> - DEBUG(3, ("smbd_smb2_create_send: "
> - "smb2srv_open_recreate v1 failed: %s\n",
> - nt_errstr(status)));
> - tevent_req_nterror(req, status);
> - return tevent_req_post(req, ev);
> - }
> -
> - DEBUG(10, ("smb2_create_send: DHNC: %s recreate the "
> - "smb2srv_open struct for a durable handle.\n",
> - op->global->durable ? "did" : "could not"));
> -
> - if (!op->global->durable) {
> - talloc_free(op);
> - tevent_req_nterror(req,
> - NT_STATUS_OBJECT_NAME_NOT_FOUND);
> - return tevent_req_post(req, ev);
> - }
> -
> do_durable_reconnect = true;
> }
>
> if (dh2c) {
> const uint8_t *p = dh2c->data.data;
> - NTTIME now = timeval_to_nttime(&smb2req->request_time);
> - uint64_t persistent_id;
> DATA_BLOB create_guid_blob;
>
> persistent_id = BVAL(p, 0);
> @@ -729,29 +702,6 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
> return tevent_req_post(req, ev);
> }
>
> - status = smb2srv_open_recreate(smb2req->sconn->conn,
> - smb1req->conn->session_info,
> - persistent_id, create_guid,
> - now, &op);
> - if (!NT_STATUS_IS_OK(status)) {
> - DEBUG(3, ("smbd_smb2_create_send: "
> - "smb2srv_open_recreate v2 failed: %s\n",
> - nt_errstr(status)));
> - tevent_req_nterror(req, status);
> - return tevent_req_post(req, ev);
> - }
> -
> - DEBUG(10, ("smb2_create_send: DH2C: %s recreate the "
> - "smb2srv_open struct for a durable handle.\n",
> - op->global->durable ? "did" : "could not"));
> -
> - if (!op->global->durable) {
> - talloc_free(op);
> - tevent_req_nterror(req,
> - NT_STATUS_OBJECT_NAME_NOT_FOUND);
> - return tevent_req_post(req, ev);
> - }
> -
> do_durable_reconnect = true;
> }
>
> @@ -813,6 +763,30 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
> */
> if (do_durable_reconnect) {
> DATA_BLOB new_cookie = data_blob_null;
> + NTTIME now = timeval_to_nttime(&smb2req->request_time);
> +
> + status = smb2srv_open_recreate(smb2req->sconn->conn,
> + smb1req->conn->session_info,
> + persistent_id, create_guid,
> + now, &op);
> + if (!NT_STATUS_IS_OK(status)) {
> + DEBUG(3, ("smbd_smb2_create_send: "
> + "smb2srv_open_recreate failed: %s\n",
> + nt_errstr(status)));
> + tevent_req_nterror(req, status);
> + return tevent_req_post(req, ev);
> + }
> +
> + DEBUG(10, ("smb2_create_send: %s to recreate the "
> + "smb2srv_open struct for a durable handle.\n",
> + op->global->durable ? "succeded" : "failed"));
> +
> + if (!op->global->durable) {
> + talloc_free(op);
> + tevent_req_nterror(req,
> + NT_STATUS_OBJECT_NAME_NOT_FOUND);
> + return tevent_req_post(req, ev);
> + }
>
> status = SMB_VFS_DURABLE_RECONNECT(smb1req->conn,
> smb1req,
> --
> 1.7.9.5
>
>
> >From 702f39ef72e9032e75cd962ac1494c21059fcf43 Mon Sep 17 00:00:00 2001
> From: Michael Adam <obnox at samba.org>
> Date: Wed, 22 May 2013 20:16:50 +0200
> Subject: [PATCH 3/3] s3:smbd: explain parameters in call to
> SMB_VFS_DURABLE_RECONNECT()
>
> Signed-off-by: Michael Adam <obnox at samba.org>
> ---
> source3/smbd/smb2_create.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/source3/smbd/smb2_create.c b/source3/smbd/smb2_create.c
> index 11b3b7f..6a43d27 100644
> --- a/source3/smbd/smb2_create.c
> +++ b/source3/smbd/smb2_create.c
> @@ -790,9 +790,10 @@ static struct tevent_req *smbd_smb2_create_send(TALLOC_CTX *mem_ctx,
>
> status = SMB_VFS_DURABLE_RECONNECT(smb1req->conn,
> smb1req,
> - op,
> + op, /* smbXsrv_open input */
> op->global->backend_cookie,
> - op, &result, &new_cookie);
> + op, /* TALLOC_CTX */
> + &result, &new_cookie);
> if (!NT_STATUS_IS_OK(status)) {
> NTSTATUS return_status;
>
> --
> 1.7.9.5
>
More information about the samba-technical
mailing list