[SCM] Samba Shared Repository - branch master updated
Jeremy Allison
jra at samba.org
Tue Oct 13 14:29:49 MDT 2009
The branch, master has been updated
via 3f5c077... Remove use of "int ret" when we already have errcode. Jeremy.
via df22f8d... Catch one more erroneous use of errno. Jeremy.
via 367cb71... correctly handle aio_error() and errno
from 94d5417... s3:torture: Add a notify-bench test
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master
- Log -----------------------------------------------------------------
commit 3f5c077f2d175d21bb2699d2e21e59f3c3cac939
Author: Jeremy Allison <jra at samba.org>
Date: Tue Oct 13 13:28:57 2009 -0700
Remove use of "int ret" when we already have errcode.
Jeremy.
commit df22f8dbd91699713ac99fcab391093bc6c77651
Author: Jeremy Allison <jra at samba.org>
Date: Tue Oct 13 13:03:39 2009 -0700
Catch one more erroneous use of errno.
Jeremy.
commit 367cb714a3aa7ba18bb44e246662bb567cea5754
Author: Olaf Flebbe <o.flebbe at science-computing.de>
Date: Tue Oct 13 15:48:19 2009 +0200
correctly handle aio_error() and errno
-----------------------------------------------------------------------
Summary of changes:
source3/smbd/aio.c | 66 ++++++++++++++++++++++------------------------------
1 files changed, 28 insertions(+), 38 deletions(-)
Changeset truncated at 500 lines:
diff --git a/source3/smbd/aio.c b/source3/smbd/aio.c
index 491dd79..751fed1 100644
--- a/source3/smbd/aio.c
+++ b/source3/smbd/aio.c
@@ -45,11 +45,11 @@ struct aio_extra {
files_struct *fsp;
struct smb_request *req;
char *outbuf;
- int (*handle_completion)(struct aio_extra *ex);
+ int (*handle_completion)(struct aio_extra *ex, int errcode);
};
-static int handle_aio_read_complete(struct aio_extra *aio_ex);
-static int handle_aio_write_complete(struct aio_extra *aio_ex);
+static int handle_aio_read_complete(struct aio_extra *aio_ex, int errcode);
+static int handle_aio_write_complete(struct aio_extra *aio_ex, int errcode);
static int aio_extra_destructor(struct aio_extra *aio_ex)
{
@@ -319,9 +319,8 @@ bool schedule_aio_write_and_X(connection_struct *conn,
Returns errno or zero if all ok.
*****************************************************************************/
-static int handle_aio_read_complete(struct aio_extra *aio_ex)
+static int handle_aio_read_complete(struct aio_extra *aio_ex, int errcode)
{
- int ret = 0;
int outsize;
char *outbuf = aio_ex->outbuf;
char *data = smb_buf(outbuf);
@@ -333,18 +332,11 @@ static int handle_aio_read_complete(struct aio_extra *aio_ex)
will return an error. Hopefully this is
true.... JRA. */
- /* If errno is ECANCELED then don't return anything to the
- * client. */
- if (errno == ECANCELED) {
- return 0;
- }
-
- DEBUG( 3,( "handle_aio_read_complete: file %s nread == -1. "
+ DEBUG( 3,( "handle_aio_read_complete: file %s nread == %d. "
"Error = %s\n",
- fsp_str_dbg(aio_ex->fsp), strerror(errno)));
+ fsp_str_dbg(aio_ex->fsp), (int)nread, strerror(errcode)));
- ret = errno;
- ERROR_NT(map_nt_error_from_unix(ret));
+ ERROR_NT(map_nt_error_from_unix(errcode));
outsize = srv_set_message(outbuf,0,0,true);
} else {
outsize = srv_set_message(outbuf,12,nread,False);
@@ -377,17 +369,16 @@ static int handle_aio_read_complete(struct aio_extra *aio_ex)
fsp_str_dbg(aio_ex->fsp), (double)aio_ex->acb.aio_offset,
(unsigned int)nread ));
- return ret;
+ return errcode;
}
/****************************************************************************
Complete the write and return the data or error back to the client.
- Returns errno or zero if all ok.
+ Returns error code or zero if all ok.
*****************************************************************************/
-static int handle_aio_write_complete(struct aio_extra *aio_ex)
+static int handle_aio_write_complete(struct aio_extra *aio_ex, int errcode)
{
- int ret = 0;
files_struct *fsp = aio_ex->fsp;
char *outbuf = aio_ex->outbuf;
ssize_t numtowrite = aio_ex->acb.aio_nbytes;
@@ -399,8 +390,7 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
DEBUG(5,("handle_aio_write_complete: "
"aio_write_behind failed ! File %s "
"is corrupt ! Error %s\n",
- fsp_str_dbg(fsp), strerror(errno)));
- ret = errno;
+ fsp_str_dbg(fsp), strerror(errcode)));
} else {
DEBUG(0,("handle_aio_write_complete: "
"aio_write_behind failed ! File %s "
@@ -408,13 +398,14 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
"only wrote %d\n", fsp_str_dbg(fsp),
(unsigned int)numtowrite,
(int)nwritten ));
- ret = EIO;
+ errcode = EIO;
}
} else {
DEBUG(10,("handle_aio_write_complete: "
"aio_write_behind completed for file %s\n",
fsp_str_dbg(fsp)));
}
+ /* TODO: should no return 0 in case of an error !!! */
return 0;
}
@@ -425,16 +416,9 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
DEBUG( 3,( "handle_aio_write: file %s wanted %u bytes. "
"nwritten == %d. Error = %s\n",
fsp_str_dbg(fsp), (unsigned int)numtowrite,
- (int)nwritten, strerror(errno) ));
+ (int)nwritten, strerror(errcode) ));
- /* If errno is ECANCELED then don't return anything to the
- * client. */
- if (errno == ECANCELED) {
- return 0;
- }
-
- ret = errno;
- ERROR_BOTH(map_nt_error_from_unix(ret), ERRHRD, ERRdiskfull);
+ ERROR_NT(map_nt_error_from_unix(errcode));
srv_set_message(outbuf,0,0,true);
} else {
bool write_through = BITSETW(aio_ex->req->vwv+7,0);
@@ -451,8 +435,8 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
fsp->fnum, (int)numtowrite, (int)nwritten));
status = sync_file(fsp->conn,fsp, write_through);
if (!NT_STATUS_IS_OK(status)) {
- ret = errno;
- ERROR_BOTH(map_nt_error_from_unix(ret),
+ errcode = errno;
+ ERROR_BOTH(map_nt_error_from_unix(errcode),
ERRHRD, ERRdiskfull);
srv_set_message(outbuf,0,0,true);
DEBUG(5,("handle_aio_write: sync_file for %s returned %s\n",
@@ -475,7 +459,7 @@ static int handle_aio_write_complete(struct aio_extra *aio_ex)
fsp_str_dbg(fsp), (double)aio_ex->acb.aio_offset,
(unsigned int)numtowrite, (unsigned int)nwritten ));
- return ret;
+ return errcode;
}
/****************************************************************************
@@ -493,14 +477,21 @@ static bool handle_aio_completed(struct aio_extra *aio_ex, int *perr)
}
/* Ensure the operation has really completed. */
- if (SMB_VFS_AIO_ERROR(aio_ex->fsp, &aio_ex->acb) == EINPROGRESS) {
+ err = SMB_VFS_AIO_ERROR(aio_ex->fsp, &aio_ex->acb);
+ if (err == EINPROGRESS) {
DEBUG(10,( "handle_aio_completed: operation mid %u still in "
"process for file %s\n",
aio_ex->req->mid, fsp_str_dbg(aio_ex->fsp)));
return False;
- }
+ } else if (err == ECANCELED) {
+ /* If error is ECANCELED then don't return anything to the
+ * client. */
+ DEBUG(10,( "handle_aio_completed: operation mid %u"
+ " canceled\n", aio_ex->req->mid));
+ return True;
+ }
- err = aio_ex->handle_completion(aio_ex);
+ err = aio_ex->handle_completion(aio_ex, err);
if (err) {
*perr = err; /* Only save non-zero errors. */
}
@@ -510,7 +501,6 @@ static bool handle_aio_completed(struct aio_extra *aio_ex, int *perr)
/****************************************************************************
Handle any aio completion inline.
- Returns non-zero errno if fail or zero if all ok.
*****************************************************************************/
void smbd_aio_complete_mid(unsigned int mid)
--
Samba Shared Repository
More information about the samba-cvs
mailing list