Deleted Added
full compact
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 ---