mirror of https://github.com/FDOS/kernel.git
Fix buffer deletion problem with multi-sector writes.
git-svn-id: https://svn.code.sf.net/p/freedos/svn/kernel/trunk@611 6ac86273-5f31-0410-b378-82cca8765d1b
This commit is contained in:
parent
aebf17f959
commit
a4abd642bf
|
@ -155,7 +155,7 @@ STATIC struct buffer FAR *searchblock(ULONG blkno, COUNT dsk)
|
||||||
return bp;
|
return bp;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk)
|
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk, int mode)
|
||||||
{
|
{
|
||||||
struct buffer FAR *bp = firstbuf;
|
struct buffer FAR *bp = firstbuf;
|
||||||
|
|
||||||
|
@ -168,7 +168,10 @@ BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk)
|
||||||
bp->b_blkno <= blknohigh &&
|
bp->b_blkno <= blknohigh &&
|
||||||
(bp->b_flag & BFR_VALID) && (bp->b_unit == dsk))
|
(bp->b_flag & BFR_VALID) && (bp->b_unit == dsk))
|
||||||
{
|
{
|
||||||
flush1(bp);
|
if (mode == XFR_READ)
|
||||||
|
flush1(bp);
|
||||||
|
else
|
||||||
|
bp->b_flag = 0;
|
||||||
}
|
}
|
||||||
bp = b_next(bp);
|
bp = b_next(bp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1706,7 +1706,7 @@ UCOUNT rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
|
||||||
|
|
||||||
DeleteBlockInBufferCache(currentblock,
|
DeleteBlockInBufferCache(currentblock,
|
||||||
currentblock + sectors_to_xfer - 1,
|
currentblock + sectors_to_xfer - 1,
|
||||||
fnp->f_dpb->dpb_unit);
|
fnp->f_dpb->dpb_unit, mode);
|
||||||
|
|
||||||
if (dskxfer(fnp->f_dpb->dpb_unit,
|
if (dskxfer(fnp->f_dpb->dpb_unit,
|
||||||
currentblock,
|
currentblock,
|
||||||
|
|
|
@ -41,7 +41,7 @@ VOID setinvld(REG COUNT dsk);
|
||||||
BOOL flush_buffers(REG COUNT dsk);
|
BOOL flush_buffers(REG COUNT dsk);
|
||||||
BOOL flush(void);
|
BOOL flush(void);
|
||||||
BOOL fill(REG struct buffer FAR * bp, ULONG blkno, COUNT dsk);
|
BOOL fill(REG struct buffer FAR * bp, ULONG blkno, COUNT dsk);
|
||||||
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk);
|
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk, int mode);
|
||||||
/* *** Changed on 9/4/00 BER */
|
/* *** Changed on 9/4/00 BER */
|
||||||
UWORD dskxfer(COUNT dsk, ULONG blkno, VOID FAR * buf, UWORD numblocks,
|
UWORD dskxfer(COUNT dsk, ULONG blkno, VOID FAR * buf, UWORD numblocks,
|
||||||
COUNT mode);
|
COUNT mode);
|
||||||
|
|
Loading…
Reference in New Issue