Author: jra
Date: 2004-12-11 00:30:28 +0000 (Sat, 11 Dec 2004)
New Revision: 4143

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

Log:
Make strict locking an enum. Auto means use oplock optimization.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/locking/locking.c
   branches/SAMBA_3_0/source/param/loadparm.c
   branches/SAMBA_3_0/source/smbd/reply.c


Changeset:
Modified: branches/SAMBA_3_0/source/locking/locking.c
===================================================================
--- branches/SAMBA_3_0/source/locking/locking.c 2004-12-10 23:20:24 UTC (rev 
4142)
+++ branches/SAMBA_3_0/source/locking/locking.c 2004-12-11 00:30:28 UTC (rev 
4143)
@@ -69,24 +69,31 @@
               enum brl_type lock_type)
 {
        int snum = SNUM(conn);
+       int strict_locking = lp_strict_locking(snum);
        BOOL ret;
        
        if (count == 0)
                return(False);
 
-       if (!lp_locking(snum) || !lp_strict_locking(snum))
+       if (!lp_locking(snum) || !strict_locking)
                return(False);
 
-       if (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && (lock_type == READ_LOCK 
|| lock_type == WRITE_LOCK)) {
-               DEBUG(10,("is_locked: optimisation - exclusive oplock on file 
%s\n", fsp->fsp_name ));
-               ret = 0;
-       } else if (LEVEL_II_OPLOCK_TYPE(fsp->oplock_type) && (lock_type == 
READ_LOCK)) {
-               DEBUG(10,("is_locked: optimisation - level II oplock on file 
%s\n", fsp->fsp_name ));
-               ret = 0;
+       if (strict_locking == Auto) {
+               if  (EXCLUSIVE_OPLOCK_TYPE(fsp->oplock_type) && (lock_type == 
READ_LOCK || lock_type == WRITE_LOCK)) {
+                       DEBUG(10,("is_locked: optimisation - exclusive oplock 
on file %s\n", fsp->fsp_name ));
+                       ret = 0;
+               } else if (LEVEL_II_OPLOCK_TYPE(fsp->oplock_type) && (lock_type 
== READ_LOCK)) {
+                       DEBUG(10,("is_locked: optimisation - level II oplock on 
file %s\n", fsp->fsp_name ));
+                       ret = 0;
+               } else {
+                       ret = !brl_locktest(fsp->dev, fsp->inode, fsp->fnum,
+                                    global_smbpid, sys_getpid(), conn->cnum, 
+                                    offset, count, lock_type);
+               }
        } else {
                ret = !brl_locktest(fsp->dev, fsp->inode, fsp->fnum,
-                            global_smbpid, sys_getpid(), conn->cnum, 
-                            offset, count, lock_type);
+                               global_smbpid, sys_getpid(), conn->cnum,
+                               offset, count, lock_type);
        }
 
        DEBUG(10,("is_locked: brl start=%.0f len=%.0f %s for file %s\n",

Modified: branches/SAMBA_3_0/source/param/loadparm.c
===================================================================
--- branches/SAMBA_3_0/source/param/loadparm.c  2004-12-10 23:20:24 UTC (rev 
4142)
+++ branches/SAMBA_3_0/source/param/loadparm.c  2004-12-11 00:30:28 UTC (rev 
4143)
@@ -386,7 +386,7 @@
        BOOL bMap_archive;
        BOOL bStoreDosAttributes;
        BOOL bLocking;
-       BOOL bStrictLocking;
+       int iStrictLocking;
        BOOL bPosixLocking;
        BOOL bShareModes;
        BOOL bOpLocks;
@@ -511,7 +511,7 @@
        True,                   /* bMap_archive */
        False,                  /* bStoreDosAttributes */
        True,                   /* bLocking */
-       True,                   /* bStrictLocking */
+       True,                   /* iStrictLocking */
        True,                   /* bPosixLocking */
        True,                   /* bShareModes */
        True,                   /* bOpLocks */
@@ -1075,7 +1075,7 @@
        {"oplock break wait time", P_INTEGER, P_GLOBAL, 
&Globals.oplock_break_wait_time, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
        {"oplock contention limit", P_INTEGER, P_LOCAL, 
&sDefault.iOplockContentionLimit, NULL, NULL, FLAG_ADVANCED | FLAG_SHARE | 
FLAG_GLOBAL}, 
        {"posix locking", P_BOOL, P_LOCAL, &sDefault.bPosixLocking, NULL, NULL, 
FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
-       {"strict locking", P_BOOL, P_LOCAL, &sDefault.bStrictLocking, NULL, 
NULL, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
+       {"strict locking", P_ENUM, P_LOCAL, &sDefault.iStrictLocking, NULL, 
enum_bool_auto, FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
        {"share modes", P_BOOL, P_LOCAL,  &sDefault.bShareModes, NULL, NULL, 
FLAG_ADVANCED | FLAG_SHARE | FLAG_GLOBAL}, 
 
        {N_("Ldap Options"), P_SEP, P_SEPARATOR}, 
@@ -1858,7 +1858,7 @@
 FN_LOCAL_BOOL(lp_map_archive, bMap_archive)
 FN_LOCAL_BOOL(lp_store_dos_attributes, bStoreDosAttributes)
 FN_LOCAL_BOOL(lp_locking, bLocking)
-FN_LOCAL_BOOL(lp_strict_locking, bStrictLocking)
+FN_LOCAL_INTEGER(lp_strict_locking, iStrictLocking)
 FN_LOCAL_BOOL(lp_posix_locking, bPosixLocking)
 FN_LOCAL_BOOL(lp_share_modes, bShareModes)
 FN_LOCAL_BOOL(lp_oplocks, bOpLocks)

Modified: branches/SAMBA_3_0/source/smbd/reply.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/reply.c      2004-12-10 23:20:24 UTC (rev 
4142)
+++ branches/SAMBA_3_0/source/smbd/reply.c      2004-12-11 00:30:28 UTC (rev 
4143)
@@ -4578,7 +4578,7 @@
                /* we don't support these - and CANCEL_LOCK makes w2k
                   and XP reboot so I don't really want to be
                   compatible! (tridge) */
-               return ERROR_NT(NT_STATUS_NOT_SUPPORTED);
+               return ERROR_NT(NT_STATUS_UNSUCCESSFUL);
        }
        
        if (locktype & LOCKING_ANDX_CANCEL_LOCK) {

Reply via email to