Author: jra
Date: 2006-07-08 20:49:00 +0000 (Sat, 08 Jul 2006)
New Revision: 16884

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

Log:
Do the lock merging more agressively for CIFS POSIX
locks. There were cases where we weren't merging
together two adjacent locks of the same type. This
should reduce the number of locks records in this
case.
Jeremy.

Modified:
   trunk/source/locking/brlock.c


Changeset:
Modified: trunk/source/locking/brlock.c
===================================================================
--- trunk/source/locking/brlock.c       2006-07-08 20:16:35 UTC (rev 16883)
+++ trunk/source/locking/brlock.c       2006-07-08 20:49:00 UTC (rev 16884)
@@ -391,27 +391,27 @@
                                              +---------+
                                              | ex      |
                                              +---------+
-                                +-------+
-                                | plock |
-                                +-------+
+                              +-------+
+                              | plock |
+                              +-------+
 OR....
              +---------+
              |  ex     |
              +---------+
 **********************************************/
 
-       if ( (ex->start >= (plock->start + plock->size)) ||
-                       (plock->start >= (ex->start + ex->size))) {
+       if ( (ex->start > (plock->start + plock->size)) ||
+                       (plock->start > (ex->start + ex->size))) {
                /* No overlap with this lock - copy existing. */
                memcpy(&lck_arr[0], ex, sizeof(struct lock_struct));
                return 1;
        }
 
 /*********************************************
-                +---------+
-                |  ex     |
-                +---------+
         +---------------------------+
+        |          ex               |
+        +---------------------------+
+        +---------------------------+
         |       plock               | -> replace with plock.
         +---------------------------+
 **********************************************/
@@ -424,24 +424,32 @@
        }
 
 /*********************************************
-                +---------------+
-                |  ex           |
-                +---------------+
+        +-----------------------+
+        |          ex           |
+        +-----------------------+
         +---------------+
         |   plock       |
         +---------------+
+OR....
+                        +-------+
+                        |  ex   |
+                        +-------+
+        +---------------+
+        |   plock       |
+        +---------------+
+
 BECOMES....
         +---------------+-------+
         |   plock       | ex    | - different lock types.
         +---------------+-------+
-OR....
+OR.... (merge)
         +-----------------------+
         |   ex                  | - same lock type.
         +-----------------------+
 **********************************************/
 
        if ( (ex->start >= plock->start) &&
-                               (ex->start < plock->start + plock->size) &&
+                               (ex->start <= plock->start + plock->size) &&
                                (ex->start + ex->size > plock->start + 
plock->size) ) {
 
                *lock_was_added = True;
@@ -468,18 +476,25 @@
        }
 
 /*********************************************
-   +---------------+
-   |  ex           |
-   +---------------+
+   +-----------------------+
+   |  ex                   |
+   +-----------------------+
            +---------------+
            |   plock       |
            +---------------+
+OR....
+   +-------+        
+   |  ex   |
+   +-------+
+           +---------------+
+           |   plock       |
+           +---------------+
 BECOMES....
    +-------+---------------+
    | ex    |   plock       | - different lock types
    +-------+---------------+
 
-OR
+OR.... (merge)
    +-----------------------+
    | ex                    | - same lock type.
    +-----------------------+
@@ -487,7 +502,7 @@
 **********************************************/
 
        if ( (ex->start < plock->start) &&
-                       (ex->start + ex->size > plock->start) &&
+                       (ex->start + ex->size >= plock->start) &&
                        (ex->start + ex->size <= plock->start + plock->size) ) {
 
                *lock_was_added = True;

Reply via email to