summaryrefslogtreecommitdiffstats
path: root/sys/gnu/fs/ext2fs/ext2_readwrite.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/gnu/fs/ext2fs/ext2_readwrite.c')
-rw-r--r--sys/gnu/fs/ext2fs/ext2_readwrite.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/sys/gnu/fs/ext2fs/ext2_readwrite.c b/sys/gnu/fs/ext2fs/ext2_readwrite.c
index be01831..8deb0b1 100644
--- a/sys/gnu/fs/ext2fs/ext2_readwrite.c
+++ b/sys/gnu/fs/ext2fs/ext2_readwrite.c
@@ -137,10 +137,12 @@ READ(ap)
break;
xfersize = size;
}
- if (error =
- uiomove((char *)bp->b_data + blkoffset, (int)xfersize, uio))
- break;
-
+ if (uio->uio_segflg != UIO_NOCOPY)
+ ip->i_flag |= IN_RECURSE;
+ error =
+ uiomove((char *)bp->b_data + blkoffset, (int)xfersize, uio);
+ if (uio->uio_segflg != UIO_NOCOPY)
+ ip->i_flag &= ~IN_RECURSE;
#if !defined(__FreeBSD__)
if (S_ISREG(mode) && (xfersize + blkoffset == fs->s_frag_size ||
uio->uio_offset == ip->i_size))
@@ -261,8 +263,12 @@ WRITE(ap)
if (size < xfersize)
xfersize = size;
+ if (uio->uio_segflg != UIO_NOCOPY)
+ ip->i_flag |= IN_RECURSE;
error =
uiomove((char *)bp->b_data + blkoffset, (int)xfersize, uio);
+ if (uio->uio_segflg != UIO_NOCOPY)
+ ip->i_flag &= ~IN_RECURSE;
if (ioflag & IO_SYNC)
(void)bwrite(bp);
@@ -280,7 +286,8 @@ WRITE(ap)
}
} else {
#if defined(__FreeBSD__)
- bp->b_flags |= B_CLUSTEROK;
+ if (doclusterwrite)
+ bp->b_flags |= B_CLUSTEROK;
#endif
bdwrite(bp);
}
OpenPOWER on IntegriCloud