vfs_cluster.c (41529) | vfs_cluster.c (42408) |
---|---|
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.74 1998/11/17 00:31:12 mckusick Exp $ | 36 * $Id: vfs_cluster.c,v 1.75 1998/12/05 06:12:14 mckusick Exp $ |
37 */ 38 39#include "opt_debug_cluster.h" 40 41#include <sys/param.h> 42#include <sys/systm.h> 43#include <sys/kernel.h> 44#include <sys/proc.h> --- 118 unchanged lines hidden (view full) --- 163 return 0; 164 } 165 lblkno += i; 166 } 167 reqbp = bp = NULL; 168 } else { 169 off_t firstread; 170 firstread = bp->b_offset; | 37 */ 38 39#include "opt_debug_cluster.h" 40 41#include <sys/param.h> 42#include <sys/systm.h> 43#include <sys/kernel.h> 44#include <sys/proc.h> --- 118 unchanged lines hidden (view full) --- 163 return 0; 164 } 165 lblkno += i; 166 } 167 reqbp = bp = NULL; 168 } else { 169 off_t firstread; 170 firstread = bp->b_offset; |
171#ifdef DIAGNOSTIC 172 if (bp->b_offset == NOOFFSET) 173 panic("cluster_read: no buffer offset"); 174#endif | 171 KASSERT(bp->b_offset != NOOFFSET, 172 ("cluster_read: no buffer offset")); |
175 if (firstread + totread > filesize) 176 totread = filesize - firstread; 177 if (totread > size) { 178 int nblks = 0; 179 int ncontigafter; 180 while (totread > 0) { 181 nblks++; 182 totread -= size; --- 124 unchanged lines hidden (view full) --- 307 long size; 308 int run; 309 struct buf *fbp; 310{ 311 struct buf *bp, *tbp; 312 daddr_t bn; 313 int i, inc, j; 314 | 173 if (firstread + totread > filesize) 174 totread = filesize - firstread; 175 if (totread > size) { 176 int nblks = 0; 177 int ncontigafter; 178 while (totread > 0) { 179 nblks++; 180 totread -= size; --- 124 unchanged lines hidden (view full) --- 305 long size; 306 int run; 307 struct buf *fbp; 308{ 309 struct buf *bp, *tbp; 310 daddr_t bn; 311 int i, inc, j; 312 |
315#ifdef DIAGNOSTIC 316 if (size != vp->v_mount->mnt_stat.f_iosize) 317 panic("cluster_rbuild: size %ld != filesize %ld\n", 318 size, vp->v_mount->mnt_stat.f_iosize); 319#endif | 313 KASSERT(size == vp->v_mount->mnt_stat.f_iosize, 314 ("cluster_rbuild: size %ld != filesize %ld\n", 315 size, vp->v_mount->mnt_stat.f_iosize)); |
320 /* 321 * avoid a division 322 */ 323 while ((u_quad_t) size * (lbn + run) > filesize) { 324 --run; 325 } 326 327 if (fbp) { --- 17 unchanged lines hidden (view full) --- 345 346 bp->b_data = (char *)((vm_offset_t)bp->b_data | 347 ((vm_offset_t)tbp->b_data & PAGE_MASK)); 348 bp->b_flags = B_ASYNC | B_READ | B_CALL | B_BUSY | B_CLUSTER | B_VMIO; 349 bp->b_iodone = cluster_callback; 350 bp->b_blkno = blkno; 351 bp->b_lblkno = lbn; 352 bp->b_offset = tbp->b_offset; | 316 /* 317 * avoid a division 318 */ 319 while ((u_quad_t) size * (lbn + run) > filesize) { 320 --run; 321 } 322 323 if (fbp) { --- 17 unchanged lines hidden (view full) --- 341 342 bp->b_data = (char *)((vm_offset_t)bp->b_data | 343 ((vm_offset_t)tbp->b_data & PAGE_MASK)); 344 bp->b_flags = B_ASYNC | B_READ | B_CALL | B_BUSY | B_CLUSTER | B_VMIO; 345 bp->b_iodone = cluster_callback; 346 bp->b_blkno = blkno; 347 bp->b_lblkno = lbn; 348 bp->b_offset = tbp->b_offset; |
353#ifdef DIAGNOSTIC 354 if (bp->b_offset == NOOFFSET) 355 panic("cluster_rbuild: no buffer offset"); 356#endif | 349 KASSERT(bp->b_offset != NOOFFSET, 350 ("cluster_rbuild: no buffer offset")); |
357 pbgetvp(vp, bp); 358 359 TAILQ_INIT(&bp->b_cluster.cluster_head); 360 361 bp->b_bcount = 0; 362 bp->b_bufsize = 0; 363 bp->b_npages = 0; 364 --- 147 unchanged lines hidden (view full) --- 512 async = vp->v_mount->mnt_flag & MNT_ASYNC; 513 lblocksize = vp->v_mount->mnt_stat.f_iosize; 514 } else { 515 async = 0; 516 lblocksize = bp->b_bufsize; 517 } 518 lbn = bp->b_lblkno; 519 | 351 pbgetvp(vp, bp); 352 353 TAILQ_INIT(&bp->b_cluster.cluster_head); 354 355 bp->b_bcount = 0; 356 bp->b_bufsize = 0; 357 bp->b_npages = 0; 358 --- 147 unchanged lines hidden (view full) --- 506 async = vp->v_mount->mnt_flag & MNT_ASYNC; 507 lblocksize = vp->v_mount->mnt_stat.f_iosize; 508 } else { 509 async = 0; 510 lblocksize = bp->b_bufsize; 511 } 512 lbn = bp->b_lblkno; 513 |
520#ifdef DIAGNOSTIC 521 if (bp->b_offset == NOOFFSET) 522 panic("cluster_write: no buffer offset"); 523#endif | 514 KASSERT(bp->b_offset != NOOFFSET, ("cluster_write: no buffer offset")); |
524 525 /* Initialize vnode to beginning of file. */ 526 if (lbn == 0) 527 vp->v_lasta = vp->v_clen = vp->v_cstart = vp->v_lastw = 0; 528 529 if (vp->v_clen == 0 || lbn != vp->v_lastw + 1 || 530 (bp->b_blkno != vp->v_lasta + btodb(lblocksize))) { 531 maxclen = vp->v_maxio / lblocksize - 1; --- 317 unchanged lines hidden --- | 515 516 /* Initialize vnode to beginning of file. */ 517 if (lbn == 0) 518 vp->v_lasta = vp->v_clen = vp->v_cstart = vp->v_lastw = 0; 519 520 if (vp->v_clen == 0 || lbn != vp->v_lastw + 1 || 521 (bp->b_blkno != vp->v_lasta + btodb(lblocksize))) { 522 maxclen = vp->v_maxio / lblocksize - 1; --- 317 unchanged lines hidden --- |