summaryrefslogtreecommitdiffstats
path: root/sys/msdosfs/msdosfs_vnops.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/msdosfs/msdosfs_vnops.c')
-rw-r--r--sys/msdosfs/msdosfs_vnops.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/msdosfs/msdosfs_vnops.c b/sys/msdosfs/msdosfs_vnops.c
index 2407e2e..05139a7 100644
--- a/sys/msdosfs/msdosfs_vnops.c
+++ b/sys/msdosfs/msdosfs_vnops.c
@@ -559,6 +559,7 @@ msdosfs_read(ap)
daddr_t lbn;
daddr_t rablock;
int rasize;
+ int seqcount;
struct buf *bp;
struct vnode *vp = ap->a_vp;
struct denode *dep = VTODE(vp);
@@ -575,6 +576,8 @@ msdosfs_read(ap)
if (orig_resid <= 0)
return (0);
+ seqcount = ap->a_ioflag >> 16;
+
isadir = dep->de_Attributes & ATTR_DIRECTORY;
do {
lbn = de_cluster(pmp, uio->uio_offset);
@@ -600,15 +603,15 @@ msdosfs_read(ap)
error = bread(pmp->pm_devvp, lbn, blsize, NOCRED, &bp);
} else {
rablock = lbn + 1;
- if (vp->v_lastr + 1 == lbn &&
+ if (seqcount > 1 &&
de_cn2off(pmp, rablock) < dep->de_FileSize) {
rasize = pmp->pm_bpcluster;
error = breadn(vp, lbn, pmp->pm_bpcluster,
&rablock, &rasize, 1, NOCRED, &bp);
- } else
+ } else {
error = bread(vp, lbn, pmp->pm_bpcluster,
NOCRED, &bp);
- vp->v_lastr = lbn;
+ }
}
n = min(n, pmp->pm_bpcluster - bp->b_resid);
if (error) {
OpenPOWER on IntegriCloud