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);
|