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