Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*


 162 
 163         if (secpolicy_fs_mount(cr, mvp, vfsp) != 0)
 164                 return (EPERM);
 165 
 166         if (mvp->v_type != VDIR)
 167                 return (ENOTDIR);
 168 
 169         if ((uap->flags & MS_OVERLAY) == 0 &&
 170             (mvp->v_count > 1 || (mvp->v_flag & VROOT)))
 171                 return (EBUSY);
 172 
 173         data = kmem_alloc(sizeof (objfs_vfs_t), KM_SLEEP);
 174 
 175         /*
 176          * Initialize vfs fields
 177          */
 178         vfsp->vfs_bsize = DEV_BSIZE;
 179         vfsp->vfs_fstype = objfs_fstype;
 180         do {
 181                 dev = makedevice(objfs_major,
 182                     atomic_add_32_nv(&objfs_minor, 1) & L_MAXMIN32);
 183         } while (vfs_devismounted(dev));
 184         vfs_make_fsid(&vfsp->vfs_fsid, dev, objfs_fstype);
 185         vfsp->vfs_data = data;
 186         vfsp->vfs_dev = dev;
 187 
 188         /*
 189          * Create root
 190          */
 191         data->objfs_vfs_root = objfs_create_root(vfsp);
 192 
 193         return (0);
 194 }
 195 
 196 static int
 197 objfs_unmount(vfs_t *vfsp, int flag, struct cred *cr)
 198 {
 199         objfs_vfs_t *data;
 200 
 201         if (secpolicy_fs_unmount(cr, vfsp) != 0)
 202                 return (EPERM);




 162 
 163         if (secpolicy_fs_mount(cr, mvp, vfsp) != 0)
 164                 return (EPERM);
 165 
 166         if (mvp->v_type != VDIR)
 167                 return (ENOTDIR);
 168 
 169         if ((uap->flags & MS_OVERLAY) == 0 &&
 170             (mvp->v_count > 1 || (mvp->v_flag & VROOT)))
 171                 return (EBUSY);
 172 
 173         data = kmem_alloc(sizeof (objfs_vfs_t), KM_SLEEP);
 174 
 175         /*
 176          * Initialize vfs fields
 177          */
 178         vfsp->vfs_bsize = DEV_BSIZE;
 179         vfsp->vfs_fstype = objfs_fstype;
 180         do {
 181                 dev = makedevice(objfs_major,
 182                     atomic_inc_32_nv(&objfs_minor) & L_MAXMIN32);
 183         } while (vfs_devismounted(dev));
 184         vfs_make_fsid(&vfsp->vfs_fsid, dev, objfs_fstype);
 185         vfsp->vfs_data = data;
 186         vfsp->vfs_dev = dev;
 187 
 188         /*
 189          * Create root
 190          */
 191         data->objfs_vfs_root = objfs_create_root(vfsp);
 192 
 193         return (0);
 194 }
 195 
 196 static int
 197 objfs_unmount(vfs_t *vfsp, int flag, struct cred *cr)
 198 {
 199         objfs_vfs_t *data;
 200 
 201         if (secpolicy_fs_unmount(cr, vfsp) != 0)
 202                 return (EPERM);