svn commit: samba r8509 - in trunk/source/smbd: .

vlendec at samba.org vlendec at samba.org
Fri Jul 15 20:24:21 GMT 2005


Author: vlendec
Date: 2005-07-15 20:24:19 +0000 (Fri, 15 Jul 2005)
New Revision: 8509

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=8509

Log:
Simplify logic a tiny bit, don't pass a bool flag down when not necessary.

Jeremy, could you please revisit this and merge to 3_0 if it's ok?

Thanks,

Volker

Modified:
   trunk/source/smbd/oplock.c
   trunk/source/smbd/reply.c


Changeset:
Modified: trunk/source/smbd/oplock.c
===================================================================
--- trunk/source/smbd/oplock.c	2005-07-15 19:32:56 UTC (rev 8508)
+++ trunk/source/smbd/oplock.c	2005-07-15 20:24:19 UTC (rev 8509)
@@ -263,44 +263,53 @@
  to none even if a "break-to-level II" was sent.
 ****************************************************************************/
 
-BOOL remove_oplock(files_struct *fsp, BOOL break_to_none)
+BOOL remove_oplock(files_struct *fsp)
 {
 	SMB_DEV_T dev = fsp->dev;
 	SMB_INO_T inode = fsp->inode;
-	BOOL ret = True;
+	BOOL ret;
 
 	/* Remove the oplock flag from the sharemode. */
-	if (lock_share_entry_fsp(fsp) == False) {
-		DEBUG(0,("remove_oplock: failed to lock share entry for file %s\n",
-			 fsp->fsp_name ));
+	if (!lock_share_entry_fsp(fsp)) {
+		DEBUG(0,("remove_oplock: failed to lock share entry for "
+			 "file %s\n", fsp->fsp_name ));
 		return False;
 	}
+	ret = remove_share_oplock(fsp);
+	if (!ret) {
+		DEBUG(0,("remove_oplock: failed to remove share oplock for "
+			 "file %s fnum %d, dev = %x, inode = %.0f\n",
+			 fsp->fsp_name, fsp->fnum, (unsigned int)dev,
+			 (double)inode));
+	}
+	release_file_oplock(fsp);
+	unlock_share_entry_fsp(fsp);
+	return ret;
+}
 
-	if (fsp->sent_oplock_break == BREAK_TO_NONE_SENT || break_to_none) {
-		/*
-		 * Deal with a reply when a break-to-none was sent.
-		 */
+/*
+ * Deal with a reply when a break-to-level II was sent.
+ */
+BOOL downgrade_oplock(files_struct *fsp)
+{
+	SMB_DEV_T dev = fsp->dev;
+	SMB_INO_T inode = fsp->inode;
+	BOOL ret;
 
-		if(remove_share_oplock(fsp)==False) {
-			DEBUG(0,("remove_oplock: failed to remove share oplock for file %s fnum %d, \
-dev = %x, inode = %.0f\n", fsp->fsp_name, fsp->fnum, (unsigned int)dev, (double)inode));
-			ret = False;
-		}
-
-		release_file_oplock(fsp);
-	} else {
-		/*
-		 * Deal with a reply when a break-to-level II was sent.
-		 */
-		if(downgrade_share_oplock(fsp)==False) {
-			DEBUG(0,("remove_oplock: failed to downgrade share oplock for file %s fnum %d, \
-dev = %x, inode = %.0f\n", fsp->fsp_name, fsp->fnum, (unsigned int)dev, (double)inode));
-			ret = False;
-		}
+	if (!lock_share_entry_fsp(fsp)) {
+		DEBUG(0,("downgrade_oplock: failed to lock share entry for "
+			 "file %s\n", fsp->fsp_name ));
+		return False;
+	}
+	ret = downgrade_share_oplock(fsp);
+	if (!ret) {
+		DEBUG(0,("downgrade_oplock: failed to downgrade share oplock "
+			 "for file %s fnum %d, dev = %x, inode = %.0f\n",
+			 fsp->fsp_name, fsp->fnum, (unsigned int)dev,
+			 (double)inode));
+	}
 		
-		downgrade_file_oplock(fsp);
-	}
-
+	downgrade_file_oplock(fsp);
 	unlock_share_entry_fsp(fsp);
 	return ret;
 }
@@ -937,7 +946,7 @@
 	if(oplock_timeout && (fsp = initial_break_processing(dev, inode, file_id)) &&
 			OPEN_FSP(fsp) && EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type)) {
 		DEBUG(0,("oplock_break: client failure in oplock break in file %s\n", fsp->fsp_name));
-		remove_oplock(fsp,True);
+		remove_oplock(fsp);
 #if FASCIST_OPLOCK_BACKOFF
 		global_client_failed_oplock_break = True; /* Never grant this client an oplock again. */
 #endif

Modified: trunk/source/smbd/reply.c
===================================================================
--- trunk/source/smbd/reply.c	2005-07-15 19:32:56 UTC (rev 8508)
+++ trunk/source/smbd/reply.c	2005-07-15 20:24:19 UTC (rev 8509)
@@ -5086,6 +5086,7 @@
 	if ((locktype & LOCKING_ANDX_OPLOCK_RELEASE)) {
 		/* Client can insist on breaking to none. */
 		BOOL break_to_none = (oplocklevel == 0);
+		BOOL result;
 		
 		DEBUG(5,("reply_lockingX: oplock break reply (%u) from client for fnum = %d\n",
 			 (unsigned int)oplocklevel, fsp->fnum ));
@@ -5108,11 +5109,20 @@
 			}
 		}
 
-		if (remove_oplock(fsp, break_to_none) == False) {
-			DEBUG(0,("reply_lockingX: error in removing oplock on file %s\n",
-				 fsp->fsp_name ));
+		if ((fsp->sent_oplock_break == BREAK_TO_NONE_SENT) ||
+		    (break_to_none)) {
+			result = remove_oplock(fsp);
+		} else {
+			result = downgrade_oplock(fsp);
 		}
 		
+		if (!result) {
+			DEBUG(0, ("reply_lockingX: error in removing "
+				  "oplock on file %s\n", fsp->fsp_name));
+			/* Hmmm. Is this panic justified? */
+			smb_panic("internal tdb error");
+		}
+
 		/* if this is a pure oplock break request then don't send a reply */
 		if (num_locks == 0 && num_ulocks == 0) {
 			/* Sanity check - ensure a pure oplock break is not a



More information about the samba-cvs mailing list