Deleted Added
full compact
kern_lockf.c (1960) kern_lockf.c (3098)
1/*
2 * Copyright (c) 1982, 1986, 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Scooter Morris at Genentech Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)ufs_lockf.c 8.3 (Berkeley) 1/6/94
1/*
2 * Copyright (c) 1982, 1986, 1989, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Scooter Morris at Genentech Inc.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 20 unchanged lines hidden (view full) ---

29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
34 * SUCH DAMAGE.
35 *
36 * @(#)ufs_lockf.c 8.3 (Berkeley) 1/6/94
37 * $Id: ufs_lockf.c,v 1.2 1994/08/02 07:54:57 davidg Exp $
37 * $Id: kern_lockf.c,v 1.1 1994/08/08 17:30:48 davidg Exp $
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>
43#include <sys/file.h>
44#include <sys/proc.h>
45#include <sys/vnode.h>

--- 131 unchanged lines hidden (view full) ---

177 */
178 priority = PLOCK;
179 if (lock->lf_type == F_WRLCK)
180 priority += 4;
181 priority |= PCATCH;
182 /*
183 * Scan lock list for this file looking for locks that would block us.
184 */
38 */
39
40#include <sys/param.h>
41#include <sys/systm.h>
42#include <sys/kernel.h>
43#include <sys/file.h>
44#include <sys/proc.h>
45#include <sys/vnode.h>

--- 131 unchanged lines hidden (view full) ---

177 */
178 priority = PLOCK;
179 if (lock->lf_type == F_WRLCK)
180 priority += 4;
181 priority |= PCATCH;
182 /*
183 * Scan lock list for this file looking for locks that would block us.
184 */
185 while (block = lf_getblock(lock)) {
185 while ((block = lf_getblock(lock))) {
186 /*
187 * Free the structure and return if nonblocking.
188 */
189 if ((lock->lf_flags & F_WAIT) == 0) {
190 FREE(lock, M_LOCKF);
191 return (EAGAIN);
192 }
193 /*

--- 47 unchanged lines hidden (view full) ---

241 lock->lf_next = block;
242 lf_addblock(block, lock);
243#ifdef LOCKF_DEBUG
244 if (lockf_debug & 1) {
245 lf_print("lf_setlock: blocking on", block);
246 lf_printlist("lf_setlock", block);
247 }
248#endif /* LOCKF_DEBUG */
186 /*
187 * Free the structure and return if nonblocking.
188 */
189 if ((lock->lf_flags & F_WAIT) == 0) {
190 FREE(lock, M_LOCKF);
191 return (EAGAIN);
192 }
193 /*

--- 47 unchanged lines hidden (view full) ---

241 lock->lf_next = block;
242 lf_addblock(block, lock);
243#ifdef LOCKF_DEBUG
244 if (lockf_debug & 1) {
245 lf_print("lf_setlock: blocking on", block);
246 lf_printlist("lf_setlock", block);
247 }
248#endif /* LOCKF_DEBUG */
249 if (error = tsleep((caddr_t)lock, priority, lockstr, 0)) {
249 if ((error = tsleep((caddr_t)lock, priority, lockstr, 0))) {
250 /*
251 * Delete ourselves from the waiting to lock list.
252 */
253 for (block = lock->lf_next;
254 block != NOLOCKF;
255 block = block->lf_block) {
256 if (block->lf_block != lock)
257 continue;

--- 18 unchanged lines hidden (view full) ---

276 *
277 * Skip over locks owned by other processes.
278 * Handle any locks that overlap and are owned by ourselves.
279 */
280 prev = head;
281 block = *head;
282 needtolink = 1;
283 for (;;) {
250 /*
251 * Delete ourselves from the waiting to lock list.
252 */
253 for (block = lock->lf_next;
254 block != NOLOCKF;
255 block = block->lf_block) {
256 if (block->lf_block != lock)
257 continue;

--- 18 unchanged lines hidden (view full) ---

276 *
277 * Skip over locks owned by other processes.
278 * Handle any locks that overlap and are owned by ourselves.
279 */
280 prev = head;
281 block = *head;
282 needtolink = 1;
283 for (;;) {
284 if (ovcase = lf_findoverlap(block, lock, SELF, &prev, &overlap))
284 ovcase = lf_findoverlap(block, lock, SELF, &prev, &overlap);
285 if (ovcase)
285 block = overlap->lf_next;
286 /*
287 * Six cases:
288 * 0) no overlap
289 * 1) overlap == lock
290 * 2) overlap contains lock
291 * 3) lock contains overlap
292 * 4) overlap starts before lock

--- 118 unchanged lines hidden (view full) ---

411 return (0);
412#ifdef LOCKF_DEBUG
413 if (unlock->lf_type != F_UNLCK)
414 panic("lf_clearlock: bad type");
415 if (lockf_debug & 1)
416 lf_print("lf_clearlock", unlock);
417#endif /* LOCKF_DEBUG */
418 prev = head;
286 block = overlap->lf_next;
287 /*
288 * Six cases:
289 * 0) no overlap
290 * 1) overlap == lock
291 * 2) overlap contains lock
292 * 3) lock contains overlap
293 * 4) overlap starts before lock

--- 118 unchanged lines hidden (view full) ---

412 return (0);
413#ifdef LOCKF_DEBUG
414 if (unlock->lf_type != F_UNLCK)
415 panic("lf_clearlock: bad type");
416 if (lockf_debug & 1)
417 lf_print("lf_clearlock", unlock);
418#endif /* LOCKF_DEBUG */
419 prev = head;
419 while (ovcase = lf_findoverlap(lf, unlock, SELF, &prev, &overlap)) {
420 while ((ovcase = lf_findoverlap(lf, unlock, SELF, &prev, &overlap))) {
420 /*
421 * Wakeup the list of locks to be retried.
422 */
423 lf_wakelock(overlap);
424
425 switch (ovcase) {
426
427 case 1: /* overlap == lock */

--- 46 unchanged lines hidden (view full) ---

474{
475 register struct lockf *block;
476
477#ifdef LOCKF_DEBUG
478 if (lockf_debug & 1)
479 lf_print("lf_getlock", lock);
480#endif /* LOCKF_DEBUG */
481
421 /*
422 * Wakeup the list of locks to be retried.
423 */
424 lf_wakelock(overlap);
425
426 switch (ovcase) {
427
428 case 1: /* overlap == lock */

--- 46 unchanged lines hidden (view full) ---

475{
476 register struct lockf *block;
477
478#ifdef LOCKF_DEBUG
479 if (lockf_debug & 1)
480 lf_print("lf_getlock", lock);
481#endif /* LOCKF_DEBUG */
482
482 if (block = lf_getblock(lock)) {
483 if ((block = lf_getblock(lock))) {
483 fl->l_type = block->lf_type;
484 fl->l_whence = SEEK_SET;
485 fl->l_start = block->lf_start;
486 if (block->lf_end == -1)
487 fl->l_len = 0;
488 else
489 fl->l_len = block->lf_end - block->lf_start + 1;
490 if (block->lf_flags & F_POSIX)

--- 13 unchanged lines hidden (view full) ---

504struct lockf *
505lf_getblock(lock)
506 register struct lockf *lock;
507{
508 struct lockf **prev, *overlap, *lf = *(lock->lf_head);
509 int ovcase;
510
511 prev = lock->lf_head;
484 fl->l_type = block->lf_type;
485 fl->l_whence = SEEK_SET;
486 fl->l_start = block->lf_start;
487 if (block->lf_end == -1)
488 fl->l_len = 0;
489 else
490 fl->l_len = block->lf_end - block->lf_start + 1;
491 if (block->lf_flags & F_POSIX)

--- 13 unchanged lines hidden (view full) ---

505struct lockf *
506lf_getblock(lock)
507 register struct lockf *lock;
508{
509 struct lockf **prev, *overlap, *lf = *(lock->lf_head);
510 int ovcase;
511
512 prev = lock->lf_head;
512 while (ovcase = lf_findoverlap(lf, lock, OTHERS, &prev, &overlap)) {
513 while ((ovcase = lf_findoverlap(lf, lock, OTHERS, &prev, &overlap))) {
513 /*
514 * We've found an overlap, see if it blocks us
515 */
516 if ((lock->lf_type == F_WRLCK || overlap->lf_type == F_WRLCK))
517 return (overlap);
518 /*
519 * Nope, point to the next one on the list and
520 * see if it blocks us

--- 277 unchanged lines hidden ---
514 /*
515 * We've found an overlap, see if it blocks us
516 */
517 if ((lock->lf_type == F_WRLCK || overlap->lf_type == F_WRLCK))
518 return (overlap);
519 /*
520 * Nope, point to the next one on the list and
521 * see if it blocks us

--- 277 unchanged lines hidden ---