diff options
author | kib <kib@FreeBSD.org> | 2012-02-21 01:05:12 +0000 |
---|---|---|
committer | kib <kib@FreeBSD.org> | 2012-02-21 01:05:12 +0000 |
commit | 80ae8fe82cdaa69f78dc90fa27bc9e79863de0ea (patch) | |
tree | d0d078391c4959fc08545db4ab619daadd9cf1d9 /sys/ufs | |
parent | 31a24bc1664a822f3d06595f42063719e6902ff1 (diff) | |
download | FreeBSD-src-80ae8fe82cdaa69f78dc90fa27bc9e79863de0ea.zip FreeBSD-src-80ae8fe82cdaa69f78dc90fa27bc9e79863de0ea.tar.gz |
Fix found places where uio_resid is truncated to int.
Add the sysctl debug.iosize_max_clamp, enabled by default. Setting the
sysctl to zero allows to perform the SSIZE_MAX-sized i/o requests from
the usermode.
Discussed with: bde, das (previous versions)
MFC after: 1 month
Diffstat (limited to 'sys/ufs')
-rw-r--r-- | sys/ufs/ffs/ffs_vnops.c | 12 | ||||
-rw-r--r-- | sys/ufs/ufs/ufs_lookup.c | 3 |
2 files changed, 10 insertions, 5 deletions
diff --git a/sys/ufs/ffs/ffs_vnops.c b/sys/ufs/ffs/ffs_vnops.c index 333f447..4783f65 100644 --- a/sys/ufs/ffs/ffs_vnops.c +++ b/sys/ufs/ffs/ffs_vnops.c @@ -420,7 +420,8 @@ ffs_read(ap) ufs_lbn_t lbn, nextlbn; off_t bytesinfile; long size, xfersize, blkoffset; - int error, orig_resid; + ssize_t orig_resid; + int error; int seqcount; int ioflag; @@ -633,8 +634,9 @@ ffs_write(ap) struct buf *bp; ufs_lbn_t lbn; off_t osize; + ssize_t resid; int seqcount; - int blkoffset, error, flags, ioflag, resid, size, xfersize; + int blkoffset, error, flags, ioflag, size, xfersize; vp = ap->a_vp; uio = ap->a_uio; @@ -871,7 +873,8 @@ ffs_extread(struct vnode *vp, struct uio *uio, int ioflag) ufs_lbn_t lbn, nextlbn; off_t bytesinfile; long size, xfersize, blkoffset; - int error, orig_resid; + ssize_t orig_resid; + int error; ip = VTOI(vp); fs = ip->i_fs; @@ -1024,7 +1027,8 @@ ffs_extwrite(struct vnode *vp, struct uio *uio, int ioflag, struct ucred *ucred) struct buf *bp; ufs_lbn_t lbn; off_t osize; - int blkoffset, error, flags, resid, size, xfersize; + ssize_t resid; + int blkoffset, error, flags, size, xfersize; ip = VTOI(vp); fs = ip->i_fs; diff --git a/sys/ufs/ufs/ufs_lookup.c b/sys/ufs/ufs/ufs_lookup.c index 391b3e9..56ca058 100644 --- a/sys/ufs/ufs/ufs_lookup.c +++ b/sys/ufs/ufs/ufs_lookup.c @@ -1337,7 +1337,8 @@ ufs_dirempty(ip, parentino, cred) doff_t off; struct dirtemplate dbuf; struct direct *dp = (struct direct *)&dbuf; - int error, count, namlen; + int error, namlen; + ssize_t count; #define MINDIRSIZ (sizeof (struct dirtemplate) / 2) for (off = 0; off < ip->i_size; off += dp->d_reclen) { |