[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