Diff for /src/sys/vfs/ufs/ffs_vfsops.c between versions 1.17 and 1.18

version 1.17, 2004/05/18 00:16:46 version 1.18, 2004/05/19 22:53:06
Line 316  ffs_mount(struct mount *mp,  /* mount st Line 316  ffs_mount(struct mount *mp,  /* mount st
                  ********************                   ********************
                  * UPDATE                   * UPDATE
                  * If it's not the same vnode, or at least the same device                   * If it's not the same vnode, or at least the same device
                 * then it's not correct.                 * then it's not correct.  NOTE: devvp->v_rdev may be NULL
                  * since we haven't opened it, so we compare udev instead.
                  ********************                   ********************
                  */                   */
   
                 if (devvp != ump->um_devvp) {                  if (devvp != ump->um_devvp) {
                        if ( devvp->v_rdev == ump->um_devvp->v_rdev) {                        if (devvp->v_udev == ump->um_devvp->v_udev) {
                                 vrele(devvp);                                  vrele(devvp);
                         } else {                          } else {
                                   printf("cannot update mount, udev does"
                                           " not match %08x vs %08x\n",
                                           devvp->v_udev, ump->um_devvp->v_udev);
                                 err = EINVAL;   /* needs translation */                                  err = EINVAL;   /* needs translation */
                         }                          }
                } else                } else {
                         vrele(devvp);                          vrele(devvp);
                   }
                 /*                  /*
                  * Update device name only on success                   * Update device name only on success
                  */                   */
Line 459  ffs_reload(struct mount *mp, struct ucre Line 463  ffs_reload(struct mount *mp, struct ucre
                 panic("ffs_reload: dirty1");                  panic("ffs_reload: dirty1");
   
         dev = devvp->v_rdev;          dev = devvp->v_rdev;
   
         /*          /*
          * Only VMIO the backing device if the backing device is a real           * Only VMIO the backing device if the backing device is a real
          * block device.  See ffs_mountmfs() for more details.           * block device.  See ffs_mountmfs() for more details.
Line 617  ffs_mountfs(struct vnode *devvp, struct Line 620  ffs_mountfs(struct vnode *devvp, struct
         int32_t *lp;          int32_t *lp;
         u_int64_t maxfilesize;                                  /* XXX */          u_int64_t maxfilesize;                                  /* XXX */
         size_t strsize;          size_t strsize;
         int ncount;  
   
         dev = devvp->v_rdev;  
         /*          /*
          * Disallow multiple mounts of the same device.           * Disallow multiple mounts of the same device.
          * Disallow mounting of a device that is currently in use           * Disallow mounting of a device that is currently in use
Line 629  ffs_mountfs(struct vnode *devvp, struct Line 630  ffs_mountfs(struct vnode *devvp, struct
         error = vfs_mountedon(devvp);          error = vfs_mountedon(devvp);
         if (error)          if (error)
                 return (error);                  return (error);
        ncount = vcount(devvp);        if (count_udev(devvp->v_udev) > 0 && devvp != rootvp)
 
        if (ncount > 1 && devvp != rootvp) 
                 return (EBUSY);                  return (EBUSY);
         vn_lock(devvp, NULL, LK_EXCLUSIVE | LK_RETRY, td);          vn_lock(devvp, NULL, LK_EXCLUSIVE | LK_RETRY, td);
         error = vinvalbuf(devvp, V_SAVE, td, 0, 0);          error = vinvalbuf(devvp, V_SAVE, td, 0, 0);
Line 658  ffs_mountfs(struct vnode *devvp, struct Line 657  ffs_mountfs(struct vnode *devvp, struct
         VOP_UNLOCK(devvp, NULL, 0, td);          VOP_UNLOCK(devvp, NULL, 0, td);
         if (error)          if (error)
                 return (error);                  return (error);
        if (devvp->v_rdev->si_iosize_max != 0)        dev = devvp->v_rdev;
                mp->mnt_iosize_max = devvp->v_rdev->si_iosize_max;        if (dev->si_iosize_max != 0)
                 mp->mnt_iosize_max = dev->si_iosize_max;
         if (mp->mnt_iosize_max > MAXPHYS)          if (mp->mnt_iosize_max > MAXPHYS)
                 mp->mnt_iosize_max = MAXPHYS;                  mp->mnt_iosize_max = MAXPHYS;
   
Line 768  ffs_mountfs(struct vnode *devvp, struct Line 768  ffs_mountfs(struct vnode *devvp, struct
         ump->um_seqinc = fs->fs_frag;          ump->um_seqinc = fs->fs_frag;
         for (i = 0; i < MAXQUOTAS; i++)          for (i = 0; i < MAXQUOTAS; i++)
                 ump->um_quotas[i] = NULLVP;                  ump->um_quotas[i] = NULLVP;
        devvp->v_specmountpoint = mp;        dev->si_mountpoint = mp;
         ffs_oldfscompat(fs);          ffs_oldfscompat(fs);
   
         /*          /*
Line 808  ffs_mountfs(struct vnode *devvp, struct Line 808  ffs_mountfs(struct vnode *devvp, struct
         }          }
         return (0);          return (0);
 out:  out:
        devvp->v_specmountpoint = NULL;        dev->si_mountpoint = NULL;
         if (bp)          if (bp)
                 brelse(bp);                  brelse(bp);
        (void)VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, td);        VOP_CLOSE(devvp, ronly ? FREAD : FREAD|FWRITE, td);
         if (ump) {          if (ump) {
                 free(ump->um_fs, M_UFSMNT);                  free(ump->um_fs, M_UFSMNT);
                 free(ump, M_UFSMNT);                  free(ump, M_UFSMNT);
Line 881  ffs_unmount(struct mount *mp, int mntfla Line 881  ffs_unmount(struct mount *mp, int mntfla
                         return (error);                          return (error);
                 }                  }
         }          }
        ump->um_devvp->v_specmountpoint = NULL;        ump->um_devvp->v_rdev->si_mountpoint = NULL;
   
         vinvalbuf(ump->um_devvp, V_SAVE, td, 0, 0);          vinvalbuf(ump->um_devvp, V_SAVE, td, 0, 0);
         error = VOP_CLOSE(ump->um_devvp, fs->fs_ronly ? FREAD : FREAD|FWRITE, td);          error = VOP_CLOSE(ump->um_devvp, fs->fs_ronly ? FREAD : FREAD|FWRITE, td);

Removed from v.1.17  
changed lines
  Added in v.1.18