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;
