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;
|
||||
}
|
||||
|
||||
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk)
|
||||
BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk, int mode)
|
||||
{
|
||||
struct buffer FAR *bp = firstbuf;
|
||||
|
||||
|
@ -168,7 +168,10 @@ BOOL DeleteBlockInBufferCache(ULONG blknolow, ULONG blknohigh, COUNT dsk)
|
|||
bp->b_blkno <= blknohigh &&
|
||||
(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);
|
||||
}
|
||||
|
|
|
@ -1706,7 +1706,7 @@ UCOUNT rwblock(COUNT fd, VOID FAR * buffer, UCOUNT count, int mode)
|
|||
|
||||
DeleteBlockInBufferCache(currentblock,
|
||||
currentblock + sectors_to_xfer - 1,
|
||||
fnp->f_dpb->dpb_unit);
|
||||
fnp->f_dpb->dpb_unit, mode);
|
||||
|
||||
if (dskxfer(fnp->f_dpb->dpb_unit,
|
||||
currentblock,
|
||||
|
|
|
@ -41,7 +41,7 @@ VOID setinvld(REG COUNT dsk);
|
|||
BOOL flush_buffers(REG COUNT dsk);
|
||||
BOOL flush(void);
|
||||
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 */
|
||||
UWORD dskxfer(COUNT dsk, ULONG blkno, VOID FAR * buf, UWORD numblocks,
|
||||
COUNT mode);
|
||||
|
|
Loading…
Reference in New Issue