vfs_cluster.c (34206) | vfs_cluster.c (34266) |
---|---|
1/*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * Modifications/enhancements: 5 * Copyright (c) 1995 John S. Dyson. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)vfs_cluster.c 8.7 (Berkeley) 2/13/94 | 1/*- 2 * Copyright (c) 1993 3 * The Regents of the University of California. All rights reserved. 4 * Modifications/enhancements: 5 * Copyright (c) 1995 John S. Dyson. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 19 unchanged lines hidden (view full) --- 28 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33 * SUCH DAMAGE. 34 * 35 * @(#)vfs_cluster.c 8.7 (Berkeley) 2/13/94 |
36 * $Id: vfs_cluster.c,v 1.55 1998/02/06 12:13:30 eivind Exp $ | 36 * $Id: vfs_cluster.c,v 1.56 1998/03/07 21:35:28 dyson Exp $ |
37 */ 38 39#include "opt_debug_cluster.h" 40 41#include <sys/param.h> 42#include <sys/systm.h> 43#include <sys/proc.h> 44#include <sys/buf.h> --- 349 unchanged lines hidden (view full) --- 394 tbp->b_flags |= B_READ | B_ASYNC; 395 if (tbp->b_blkno == tbp->b_lblkno) { 396 tbp->b_blkno = bn; 397 } else if (tbp->b_blkno != bn) { 398 brelse(tbp); 399 break; 400 } 401 } | 37 */ 38 39#include "opt_debug_cluster.h" 40 41#include <sys/param.h> 42#include <sys/systm.h> 43#include <sys/proc.h> 44#include <sys/buf.h> --- 349 unchanged lines hidden (view full) --- 394 tbp->b_flags |= B_READ | B_ASYNC; 395 if (tbp->b_blkno == tbp->b_lblkno) { 396 tbp->b_blkno = bn; 397 } else if (tbp->b_blkno != bn) { 398 brelse(tbp); 399 break; 400 } 401 } |
402 /* check for latent dependencies to be handled */ 403 if ((LIST_FIRST(&tbp->b_dep)) != NULL && bioops.io_start) 404 (*bioops.io_start)(tbp); |
|
402 TAILQ_INSERT_TAIL(&bp->b_cluster.cluster_head, 403 tbp, b_cluster.cluster_entry); 404 for (j = 0; j < tbp->b_npages; j += 1) { 405 vm_page_t m; 406 m = tbp->b_pages[j]; 407 ++m->busy; 408 ++m->object->paging_in_progress; 409 if ((bp->b_npages == 0) || --- 269 unchanged lines hidden (view full) --- 679 680 bp->b_blkno = tbp->b_blkno; 681 bp->b_lblkno = tbp->b_lblkno; 682 (vm_offset_t) bp->b_data |= ((vm_offset_t) tbp->b_data) & PAGE_MASK; 683 bp->b_flags |= B_CALL | B_BUSY | B_CLUSTER | 684 (tbp->b_flags & (B_VMIO|B_NEEDCOMMIT)); 685 bp->b_iodone = cluster_callback; 686 pbgetvp(vp, bp); | 405 TAILQ_INSERT_TAIL(&bp->b_cluster.cluster_head, 406 tbp, b_cluster.cluster_entry); 407 for (j = 0; j < tbp->b_npages; j += 1) { 408 vm_page_t m; 409 m = tbp->b_pages[j]; 410 ++m->busy; 411 ++m->object->paging_in_progress; 412 if ((bp->b_npages == 0) || --- 269 unchanged lines hidden (view full) --- 682 683 bp->b_blkno = tbp->b_blkno; 684 bp->b_lblkno = tbp->b_lblkno; 685 (vm_offset_t) bp->b_data |= ((vm_offset_t) tbp->b_data) & PAGE_MASK; 686 bp->b_flags |= B_CALL | B_BUSY | B_CLUSTER | 687 (tbp->b_flags & (B_VMIO|B_NEEDCOMMIT)); 688 bp->b_iodone = cluster_callback; 689 pbgetvp(vp, bp); |
687 | |
688 for (i = 0; i < len; ++i, ++start_lbn) { 689 if (i != 0) { 690 s = splbio(); 691 if ((tbp = gbincore(vp, start_lbn)) == NULL) { 692 splx(s); 693 break; 694 } 695 --- 13 unchanged lines hidden (view full) --- 709 splx(s); 710 break; 711 } 712 bremfree(tbp); 713 tbp->b_flags |= B_BUSY; 714 tbp->b_flags &= ~B_DONE; 715 splx(s); 716 } | 690 for (i = 0; i < len; ++i, ++start_lbn) { 691 if (i != 0) { 692 s = splbio(); 693 if ((tbp = gbincore(vp, start_lbn)) == NULL) { 694 splx(s); 695 break; 696 } 697 --- 13 unchanged lines hidden (view full) --- 711 splx(s); 712 break; 713 } 714 bremfree(tbp); 715 tbp->b_flags |= B_BUSY; 716 tbp->b_flags &= ~B_DONE; 717 splx(s); 718 } |
717 | 719 /* check for latent dependencies to be handled */ 720 if ((LIST_FIRST(&tbp->b_dep)) != NULL && 721 bioops.io_start) 722 (*bioops.io_start)(tbp); |
718 if (tbp->b_flags & B_VMIO) { 719 vm_page_t m; 720 721 if (i != 0) { 722 for (j = 0; j < tbp->b_npages; j += 1) { 723 m = tbp->b_pages[j]; 724 if (m->flags & PG_BUSY) 725 goto finishcluster; --- 71 unchanged lines hidden --- | 723 if (tbp->b_flags & B_VMIO) { 724 vm_page_t m; 725 726 if (i != 0) { 727 for (j = 0; j < tbp->b_npages; j += 1) { 728 m = tbp->b_pages[j]; 729 if (m->flags & PG_BUSY) 730 goto finishcluster; --- 71 unchanged lines hidden --- |