geom_ccd.c (21144e3bf1f416a758f6546bfabfa8e4e8cba507) geom_ccd.c (b99c307a21423935df9af6a532033f28b62e2966)
1/* $FreeBSD$ */
2
3/* $NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $ */
4
5/*
6 * Copyright (c) 1995 Jason R. Thorpe.
7 * All rights reserved.
8 *

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

885 * We attempt to localize reads to the disk whos arm
886 * is nearest the read request. We ignore seeks due
887 * to writes when making this determination and we
888 * also try to avoid hogging.
889 */
890 if (cbp[0]->cb_buf.b_iocmd == BIO_WRITE) {
891 cbp[0]->cb_buf.b_vp->v_numoutput++;
892 cbp[1]->cb_buf.b_vp->v_numoutput++;
1/* $FreeBSD$ */
2
3/* $NetBSD: ccd.c,v 1.22 1995/12/08 19:13:26 thorpej Exp $ */
4
5/*
6 * Copyright (c) 1995 Jason R. Thorpe.
7 * All rights reserved.
8 *

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

885 * We attempt to localize reads to the disk whos arm
886 * is nearest the read request. We ignore seeks due
887 * to writes when making this determination and we
888 * also try to avoid hogging.
889 */
890 if (cbp[0]->cb_buf.b_iocmd == BIO_WRITE) {
891 cbp[0]->cb_buf.b_vp->v_numoutput++;
892 cbp[1]->cb_buf.b_vp->v_numoutput++;
893 VOP_STRATEGY(cbp[0]->cb_buf.b_vp,
894 &cbp[0]->cb_buf);
895 VOP_STRATEGY(cbp[1]->cb_buf.b_vp,
896 &cbp[1]->cb_buf);
893 BUF_STRATEGY(&cbp[0]->cb_buf);
894 BUF_STRATEGY(&cbp[1]->cb_buf);
897 } else {
898 int pick = cs->sc_pick;
899 daddr_t range = cs->sc_size / 16;
900
901 if (bn < cs->sc_blk[pick] - range ||
902 bn > cs->sc_blk[pick] + range
903 ) {
904 cs->sc_pick = pick = 1 - pick;
905 }
906 cs->sc_blk[pick] = bn + btodb(rcount);
895 } else {
896 int pick = cs->sc_pick;
897 daddr_t range = cs->sc_size / 16;
898
899 if (bn < cs->sc_blk[pick] - range ||
900 bn > cs->sc_blk[pick] + range
901 ) {
902 cs->sc_pick = pick = 1 - pick;
903 }
904 cs->sc_blk[pick] = bn + btodb(rcount);
907 VOP_STRATEGY(cbp[pick]->cb_buf.b_vp,
908 &cbp[pick]->cb_buf);
905 BUF_STRATEGY(&cbp[pick]->cb_buf);
909 }
910 } else {
911 /*
912 * Not mirroring
913 */
914 if (cbp[0]->cb_buf.b_iocmd == BIO_WRITE)
915 cbp[0]->cb_buf.b_vp->v_numoutput++;
906 }
907 } else {
908 /*
909 * Not mirroring
910 */
911 if (cbp[0]->cb_buf.b_iocmd == BIO_WRITE)
912 cbp[0]->cb_buf.b_vp->v_numoutput++;
916 VOP_STRATEGY(cbp[0]->cb_buf.b_vp, &cbp[0]->cb_buf);
913 BUF_STRATEGY(&cbp[0]->cb_buf);
917 }
918 bn += btodb(rcount);
919 addr += rcount;
920 }
921}
922
923/*
924 * Build a component buffer header.

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

1205 * When reading, either dispose of the second buffer
1206 * or initiate I/O on the second buffer if an error
1207 * occured with this one.
1208 */
1209 if ((cbp->cb_pflags & CCDPF_MIRROR_DONE) == 0) {
1210 if (cbp->cb_buf.b_flags & B_ERROR) {
1211 cbp->cb_mirror->cb_pflags |=
1212 CCDPF_MIRROR_DONE;
914 }
915 bn += btodb(rcount);
916 addr += rcount;
917 }
918}
919
920/*
921 * Build a component buffer header.

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

1202 * When reading, either dispose of the second buffer
1203 * or initiate I/O on the second buffer if an error
1204 * occured with this one.
1205 */
1206 if ((cbp->cb_pflags & CCDPF_MIRROR_DONE) == 0) {
1207 if (cbp->cb_buf.b_flags & B_ERROR) {
1208 cbp->cb_mirror->cb_pflags |=
1209 CCDPF_MIRROR_DONE;
1213 VOP_STRATEGY(
1214 cbp->cb_mirror->cb_buf.b_vp,
1215 &cbp->cb_mirror->cb_buf
1216 );
1210 BUF_STRATEGY(&cbp->cb_mirror->cb_buf);
1217 putccdbuf(cbp);
1218 splx(s);
1219 return;
1220 } else {
1221 putccdbuf(cbp->cb_mirror);
1222 /* fall through */
1223 }
1224 }

--- 508 unchanged lines hidden ---
1211 putccdbuf(cbp);
1212 splx(s);
1213 return;
1214 } else {
1215 putccdbuf(cbp->cb_mirror);
1216 /* fall through */
1217 }
1218 }

--- 508 unchanged lines hidden ---