summaryrefslogtreecommitdiff
path: root/source3/smbd/aio.c
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2010-06-07 16:25:18 -0700
committerJeremy Allison <jra@samba.org>2010-06-07 16:25:18 -0700
commitd70413fa0cba9338fbf2adad0db6e4b88da9ad65 (patch)
treeba9ac87e452064d4fd5156c0f694c54b03c2543b /source3/smbd/aio.c
parent5da783f4a79ee0a927f2483ae20b691074bb3007 (diff)
downloadsamba-d70413fa0cba9338fbf2adad0db6e4b88da9ad65.tar.gz
samba-d70413fa0cba9338fbf2adad0db6e4b88da9ad65.tar.bz2
samba-d70413fa0cba9338fbf2adad0db6e4b88da9ad65.zip
Move "write_though" into aio_ex struct.
Diffstat (limited to 'source3/smbd/aio.c')
-rw-r--r--source3/smbd/aio.c10
1 files changed, 5 insertions, 5 deletions
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index ab88b1283f..5354144205 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -46,6 +46,7 @@ struct aio_extra {
struct smb_request *smbreq;
DATA_BLOB outbuf;
struct lock_struct lock;
+ bool write_through;
int (*handle_completion)(struct aio_extra *ex, int errcode);
};
@@ -239,7 +240,6 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
struct aio_extra *aio_ex;
SMB_STRUCT_AIOCB *a;
size_t bufsize;
- bool write_through = BITSETW(smbreq->vwv+7,0);
size_t min_aio_write_size = lp_aio_write_size(SNUM(conn));
int ret;
@@ -262,7 +262,7 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
return NT_STATUS_RETRY;
}
- /* Only do this on non-chained and non-chaining reads not using the
+ /* Only do this on non-chained and non-chaining writes not using the
* write cache. */
if (req_is_in_chain(smbreq) || (lp_write_cache_size(SNUM(conn)) != 0)) {
return NT_STATUS_RETRY;
@@ -288,6 +288,7 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
return NT_STATUS_NO_MEMORY;
}
aio_ex->handle_completion = handle_aio_write_complete;
+ aio_ex->write_through = BITSETW(smbreq->vwv+7,0);
construct_reply_common_req(smbreq, (char *)aio_ex->outbuf.data);
srv_set_message((char *)aio_ex->outbuf.data, 6, 0, True);
@@ -331,7 +332,7 @@ NTSTATUS schedule_aio_write_and_X(connection_struct *conn,
contend_level2_oplocks_begin(fsp, LEVEL2_CONTEND_WRITE);
contend_level2_oplocks_end(fsp, LEVEL2_CONTEND_WRITE);
- if (!write_through && !lp_syncalways(SNUM(fsp->conn))
+ if (!aio_ex->write_through && !lp_syncalways(SNUM(fsp->conn))
&& fsp->aio_write_behind) {
/* Lie to the client and immediately claim we finished the
* write. */
@@ -465,7 +466,6 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex, int errcode)
ERROR_NT(map_nt_error_from_unix(errcode));
srv_set_message(outbuf,0,0,true);
} else {
- bool write_through = BITSETW(aio_ex->smbreq->vwv+7,0);
NTSTATUS status;
SSVAL(outbuf,smb_vwv2,nwritten);
@@ -477,7 +477,7 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex, int errcode)
DEBUG(3,("handle_aio_write: fnum=%d num=%d wrote=%d\n",
fsp->fnum, (int)numtowrite, (int)nwritten));
- status = sync_file(fsp->conn,fsp, write_through);
+ status = sync_file(fsp->conn,fsp, aio_ex->write_through);
if (!NT_STATUS_IS_OK(status)) {
errcode = errno;
ERROR_BOTH(map_nt_error_from_unix(errcode),