Diff for /src/sys/kern/kern_physio.c between versions 1.5 and 1.6

version 1.5, 2003/07/22 17:03:33 version 1.6, 2004/02/09 21:51:28
Line 16 Line 16
  * 4. Modifications may be freely made to this file if the above conditions   * 4. Modifications may be freely made to this file if the above conditions
  *    are met.   *    are met.
  *   *
 * $FreeBSD: src/sys/kern/kern_physio.c,v 1.46.2.3 2003/05/29 06:15:35 alc Exp $ * $FreeBSD: src/sys/kern/kern_physio.c,v 1.46.2.4 2003/11/14 09:51:47 simokawa Exp $
  * $DragonFly$   * $DragonFly$
  */   */
   
Line 43  physio(dev_t dev, struct uio *uio, int i Line 43  physio(dev_t dev, struct uio *uio, int i
         int i;          int i;
         int error;          int error;
         int spl;          int spl;
           int chk_blockno;
         caddr_t sa;          caddr_t sa;
         off_t blockno;          off_t blockno;
         u_int iolen;          u_int iolen;
Line 65  physio(dev_t dev, struct uio *uio, int i Line 66  physio(dev_t dev, struct uio *uio, int i
                 dev->si_iosize_max = DFLTPHYS;                  dev->si_iosize_max = DFLTPHYS;
         }          }
   
           /* Don't check block number overflow for D_MEM */
           if ((devsw(dev)->d_flags & D_TYPEMASK) == D_MEM)
                   chk_blockno = 0;
           else
                   chk_blockno = 1;
   
         for (i = 0; i < uio->uio_iovcnt; i++) {          for (i = 0; i < uio->uio_iovcnt; i++) {
                 while (uio->uio_iov[i].iov_len) {                  while (uio->uio_iov[i].iov_len) {
                         if (uio->uio_rw == UIO_READ)                          if (uio->uio_rw == UIO_READ)
Line 97  physio(dev_t dev, struct uio *uio, int i Line 104  physio(dev_t dev, struct uio *uio, int i
                         bp->b_bufsize = bp->b_bcount;                          bp->b_bufsize = bp->b_bcount;
   
                         blockno = bp->b_offset >> DEV_BSHIFT;                          blockno = bp->b_offset >> DEV_BSHIFT;
                        if ((daddr_t)blockno != blockno) {                        if (chk_blockno && (daddr_t)blockno != blockno) {
                                 error = EINVAL; /* blockno overflow */                                  error = EINVAL; /* blockno overflow */
                                 goto doerror;                                  goto doerror;
                         }                          }

Removed from v.1.5  
changed lines
  Added in v.1.6