209 VREG, VNON, VLNK, VNON, VSOCK, VNON, VNON, VNON
210 };
211
212 ushort_t vttoif_tab[] = {
213 0, S_IFREG, S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO,
214 S_IFDOOR, 0, S_IFSOCK, S_IFPORT, 0
215 };
216
217 /*
218 * The system vnode cache.
219 */
220
221 kmem_cache_t *vn_cache;
222
223
224 /*
225 * Vnode operations vector.
226 */
227
228 static const fs_operation_trans_def_t vn_ops_table[] = {
229 VOPNAME_OPEN, offsetof(struct vnodeops, vop_open),
230 fs_nosys, fs_nosys,
231
232 VOPNAME_CLOSE, offsetof(struct vnodeops, vop_close),
233 fs_nosys, fs_nosys,
234
235 VOPNAME_READ, offsetof(struct vnodeops, vop_read),
236 fs_nosys, fs_nosys,
237
238 VOPNAME_WRITE, offsetof(struct vnodeops, vop_write),
239 fs_nosys, fs_nosys,
240
241 VOPNAME_IOCTL, offsetof(struct vnodeops, vop_ioctl),
242 fs_nosys, fs_nosys,
243
244 VOPNAME_SETFL, offsetof(struct vnodeops, vop_setfl),
245 fs_setfl, fs_nosys,
246
247 VOPNAME_GETATTR, offsetof(struct vnodeops, vop_getattr),
248 fs_nosys, fs_nosys,
249
250 VOPNAME_SETATTR, offsetof(struct vnodeops, vop_setattr),
251 fs_nosys, fs_nosys,
252
253 VOPNAME_ACCESS, offsetof(struct vnodeops, vop_access),
254 fs_nosys, fs_nosys,
255
256 VOPNAME_LOOKUP, offsetof(struct vnodeops, vop_lookup),
257 fs_nosys, fs_nosys,
258
259 VOPNAME_CREATE, offsetof(struct vnodeops, vop_create),
260 fs_nosys, fs_nosys,
261
262 VOPNAME_REMOVE, offsetof(struct vnodeops, vop_remove),
263 fs_nosys, fs_nosys,
264
265 VOPNAME_LINK, offsetof(struct vnodeops, vop_link),
266 fs_nosys, fs_nosys,
267
268 VOPNAME_RENAME, offsetof(struct vnodeops, vop_rename),
269 fs_nosys, fs_nosys,
270
271 VOPNAME_MKDIR, offsetof(struct vnodeops, vop_mkdir),
272 fs_nosys, fs_nosys,
273
274 VOPNAME_RMDIR, offsetof(struct vnodeops, vop_rmdir),
275 fs_nosys, fs_nosys,
276
277 VOPNAME_READDIR, offsetof(struct vnodeops, vop_readdir),
278 fs_nosys, fs_nosys,
279
280 VOPNAME_SYMLINK, offsetof(struct vnodeops, vop_symlink),
281 fs_nosys, fs_nosys,
282
283 VOPNAME_READLINK, offsetof(struct vnodeops, vop_readlink),
284 fs_nosys, fs_nosys,
285
286 VOPNAME_FSYNC, offsetof(struct vnodeops, vop_fsync),
287 fs_nosys, fs_nosys,
288
289 VOPNAME_INACTIVE, offsetof(struct vnodeops, vop_inactive),
290 fs_nosys, fs_nosys,
291
292 VOPNAME_FID, offsetof(struct vnodeops, vop_fid),
293 fs_nosys, fs_nosys,
294
295 VOPNAME_RWLOCK, offsetof(struct vnodeops, vop_rwlock),
296 fs_rwlock, fs_rwlock,
297
298 VOPNAME_RWUNLOCK, offsetof(struct vnodeops, vop_rwunlock),
299 (fs_generic_func_p) fs_rwunlock,
300 (fs_generic_func_p) fs_rwunlock, /* no errors allowed */
301
302 VOPNAME_SEEK, offsetof(struct vnodeops, vop_seek),
303 fs_nosys, fs_nosys,
304
305 VOPNAME_CMP, offsetof(struct vnodeops, vop_cmp),
306 fs_cmp, fs_cmp, /* no errors allowed */
307
308 VOPNAME_FRLOCK, offsetof(struct vnodeops, vop_frlock),
309 fs_frlock, fs_nosys,
310
311 VOPNAME_SPACE, offsetof(struct vnodeops, vop_space),
312 fs_nosys, fs_nosys,
313
314 VOPNAME_REALVP, offsetof(struct vnodeops, vop_realvp),
315 fs_nosys, fs_nosys,
316
317 VOPNAME_GETPAGE, offsetof(struct vnodeops, vop_getpage),
318 fs_nosys, fs_nosys,
319
320 VOPNAME_PUTPAGE, offsetof(struct vnodeops, vop_putpage),
321 fs_nosys, fs_nosys,
322
323 VOPNAME_MAP, offsetof(struct vnodeops, vop_map),
324 (fs_generic_func_p) fs_nosys_map,
325 (fs_generic_func_p) fs_nosys_map,
326
327 VOPNAME_ADDMAP, offsetof(struct vnodeops, vop_addmap),
328 (fs_generic_func_p) fs_nosys_addmap,
329 (fs_generic_func_p) fs_nosys_addmap,
330
331 VOPNAME_DELMAP, offsetof(struct vnodeops, vop_delmap),
332 fs_nosys, fs_nosys,
333
334 VOPNAME_POLL, offsetof(struct vnodeops, vop_poll),
335 (fs_generic_func_p) fs_poll, (fs_generic_func_p) fs_nosys_poll,
336
337 VOPNAME_DUMP, offsetof(struct vnodeops, vop_dump),
338 fs_nosys, fs_nosys,
339
340 VOPNAME_PATHCONF, offsetof(struct vnodeops, vop_pathconf),
341 fs_pathconf, fs_nosys,
342
343 VOPNAME_PAGEIO, offsetof(struct vnodeops, vop_pageio),
344 fs_nosys, fs_nosys,
345
346 VOPNAME_DUMPCTL, offsetof(struct vnodeops, vop_dumpctl),
347 fs_nosys, fs_nosys,
348
349 VOPNAME_DISPOSE, offsetof(struct vnodeops, vop_dispose),
350 (fs_generic_func_p) fs_dispose,
351 (fs_generic_func_p) fs_nodispose,
352
353 VOPNAME_SETSECATTR, offsetof(struct vnodeops, vop_setsecattr),
354 fs_nosys, fs_nosys,
355
356 VOPNAME_GETSECATTR, offsetof(struct vnodeops, vop_getsecattr),
357 fs_fab_acl, fs_nosys,
358
359 VOPNAME_SHRLOCK, offsetof(struct vnodeops, vop_shrlock),
360 fs_shrlock, fs_nosys,
361
362 VOPNAME_VNEVENT, offsetof(struct vnodeops, vop_vnevent),
363 (fs_generic_func_p) fs_vnevent_nosupport,
364 (fs_generic_func_p) fs_vnevent_nosupport,
365
366 VOPNAME_REQZCBUF, offsetof(struct vnodeops, vop_reqzcbuf),
367 fs_nosys, fs_nosys,
368
369 VOPNAME_RETZCBUF, offsetof(struct vnodeops, vop_retzcbuf),
370 fs_nosys, fs_nosys,
371
372 NULL, 0, NULL, NULL
373 };
374
375 /* Extensible attribute (xva) routines. */
376
377 /*
378 * Zero out the structure, set the size of the requested/returned bitmaps,
379 * set AT_XVATTR in the embedded vattr_t's va_mask, and set up the pointer
380 * to the returned attributes array.
381 */
382 void
383 xva_init(xvattr_t *xvap)
384 {
385 bzero(xvap, sizeof (xvattr_t));
386 xvap->xva_mapsize = XVA_MAPSIZE;
387 xvap->xva_magic = XVA_MAGIC;
388 xvap->xva_vattr.va_mask = AT_XVATTR;
389 xvap->xva_rtnattrmapp = &(xvap->xva_rtnattrmap)[0];
390 }
391
392 /*
|
209 VREG, VNON, VLNK, VNON, VSOCK, VNON, VNON, VNON
210 };
211
212 ushort_t vttoif_tab[] = {
213 0, S_IFREG, S_IFDIR, S_IFBLK, S_IFCHR, S_IFLNK, S_IFIFO,
214 S_IFDOOR, 0, S_IFSOCK, S_IFPORT, 0
215 };
216
217 /*
218 * The system vnode cache.
219 */
220
221 kmem_cache_t *vn_cache;
222
223
224 /*
225 * Vnode operations vector.
226 */
227
228 static const fs_operation_trans_def_t vn_ops_table[] = {
229 { VOPNAME_OPEN, offsetof(struct vnodeops, vop_open),
230 fs_nosys, fs_nosys },
231
232 { VOPNAME_CLOSE, offsetof(struct vnodeops, vop_close),
233 fs_nosys, fs_nosys },
234
235 { VOPNAME_READ, offsetof(struct vnodeops, vop_read),
236 fs_nosys, fs_nosys },
237
238 { VOPNAME_WRITE, offsetof(struct vnodeops, vop_write),
239 fs_nosys, fs_nosys },
240
241 { VOPNAME_IOCTL, offsetof(struct vnodeops, vop_ioctl),
242 fs_nosys, fs_nosys },
243
244 { VOPNAME_SETFL, offsetof(struct vnodeops, vop_setfl),
245 fs_setfl, fs_nosys },
246
247 { VOPNAME_GETATTR, offsetof(struct vnodeops, vop_getattr),
248 fs_nosys, fs_nosys },
249
250 { VOPNAME_SETATTR, offsetof(struct vnodeops, vop_setattr),
251 fs_nosys, fs_nosys },
252
253 { VOPNAME_ACCESS, offsetof(struct vnodeops, vop_access),
254 fs_nosys, fs_nosys },
255
256 { VOPNAME_LOOKUP, offsetof(struct vnodeops, vop_lookup),
257 fs_nosys, fs_nosys },
258
259 { VOPNAME_CREATE, offsetof(struct vnodeops, vop_create),
260 fs_nosys, fs_nosys },
261
262 { VOPNAME_REMOVE, offsetof(struct vnodeops, vop_remove),
263 fs_nosys, fs_nosys },
264
265 { VOPNAME_LINK, offsetof(struct vnodeops, vop_link),
266 fs_nosys, fs_nosys },
267
268 { VOPNAME_RENAME, offsetof(struct vnodeops, vop_rename),
269 fs_nosys, fs_nosys },
270
271 { VOPNAME_MKDIR, offsetof(struct vnodeops, vop_mkdir),
272 fs_nosys, fs_nosys },
273
274 { VOPNAME_RMDIR, offsetof(struct vnodeops, vop_rmdir),
275 fs_nosys, fs_nosys },
276
277 { VOPNAME_READDIR, offsetof(struct vnodeops, vop_readdir),
278 fs_nosys, fs_nosys },
279
280 { VOPNAME_SYMLINK, offsetof(struct vnodeops, vop_symlink),
281 fs_nosys, fs_nosys },
282
283 { VOPNAME_READLINK, offsetof(struct vnodeops, vop_readlink),
284 fs_nosys, fs_nosys },
285
286 { VOPNAME_FSYNC, offsetof(struct vnodeops, vop_fsync),
287 fs_nosys, fs_nosys },
288
289 { VOPNAME_INACTIVE, offsetof(struct vnodeops, vop_inactive),
290 fs_nosys, fs_nosys },
291
292 { VOPNAME_FID, offsetof(struct vnodeops, vop_fid),
293 fs_nosys, fs_nosys },
294
295 { VOPNAME_RWLOCK, offsetof(struct vnodeops, vop_rwlock),
296 fs_rwlock, fs_rwlock },
297
298 { VOPNAME_RWUNLOCK, offsetof(struct vnodeops, vop_rwunlock),
299 (fs_generic_func_p) fs_rwunlock,
300 (fs_generic_func_p) fs_rwunlock }, /* no errors allowed */
301
302 { VOPNAME_SEEK, offsetof(struct vnodeops, vop_seek),
303 fs_nosys, fs_nosys },
304
305 { VOPNAME_CMP, offsetof(struct vnodeops, vop_cmp),
306 fs_cmp, fs_cmp }, /* no errors allowed */
307
308 { VOPNAME_FRLOCK, offsetof(struct vnodeops, vop_frlock),
309 fs_frlock, fs_nosys },
310
311 { VOPNAME_SPACE, offsetof(struct vnodeops, vop_space),
312 fs_nosys, fs_nosys },
313
314 { VOPNAME_REALVP, offsetof(struct vnodeops, vop_realvp),
315 fs_nosys, fs_nosys },
316
317 { VOPNAME_GETPAGE, offsetof(struct vnodeops, vop_getpage),
318 fs_nosys, fs_nosys },
319
320 { VOPNAME_PUTPAGE, offsetof(struct vnodeops, vop_putpage),
321 fs_nosys, fs_nosys },
322
323 { VOPNAME_MAP, offsetof(struct vnodeops, vop_map),
324 (fs_generic_func_p) fs_nosys_map,
325 (fs_generic_func_p) fs_nosys_map },
326
327 { VOPNAME_ADDMAP, offsetof(struct vnodeops, vop_addmap),
328 (fs_generic_func_p) fs_nosys_addmap,
329 (fs_generic_func_p) fs_nosys_addmap },
330
331 { VOPNAME_DELMAP, offsetof(struct vnodeops, vop_delmap),
332 fs_nosys, fs_nosys },
333
334 { VOPNAME_POLL, offsetof(struct vnodeops, vop_poll),
335 (fs_generic_func_p) fs_poll, (fs_generic_func_p) fs_nosys_poll },
336
337 { VOPNAME_DUMP, offsetof(struct vnodeops, vop_dump),
338 fs_nosys, fs_nosys },
339
340 { VOPNAME_PATHCONF, offsetof(struct vnodeops, vop_pathconf),
341 fs_pathconf, fs_nosys },
342
343 { VOPNAME_PAGEIO, offsetof(struct vnodeops, vop_pageio),
344 fs_nosys, fs_nosys },
345
346 { VOPNAME_DUMPCTL, offsetof(struct vnodeops, vop_dumpctl),
347 fs_nosys, fs_nosys },
348
349 { VOPNAME_DISPOSE, offsetof(struct vnodeops, vop_dispose),
350 (fs_generic_func_p) fs_dispose,
351 (fs_generic_func_p) fs_nodispose },
352
353 { VOPNAME_SETSECATTR, offsetof(struct vnodeops, vop_setsecattr),
354 fs_nosys, fs_nosys },
355
356 { VOPNAME_GETSECATTR, offsetof(struct vnodeops, vop_getsecattr),
357 fs_fab_acl, fs_nosys },
358
359 { VOPNAME_SHRLOCK, offsetof(struct vnodeops, vop_shrlock),
360 fs_shrlock, fs_nosys },
361
362 { VOPNAME_VNEVENT, offsetof(struct vnodeops, vop_vnevent),
363 (fs_generic_func_p) fs_vnevent_nosupport,
364 (fs_generic_func_p) fs_vnevent_nosupport },
365
366 { VOPNAME_REQZCBUF, offsetof(struct vnodeops, vop_reqzcbuf),
367 fs_nosys, fs_nosys },
368
369 { VOPNAME_RETZCBUF, offsetof(struct vnodeops, vop_retzcbuf),
370 fs_nosys, fs_nosys },
371
372 { NULL, 0, NULL, NULL }
373 };
374
375 /* Extensible attribute (xva) routines. */
376
377 /*
378 * Zero out the structure, set the size of the requested/returned bitmaps,
379 * set AT_XVATTR in the embedded vattr_t's va_mask, and set up the pointer
380 * to the returned attributes array.
381 */
382 void
383 xva_init(xvattr_t *xvap)
384 {
385 bzero(xvap, sizeof (xvattr_t));
386 xvap->xva_mapsize = XVA_MAPSIZE;
387 xvap->xva_magic = XVA_MAGIC;
388 xvap->xva_vattr.va_mask = AT_XVATTR;
389 xvap->xva_rtnattrmapp = &(xvap->xva_rtnattrmap)[0];
390 }
391
392 /*
|