svn commit: samba r8513 - in trunk/source: include smbd

vlendec at samba.org vlendec at samba.org
Sat Jul 16 09:56:06 GMT 2005


Author: vlendec
Date: 2005-07-16 09:56:05 +0000 (Sat, 16 Jul 2005)
New Revision: 8513

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

Log:
Feed Jeremy's paranoia -- back out the last patch :-)

Thanks,

Volker

Modified:
   trunk/source/include/smb.h
   trunk/source/smbd/oplock.c


Changeset:
Modified: trunk/source/include/smb.h
===================================================================
--- trunk/source/include/smb.h	2005-07-16 09:09:19 UTC (rev 8512)
+++ trunk/source/include/smb.h	2005-07-16 09:56:05 UTC (rev 8513)
@@ -1511,6 +1511,7 @@
 /* Message types */
 #define OPLOCK_BREAK_CMD 0x1
 #define KERNEL_OPLOCK_BREAK_CMD 0x2
+#define LEVEL_II_OPLOCK_BREAK_CMD 0x3
 #define ASYNC_LEVEL_II_OPLOCK_BREAK_CMD 0x4
 
 /* Add the "deferred open" message. */

Modified: trunk/source/smbd/oplock.c
===================================================================
--- trunk/source/smbd/oplock.c	2005-07-16 09:09:19 UTC (rev 8512)
+++ trunk/source/smbd/oplock.c	2005-07-16 09:56:05 UTC (rev 8513)
@@ -381,6 +381,7 @@
 			break;
 
 		case OPLOCK_BREAK_CMD:
+		case LEVEL_II_OPLOCK_BREAK_CMD:
 		case ASYNC_LEVEL_II_OPLOCK_BREAK_CMD:
 
 			/* Ensure that the msg length is correct. */
@@ -482,7 +483,8 @@
 	 * case.
 	 */
 
-	if (break_cmd_type != OPLOCK_BREAK_CMD) {
+	if (!((break_cmd_type == OPLOCK_BREAK_CMD) ||
+	      (break_cmd_type == LEVEL_II_OPLOCK_BREAK_CMD))) {
 		return True;
 	}
 
@@ -995,6 +997,7 @@
 	SMB_DEV_T dev = share_entry->dev;
 	SMB_INO_T inode = share_entry->inode;
 	unsigned long file_id = share_entry->share_file_id;
+	uint16 break_cmd_type;
 
 	if(pid == share_entry->pid) {
 		/* We are breaking our own oplock, make sure it's us. */
@@ -1024,7 +1027,13 @@
 
 	/* We need to send a OPLOCK_BREAK_CMD message to the port in the share mode entry. */
 
-	SSVAL(op_break_msg,OPBRK_MESSAGE_CMD_OFFSET,OPLOCK_BREAK_CMD);
+	if (LEVEL_II_OPLOCK_TYPE(share_entry->op_type)) {
+		break_cmd_type = LEVEL_II_OPLOCK_BREAK_CMD;
+	} else {
+		break_cmd_type = OPLOCK_BREAK_CMD;
+	}
+
+	SSVAL(op_break_msg,OPBRK_MESSAGE_CMD_OFFSET,break_cmd_type);
 	memcpy(op_break_msg+OPLOCK_BREAK_PID_OFFSET,(char *)&pid,sizeof(pid));
 	memcpy(op_break_msg+OPLOCK_BREAK_DEV_OFFSET,(char *)&dev,sizeof(dev));
 	memcpy(op_break_msg+OPLOCK_BREAK_INODE_OFFSET,(char *)&inode,sizeof(inode));
@@ -1110,7 +1119,7 @@
 		 * Test to see if this is the reply we are awaiting (ie. the one we sent with the CMD_REPLY flag OR'ed in).
 		 */
 		if((SVAL(reply_msg_start,OPBRK_MESSAGE_CMD_OFFSET) & CMD_REPLY) &&
-			((SVAL(reply_msg_start,OPBRK_MESSAGE_CMD_OFFSET) & ~CMD_REPLY) == OPLOCK_BREAK_CMD) &&
+			((SVAL(reply_msg_start,OPBRK_MESSAGE_CMD_OFFSET) & ~CMD_REPLY) == break_cmd_type) &&
 			(reply_from_port == share_entry->op_port) && 
 			(memcmp(&reply_msg_start[OPLOCK_BREAK_PID_OFFSET], &op_break_msg[OPLOCK_BREAK_PID_OFFSET],
 				OPLOCK_BREAK_MSG_LEN - OPLOCK_BREAK_PID_OFFSET) == 0)) {



More information about the samba-cvs mailing list