Lines Matching +full:pd +full:- +full:node
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
5 * Copyright (c) 2016-2017 Robert N. M. Watson
10 * contract FA8650-15-C-7558 ("CADETS"), as part of the DARPA Transparent
103 /* node types */
133 * mqfs_node: describes a node (file or directory) within a mqfs
157 #define VTON(vp) (((struct mqfs_vdata *)((vp)->v_data))->mv_node)
158 #define VTOMQ(vp) ((struct mqueue *)(VTON(vp)->mn_data))
159 #define VFSTOMQFS(m) ((struct mqfs_info *)((m)->mnt_data))
161 (fp)->f_data)->mn_data))
226 /* Only one instance per-system */
300 mi->mi_unrhdr = up; in mqfs_fileno_init()
311 up = mi->mi_unrhdr; in mqfs_fileno_uninit()
312 mi->mi_unrhdr = NULL; in mqfs_fileno_uninit()
323 if (mn->mn_parent && !mn->mn_parent->mn_fileno) in mqfs_fileno_alloc()
324 mqfs_fileno_alloc(mi, mn->mn_parent); in mqfs_fileno_alloc()
326 switch (mn->mn_type) { in mqfs_fileno_alloc()
331 mn->mn_fileno = alloc_unr(mi->mi_unrhdr); in mqfs_fileno_alloc()
334 KASSERT(mn->mn_parent != NULL, in mqfs_fileno_alloc()
335 ("mqfstype_this node has no parent")); in mqfs_fileno_alloc()
336 mn->mn_fileno = mn->mn_parent->mn_fileno; in mqfs_fileno_alloc()
339 KASSERT(mn->mn_parent != NULL, in mqfs_fileno_alloc()
340 ("mqfstype_parent node has no parent")); in mqfs_fileno_alloc()
341 if (mn->mn_parent == mi->mi_root) { in mqfs_fileno_alloc()
342 mn->mn_fileno = mn->mn_parent->mn_fileno; in mqfs_fileno_alloc()
345 KASSERT(mn->mn_parent->mn_parent != NULL, in mqfs_fileno_alloc()
346 ("mqfstype_parent node has no grandparent")); in mqfs_fileno_alloc()
347 mn->mn_fileno = mn->mn_parent->mn_parent->mn_fileno; in mqfs_fileno_alloc()
351 ("mqfs_fileno_alloc() called for unknown type node: %d", in mqfs_fileno_alloc()
352 mn->mn_type)); in mqfs_fileno_alloc()
363 switch (mn->mn_type) { in mqfs_fileno_free()
368 free_unr(mi->mi_unrhdr, mn->mn_fileno); in mqfs_fileno_free()
376 ("mqfs_fileno_free() called for unknown type node: %d", in mqfs_fileno_free()
377 mn->mn_type)); in mqfs_fileno_free()
389 mqnode_free(struct mqfs_node *node) in mqnode_free() argument
391 uma_zfree(mqnode_zone, node); in mqnode_free()
395 mqnode_addref(struct mqfs_node *node) in mqnode_addref() argument
397 atomic_add_int(&node->mn_refcount, 1); in mqnode_addref()
401 mqnode_release(struct mqfs_node *node) in mqnode_release() argument
406 mqfs = node->mn_info; in mqnode_release()
407 old = atomic_fetchadd_int(&node->mn_refcount, -1); in mqnode_release()
408 if (node->mn_type == mqfstype_dir || in mqnode_release()
409 node->mn_type == mqfstype_root) in mqnode_release()
414 int locked = sx_xlocked(&mqfs->mi_lock); in mqnode_release()
416 sx_xlock(&mqfs->mi_lock); in mqnode_release()
417 mqfs_destroy(node); in mqnode_release()
419 sx_xunlock(&mqfs->mi_lock); in mqnode_release()
424 * Add a node to a directory
427 mqfs_add_node(struct mqfs_node *parent, struct mqfs_node *node) in mqfs_add_node() argument
430 KASSERT(parent->mn_info != NULL, in mqfs_add_node()
432 KASSERT(parent->mn_type == mqfstype_dir || in mqfs_add_node()
433 parent->mn_type == mqfstype_root, in mqfs_add_node()
436 node->mn_info = parent->mn_info; in mqfs_add_node()
437 node->mn_parent = parent; in mqfs_add_node()
438 LIST_INIT(&node->mn_children); in mqfs_add_node()
439 LIST_INIT(&node->mn_vnodes); in mqfs_add_node()
440 LIST_INSERT_HEAD(&parent->mn_children, node, mn_sibling); in mqfs_add_node()
449 struct mqfs_node *node; in mqfs_create_node() local
451 node = mqnode_alloc(); in mqfs_create_node()
452 strncpy(node->mn_name, name, namelen); in mqfs_create_node()
453 node->mn_pr_root = cred->cr_prison->pr_root; in mqfs_create_node()
454 node->mn_type = nodetype; in mqfs_create_node()
455 node->mn_refcount = 1; in mqfs_create_node()
456 vfs_timestamp(&node->mn_birth); in mqfs_create_node()
457 node->mn_ctime = node->mn_atime = node->mn_mtime = in mqfs_create_node()
458 node->mn_birth; in mqfs_create_node()
459 node->mn_uid = cred->cr_uid; in mqfs_create_node()
460 node->mn_gid = cred->cr_gid; in mqfs_create_node()
461 node->mn_mode = mode; in mqfs_create_node()
462 return (node); in mqfs_create_node()
472 struct mqfs_node *node; in mqfs_create_file() local
474 node = mqfs_create_node(name, namelen, cred, mode, mqfstype_file); in mqfs_create_file()
475 if (mqfs_add_node(parent, node) != 0) { in mqfs_create_file()
476 mqnode_free(node); in mqfs_create_file()
479 return (node); in mqfs_create_file()
491 dir->mn_name[0] = '.'; in mqfs_fixup_dir()
492 dir->mn_type = mqfstype_this; in mqfs_fixup_dir()
493 dir->mn_refcount = 1; in mqfs_fixup_dir()
496 return (-1); in mqfs_fixup_dir()
500 dir->mn_name[0] = dir->mn_name[1] = '.'; in mqfs_fixup_dir()
501 dir->mn_type = mqfstype_parent; in mqfs_fixup_dir()
502 dir->mn_refcount = 1; in mqfs_fixup_dir()
506 return (-1); in mqfs_fixup_dir()
521 struct mqfs_node *node; in mqfs_create_dir() local
523 node = mqfs_create_node(name, namelen, cred, mode, mqfstype_dir); in mqfs_create_dir()
524 if (mqfs_add_node(parent, node) != 0) { in mqfs_create_dir()
525 mqnode_free(node); in mqfs_create_dir()
529 if (mqfs_fixup_dir(node) != 0) { in mqfs_create_dir()
530 mqfs_destroy(node); in mqfs_create_dir()
533 return (node); in mqfs_create_dir()
543 struct mqfs_node *node; in mqfs_create_link() local
545 node = mqfs_create_node(name, namelen, cred, mode, mqfstype_symlink); in mqfs_create_link()
546 if (mqfs_add_node(parent, node) != 0) { in mqfs_create_link()
547 mqnode_free(node); in mqfs_create_link()
550 return (node); in mqfs_create_link()
556 * Destroy a node or a tree of nodes
559 mqfs_destroy(struct mqfs_node *node) in mqfs_destroy() argument
563 KASSERT(node != NULL, in mqfs_destroy()
564 ("%s(): node is NULL", __func__)); in mqfs_destroy()
565 KASSERT(node->mn_info != NULL, in mqfs_destroy()
566 ("%s(): node has no mn_info", __func__)); in mqfs_destroy()
569 if (node->mn_type == mqfstype_dir || node->mn_type == mqfstype_root) in mqfs_destroy()
570 while (! LIST_EMPTY(&node->mn_children)) in mqfs_destroy()
571 mqfs_destroy(LIST_FIRST(&node->mn_children)); in mqfs_destroy()
574 if ((parent = node->mn_parent) != NULL) { in mqfs_destroy()
575 KASSERT(parent->mn_info == node->mn_info, in mqfs_destroy()
577 LIST_REMOVE(node, mn_sibling); in mqfs_destroy()
580 if (node->mn_fileno != 0) in mqfs_destroy()
581 mqfs_fileno_free(node->mn_info, node); in mqfs_destroy()
582 if (node->mn_data != NULL) in mqfs_destroy()
583 mqueue_free(node->mn_data); in mqfs_destroy()
584 mqnode_free(node); in mqfs_destroy()
596 if (mp->mnt_flag & MNT_UPDATE) in mqfs_mount()
599 mp->mnt_data = &mqfs_data; in mqfs_mount()
601 mp->mnt_flag |= MNT_LOCAL; in mqfs_mount()
605 sbp = &mp->mnt_stat; in mqfs_mount()
607 sbp->f_bsize = PAGE_SIZE; in mqfs_mount()
608 sbp->f_iosize = PAGE_SIZE; in mqfs_mount()
609 sbp->f_blocks = 1; in mqfs_mount()
610 sbp->f_bfree = 1; in mqfs_mount()
611 sbp->f_bavail = 0; in mqfs_mount()
612 sbp->f_files = 0; in mqfs_mount()
613 sbp->f_ffree = 0; in mqfs_mount()
640 ret = mqfs_allocv(mp, vpp, mqfs->mi_root); in mqfs_root()
676 sx_init(&mi->mi_lock, "mqfs lock"); in mqfs_init()
678 root = mqfs_create_node("/", 1, curthread->td_ucred, 01777, in mqfs_init()
680 root->mn_info = mi; in mqfs_init()
681 LIST_INIT(&root->mn_children); in mqfs_init()
682 LIST_INIT(&root->mn_vnodes); in mqfs_init()
683 mi->mi_root = root; in mqfs_init()
708 mqfs_destroy(mi->mi_root); in mqfs_uninit()
709 mi->mi_root = NULL; in mqfs_uninit()
711 sx_destroy(&mi->mi_lock); in mqfs_uninit()
744 mqfs = pn->mn_info; in mqfs_allocv()
746 sx_xlock(&mqfs->mi_lock); in mqfs_allocv()
747 LIST_FOREACH(vd, &pn->mn_vnodes, mv_link) { in mqfs_allocv()
748 if (vd->mv_vnode->v_mount == mp) { in mqfs_allocv()
749 vhold(vd->mv_vnode); in mqfs_allocv()
756 *vpp = vd->mv_vnode; in mqfs_allocv()
757 sx_xunlock(&mqfs->mi_lock); in mqfs_allocv()
762 sx_xunlock(&mqfs->mi_lock); in mqfs_allocv()
772 sx_xlock(&mqfs->mi_lock); in mqfs_allocv()
777 LIST_FOREACH(vd, &pn->mn_vnodes, mv_link) { in mqfs_allocv()
778 if (vd->mv_vnode->v_mount == mp) { in mqfs_allocv()
779 vhold(vd->mv_vnode); in mqfs_allocv()
780 sx_xunlock(&mqfs->mi_lock); in mqfs_allocv()
791 (*vpp)->v_data = vd; in mqfs_allocv()
792 vd->mv_vnode = *vpp; in mqfs_allocv()
793 vd->mv_node = pn; in mqfs_allocv()
794 TASK_INIT(&vd->mv_task, 0, do_recycle, *vpp); in mqfs_allocv()
795 LIST_INSERT_HEAD(&pn->mn_vnodes, vd, mv_link); in mqfs_allocv()
797 switch (pn->mn_type) { in mqfs_allocv()
799 (*vpp)->v_vflag = VV_ROOT; in mqfs_allocv()
804 (*vpp)->v_type = VDIR; in mqfs_allocv()
807 (*vpp)->v_type = VREG; in mqfs_allocv()
810 (*vpp)->v_type = VLNK; in mqfs_allocv()
813 KASSERT(0, ("mqfs_allocf called for null node\n")); in mqfs_allocv()
815 panic("%s has unexpected type: %d", pn->mn_name, pn->mn_type); in mqfs_allocv()
817 sx_xunlock(&mqfs->mi_lock); in mqfs_allocv()
826 mqfs_search(struct mqfs_node *pd, const char *name, int len, struct ucred *cred) in mqfs_search() argument
831 sx_assert(&pd->mn_info->mi_lock, SX_LOCKED); in mqfs_search()
832 pr_root = cred->cr_prison->pr_root; in mqfs_search()
833 LIST_FOREACH(pn, &pd->mn_children, mn_sibling) { in mqfs_search()
835 if ((pn->mn_pr_root == NULL || pn->mn_pr_root == pr_root) && in mqfs_search()
836 strncmp(pn->mn_name, name, len) == 0 && in mqfs_search()
837 pn->mn_name[len] == '\0') in mqfs_search()
851 struct mqfs_node *pd; in mqfs_lookupx() local
859 cnp = ap->a_cnp; in mqfs_lookupx()
860 vpp = ap->a_vpp; in mqfs_lookupx()
861 dvp = ap->a_dvp; in mqfs_lookupx()
862 pname = cnp->cn_nameptr; in mqfs_lookupx()
863 namelen = cnp->cn_namelen; in mqfs_lookupx()
864 flags = cnp->cn_flags; in mqfs_lookupx()
865 nameiop = cnp->cn_nameiop; in mqfs_lookupx()
866 pd = VTON(dvp); in mqfs_lookupx()
868 mqfs = pd->mn_info; in mqfs_lookupx()
871 if (dvp->v_type != VDIR) in mqfs_lookupx()
874 error = VOP_ACCESS(dvp, VEXEC, cnp->cn_cred, td); in mqfs_lookupx()
879 if (cnp->cn_namelen >= MQFS_NAMELEN) in mqfs_lookupx()
886 pn = pd; in mqfs_lookupx()
893 if (cnp->cn_flags & ISDOTDOT) { in mqfs_lookupx()
894 if (dvp->v_vflag & VV_ROOT) in mqfs_lookupx()
899 KASSERT(pd->mn_parent, ("non-root directory has no parent")); in mqfs_lookupx()
900 pn = pd->mn_parent; in mqfs_lookupx()
901 error = mqfs_allocv(dvp->v_mount, vpp, pn); in mqfs_lookupx()
906 /* named node */ in mqfs_lookupx()
907 sx_xlock(&mqfs->mi_lock); in mqfs_lookupx()
908 pn = mqfs_search(pd, pname, namelen, cnp->cn_cred); in mqfs_lookupx()
911 sx_xunlock(&mqfs->mi_lock); in mqfs_lookupx()
917 error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred, td); in mqfs_lookupx()
931 error = mqfs_allocv(dvp->v_mount, vpp, pn); in mqfs_lookupx()
933 if (error == 0 && cnp->cn_flags & MAKEENTRY) in mqfs_lookupx()
943 error = VOP_ACCESS(dvp, VWRITE, cnp->cn_cred, td); in mqfs_lookupx()
987 struct mqfs_info *mqfs = VFSTOMQFS(ap->a_dvp->v_mount); in mqfs_create()
988 struct componentname *cnp = ap->a_cnp; in mqfs_create()
989 struct mqfs_node *pd; in mqfs_create() local
994 pd = VTON(ap->a_dvp); in mqfs_create()
995 if (pd->mn_type != mqfstype_root && pd->mn_type != mqfstype_dir) in mqfs_create()
1000 sx_xlock(&mqfs->mi_lock); in mqfs_create()
1001 pn = mqfs_create_file(pd, cnp->cn_nameptr, cnp->cn_namelen, in mqfs_create()
1002 cnp->cn_cred, ap->a_vap->va_mode); in mqfs_create()
1004 sx_xunlock(&mqfs->mi_lock); in mqfs_create()
1008 sx_xunlock(&mqfs->mi_lock); in mqfs_create()
1009 error = mqfs_allocv(ap->a_dvp->v_mount, ap->a_vpp, pn); in mqfs_create()
1014 pn->mn_data = mq; in mqfs_create()
1031 sx_assert(&pn->mn_info->mi_lock, SX_LOCKED); in do_unlink()
1033 if (ucred->cr_uid != pn->mn_uid && in do_unlink()
1036 else if (!pn->mn_deleted) { in do_unlink()
1037 parent = pn->mn_parent; in do_unlink()
1038 pn->mn_parent = NULL; in do_unlink()
1039 pn->mn_deleted = 1; in do_unlink()
1041 LIST_FOREACH(vd, &pn->mn_vnodes, mv_link) { in do_unlink()
1042 cache_purge(vd->mv_vnode); in do_unlink()
1043 vhold(vd->mv_vnode); in do_unlink()
1044 taskqueue_enqueue(taskqueue_thread, &vd->mv_task); in do_unlink()
1067 struct mqfs_info *mqfs = VFSTOMQFS(ap->a_dvp->v_mount); in mqfs_remove()
1071 if (ap->a_vp->v_type == VDIR) in mqfs_remove()
1073 pn = VTON(ap->a_vp); in mqfs_remove()
1074 sx_xlock(&mqfs->mi_lock); in mqfs_remove()
1075 error = do_unlink(pn, ap->a_cnp->cn_cred); in mqfs_remove()
1076 sx_xunlock(&mqfs->mi_lock); in mqfs_remove()
1090 struct mqfs_node *pn = VTON(ap->a_vp); in mqfs_inactive()
1092 if (pn->mn_deleted) in mqfs_inactive()
1093 vrecycle(ap->a_vp); in mqfs_inactive()
1107 struct mqfs_info *mqfs = VFSTOMQFS(ap->a_vp->v_mount); in mqfs_reclaim()
1108 struct vnode *vp = ap->a_vp; in mqfs_reclaim()
1112 vd = vp->v_data; in mqfs_reclaim()
1113 pn = vd->mv_node; in mqfs_reclaim()
1114 sx_xlock(&mqfs->mi_lock); in mqfs_reclaim()
1115 vp->v_data = NULL; in mqfs_reclaim()
1118 sx_xunlock(&mqfs->mi_lock); in mqfs_reclaim()
1172 struct vnode *vp = ap->a_vp; in mqfs_access()
1176 error = VOP_GETATTR(vp, &vattr, ap->a_cred); in mqfs_access()
1179 error = vaccess(vp->v_type, vattr.va_mode, vattr.va_uid, vattr.va_gid, in mqfs_access()
1180 ap->a_accmode, ap->a_cred); in mqfs_access()
1199 struct vnode *vp = ap->a_vp; in mqfs_getattr()
1201 struct vattr *vap = ap->a_vap; in mqfs_getattr()
1204 vap->va_type = vp->v_type; in mqfs_getattr()
1205 vap->va_mode = pn->mn_mode; in mqfs_getattr()
1206 vap->va_nlink = 1; in mqfs_getattr()
1207 vap->va_uid = pn->mn_uid; in mqfs_getattr()
1208 vap->va_gid = pn->mn_gid; in mqfs_getattr()
1209 vap->va_fsid = vp->v_mount->mnt_stat.f_fsid.val[0]; in mqfs_getattr()
1210 vap->va_fileid = pn->mn_fileno; in mqfs_getattr()
1211 vap->va_size = 0; in mqfs_getattr()
1212 vap->va_blocksize = PAGE_SIZE; in mqfs_getattr()
1213 vap->va_bytes = vap->va_size = 0; in mqfs_getattr()
1214 vap->va_atime = pn->mn_atime; in mqfs_getattr()
1215 vap->va_mtime = pn->mn_mtime; in mqfs_getattr()
1216 vap->va_ctime = pn->mn_ctime; in mqfs_getattr()
1217 vap->va_birthtime = pn->mn_birth; in mqfs_getattr()
1218 vap->va_gen = 0; in mqfs_getattr()
1219 vap->va_flags = 0; in mqfs_getattr()
1220 vap->va_rdev = NODEV; in mqfs_getattr()
1221 vap->va_bytes = 0; in mqfs_getattr()
1222 vap->va_filerev = 0; in mqfs_getattr()
1249 vap = ap->a_vap; in mqfs_setattr()
1250 vp = ap->a_vp; in mqfs_setattr()
1251 if (vap->va_type != VNON || in mqfs_setattr()
1252 vap->va_nlink != VNOVAL || in mqfs_setattr()
1253 vap->va_fsid != VNOVAL || in mqfs_setattr()
1254 vap->va_fileid != VNOVAL || in mqfs_setattr()
1255 vap->va_blocksize != VNOVAL || in mqfs_setattr()
1256 (vap->va_flags != VNOVAL && vap->va_flags != 0) || in mqfs_setattr()
1257 vap->va_rdev != VNOVAL || in mqfs_setattr()
1258 (int)vap->va_bytes != VNOVAL || in mqfs_setattr()
1259 vap->va_gen != VNOVAL) { in mqfs_setattr()
1266 if (vap->va_uid == (uid_t)VNOVAL) in mqfs_setattr()
1267 uid = pn->mn_uid; in mqfs_setattr()
1269 uid = vap->va_uid; in mqfs_setattr()
1270 if (vap->va_gid == (gid_t)VNOVAL) in mqfs_setattr()
1271 gid = pn->mn_gid; in mqfs_setattr()
1273 gid = vap->va_gid; in mqfs_setattr()
1275 if (uid != pn->mn_uid || gid != pn->mn_gid) { in mqfs_setattr()
1280 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, td))) in mqfs_setattr()
1288 if ((ap->a_cred->cr_uid != pn->mn_uid || uid != pn->mn_uid || in mqfs_setattr()
1289 (gid != pn->mn_gid && !groupmember(gid, ap->a_cred))) && in mqfs_setattr()
1292 pn->mn_uid = uid; in mqfs_setattr()
1293 pn->mn_gid = gid; in mqfs_setattr()
1297 if (vap->va_mode != (mode_t)VNOVAL) { in mqfs_setattr()
1298 if (ap->a_cred->cr_uid != pn->mn_uid && in mqfs_setattr()
1301 pn->mn_mode = vap->va_mode; in mqfs_setattr()
1305 if (vap->va_atime.tv_sec != VNOVAL || vap->va_mtime.tv_sec != VNOVAL) { in mqfs_setattr()
1307 if ((error = VOP_ACCESS(vp, VADMIN, ap->a_cred, td)) && in mqfs_setattr()
1308 ((vap->va_vaflags & VA_UTIMES_NULL) == 0 || in mqfs_setattr()
1309 (error = VOP_ACCESS(vp, VWRITE, ap->a_cred, td)))) in mqfs_setattr()
1311 if (vap->va_atime.tv_sec != VNOVAL) { in mqfs_setattr()
1312 pn->mn_atime = vap->va_atime; in mqfs_setattr()
1314 if (vap->va_mtime.tv_sec != VNOVAL) { in mqfs_setattr()
1315 pn->mn_mtime = vap->va_mtime; in mqfs_setattr()
1320 vfs_timestamp(&pn->mn_ctime); in mqfs_setattr()
1342 struct vnode *vp = ap->a_vp; in mqfs_read()
1343 struct uio *uio = ap->a_uio; in mqfs_read()
1347 if (vp->v_type != VREG) in mqfs_read()
1352 "QSIZE:%-10ld MAXMSG:%-10ld CURMSG:%-10ld MSGSIZE:%-10ld\n", in mqfs_read()
1353 mq->mq_totalbytes, in mqfs_read()
1354 mq->mq_maxmsg, in mqfs_read()
1355 mq->mq_curmsgs, in mqfs_read()
1356 mq->mq_msgsize); in mqfs_read()
1357 buf[sizeof(buf)-1] = '\0'; in mqfs_read()
1383 struct mqfs_node *pd; in mqfs_readdir() local
1392 vp = ap->a_vp; in mqfs_readdir()
1393 mi = VFSTOMQFS(vp->v_mount); in mqfs_readdir()
1394 pd = VTON(vp); in mqfs_readdir()
1395 uio = ap->a_uio; in mqfs_readdir()
1397 if (vp->v_type != VDIR) in mqfs_readdir()
1400 if (uio->uio_offset < 0) in mqfs_readdir()
1403 if (ap->a_ncookies != NULL) { in mqfs_readdir()
1404 tmp_ncookies = ap->a_ncookies; in mqfs_readdir()
1405 *ap->a_ncookies = 0; in mqfs_readdir()
1406 ap->a_ncookies = NULL; in mqfs_readdir()
1412 pr_root = ap->a_cred->cr_prison->pr_root; in mqfs_readdir()
1413 sx_xlock(&mi->mi_lock); in mqfs_readdir()
1415 LIST_FOREACH(pn, &pd->mn_children, mn_sibling) { in mqfs_readdir()
1422 if (pn->mn_pr_root != NULL && pn->mn_pr_root != pr_root) in mqfs_readdir()
1424 if (!pn->mn_fileno) in mqfs_readdir()
1426 entry.d_fileno = pn->mn_fileno; in mqfs_readdir()
1428 for (i = 0; i < MQFS_NAMELEN - 1 && pn->mn_name[i] != '\0'; ++i) in mqfs_readdir()
1429 entry.d_name[i] = pn->mn_name[i]; in mqfs_readdir()
1431 switch (pn->mn_type) { in mqfs_readdir()
1445 panic("%s has unexpected node type: %d", pn->mn_name, in mqfs_readdir()
1446 pn->mn_type); in mqfs_readdir()
1449 if (entry.d_reclen > uio->uio_resid) in mqfs_readdir()
1451 if (offset >= uio->uio_offset) { in mqfs_readdir()
1458 sx_xunlock(&mi->mi_lock); in mqfs_readdir()
1460 uio->uio_offset = offset; in mqfs_readdir()
1463 ap->a_ncookies = tmp_ncookies; in mqfs_readdir()
1485 struct mqfs_info *mqfs = VFSTOMQFS(ap->a_dvp->v_mount); in mqfs_mkdir()
1486 struct componentname *cnp = ap->a_cnp; in mqfs_mkdir()
1487 struct mqfs_node *pd = VTON(ap->a_dvp); in mqfs_mkdir() local
1491 if (pd->mn_type != mqfstype_root && pd->mn_type != mqfstype_dir) in mqfs_mkdir()
1493 sx_xlock(&mqfs->mi_lock); in mqfs_mkdir()
1494 pn = mqfs_create_dir(pd, cnp->cn_nameptr, cnp->cn_namelen, in mqfs_mkdir()
1495 ap->a_vap->cn_cred, ap->a_vap->va_mode); in mqfs_mkdir()
1498 sx_xunlock(&mqfs->mi_lock); in mqfs_mkdir()
1502 error = mqfs_allocv(ap->a_dvp->v_mount, ap->a_vpp, pn); in mqfs_mkdir()
1522 struct mqfs_info *mqfs = VFSTOMQFS(ap->a_dvp->v_mount); in mqfs_rmdir()
1523 struct mqfs_node *pn = VTON(ap->a_vp); in mqfs_rmdir()
1526 if (pn->mn_type != mqfstype_dir) in mqfs_rmdir()
1529 sx_xlock(&mqfs->mi_lock); in mqfs_rmdir()
1530 if (pn->mn_deleted) { in mqfs_rmdir()
1531 sx_xunlock(&mqfs->mi_lock); in mqfs_rmdir()
1535 pt = LIST_FIRST(&pn->mn_children); in mqfs_rmdir()
1539 sx_xunlock(&mqfs->mi_lock); in mqfs_rmdir()
1542 pt = pn->mn_parent; in mqfs_rmdir()
1543 pn->mn_parent = NULL; in mqfs_rmdir()
1544 pn->mn_deleted = 1; in mqfs_rmdir()
1548 sx_xunlock(&mqfs->mi_lock); in mqfs_rmdir()
1549 cache_purge(ap->a_vp); in mqfs_rmdir()
1566 pr_root = pr->pr_root; in mqfs_prison_remove()
1567 if (pr->pr_parent->pr_root == pr_root) in mqfs_prison_remove()
1570 if (tpr != pr && tpr->pr_root == pr_root) in mqfs_prison_remove()
1578 LIST_FOREACH_SAFE(pn, &mqfs_data.mi_root->mn_children, in mqfs_prison_remove()
1580 if (pn->mn_pr_root == pr_root) in mqfs_prison_remove()
1581 (void)do_unlink(pn, curthread->td_ucred); in mqfs_prison_remove()
1598 TAILQ_INIT(&mq->mq_msgq); in mqueue_alloc()
1600 mq->mq_maxmsg = attr->mq_maxmsg; in mqueue_alloc()
1601 mq->mq_msgsize = attr->mq_msgsize; in mqueue_alloc()
1603 mq->mq_maxmsg = default_maxmsg; in mqueue_alloc()
1604 mq->mq_msgsize = default_msgsize; in mqueue_alloc()
1606 mtx_init(&mq->mq_mutex, "mqueue lock", NULL, MTX_DEF); in mqueue_alloc()
1607 knlist_init_mtx(&mq->mq_rsel.si_note, &mq->mq_mutex); in mqueue_alloc()
1608 knlist_init_mtx(&mq->mq_wsel.si_note, &mq->mq_mutex); in mqueue_alloc()
1621 while ((msg = TAILQ_FIRST(&mq->mq_msgq)) != NULL) { in mqueue_free()
1622 TAILQ_REMOVE(&mq->mq_msgq, msg, msg_link); in mqueue_free()
1626 mtx_destroy(&mq->mq_mutex); in mqueue_free()
1627 seldrain(&mq->mq_rsel); in mqueue_free()
1628 seldrain(&mq->mq_wsel); in mqueue_free()
1629 knlist_destroy(&mq->mq_rsel.si_note); in mqueue_free()
1630 knlist_destroy(&mq->mq_wsel.si_note); in mqueue_free()
1632 atomic_add_int(&curmq, -1); in mqueue_free()
1653 msg->msg_size = msg_size; in mqueue_loadmsg()
1654 msg->msg_prio = msg_prio; in mqueue_loadmsg()
1668 msg->msg_size); in mqueue_savemsg()
1670 error = copyout(&msg->msg_prio, msg_prio, sizeof(int)); in mqueue_savemsg()
1700 if (msg_len > mq->mq_msgsize) in mqueue_send()
1708 error = _mqueue_send(mq, msg, -1); in mqueue_send()
1723 error = _mqueue_send(mq, msg, -1); in mqueue_send()
1730 if (abs_timeout->tv_nsec >= 1000000000 || abs_timeout->tv_nsec < 0) { in mqueue_send()
1762 mtx_lock(&mq->mq_mutex); in _mqueue_send()
1763 while (mq->mq_curmsgs >= mq->mq_maxmsg && error == 0) { in _mqueue_send()
1765 mtx_unlock(&mq->mq_mutex); in _mqueue_send()
1768 mq->mq_senders++; in _mqueue_send()
1769 error = msleep(&mq->mq_senders, &mq->mq_mutex, in _mqueue_send()
1771 mq->mq_senders--; in _mqueue_send()
1775 if (mq->mq_curmsgs >= mq->mq_maxmsg) { in _mqueue_send()
1776 mtx_unlock(&mq->mq_mutex); in _mqueue_send()
1780 if (TAILQ_EMPTY(&mq->mq_msgq)) { in _mqueue_send()
1781 TAILQ_INSERT_HEAD(&mq->mq_msgq, msg, msg_link); in _mqueue_send()
1783 if (msg->msg_prio <= TAILQ_LAST(&mq->mq_msgq, msgq)->msg_prio) { in _mqueue_send()
1784 TAILQ_INSERT_TAIL(&mq->mq_msgq, msg, msg_link); in _mqueue_send()
1786 TAILQ_FOREACH(msg2, &mq->mq_msgq, msg_link) { in _mqueue_send()
1787 if (msg2->msg_prio < msg->msg_prio) in _mqueue_send()
1793 mq->mq_curmsgs++; in _mqueue_send()
1794 mq->mq_totalbytes += msg->msg_size; in _mqueue_send()
1795 if (mq->mq_receivers) in _mqueue_send()
1796 wakeup_one(&mq->mq_receivers); in _mqueue_send()
1797 else if (mq->mq_notifier != NULL) in _mqueue_send()
1799 if (mq->mq_flags & MQ_RSEL) { in _mqueue_send()
1800 mq->mq_flags &= ~MQ_RSEL; in _mqueue_send()
1801 selwakeup(&mq->mq_rsel); in _mqueue_send()
1803 KNOTE_LOCKED(&mq->mq_rsel.si_note, 0); in _mqueue_send()
1804 mtx_unlock(&mq->mq_mutex); in _mqueue_send()
1820 mtx_assert(&mq->mq_mutex, MA_OWNED); in mqueue_send_notification()
1821 nt = mq->mq_notifier; in mqueue_send_notification()
1822 if (nt->nt_sigev.sigev_notify != SIGEV_NONE) { in mqueue_send_notification()
1823 p = nt->nt_proc; in mqueue_send_notification()
1824 error = sigev_findtd(p, &nt->nt_sigev, &td); in mqueue_send_notification()
1826 mq->mq_notifier = NULL; in mqueue_send_notification()
1829 if (!KSI_ONQ(&nt->nt_ksi)) { in mqueue_send_notification()
1830 ksiginfo_set_sigev(&nt->nt_ksi, &nt->nt_sigev); in mqueue_send_notification()
1831 tdsendsignal(p, td, nt->nt_ksi.ksi_signo, &nt->nt_ksi); in mqueue_send_notification()
1835 mq->mq_notifier = NULL; in mqueue_send_notification()
1853 if (msg_len < mq->mq_msgsize) in mqueue_receive()
1858 error = _mqueue_recv(mq, &msg, -1); in mqueue_receive()
1873 error = _mqueue_recv(mq, &msg, -1); in mqueue_receive()
1880 if (abs_timeout->tv_nsec >= 1000000000 || abs_timeout->tv_nsec < 0) { in mqueue_receive()
1903 curthread->td_retval[0] = msg->msg_size; in mqueue_receive()
1904 curthread->td_retval[1] = 0; in mqueue_receive()
1918 mtx_lock(&mq->mq_mutex); in _mqueue_recv()
1919 while ((*msg = TAILQ_FIRST(&mq->mq_msgq)) == NULL && error == 0) { in _mqueue_recv()
1921 mtx_unlock(&mq->mq_mutex); in _mqueue_recv()
1924 mq->mq_receivers++; in _mqueue_recv()
1925 error = msleep(&mq->mq_receivers, &mq->mq_mutex, in _mqueue_recv()
1927 mq->mq_receivers--; in _mqueue_recv()
1933 TAILQ_REMOVE(&mq->mq_msgq, *msg, msg_link); in _mqueue_recv()
1934 mq->mq_curmsgs--; in _mqueue_recv()
1935 mq->mq_totalbytes -= (*msg)->msg_size; in _mqueue_recv()
1936 if (mq->mq_senders) in _mqueue_recv()
1937 wakeup_one(&mq->mq_senders); in _mqueue_recv()
1938 if (mq->mq_flags & MQ_WSEL) { in _mqueue_recv()
1939 mq->mq_flags &= ~MQ_WSEL; in _mqueue_recv()
1940 selwakeup(&mq->mq_wsel); in _mqueue_recv()
1942 KNOTE_LOCKED(&mq->mq_wsel.si_note, 0); in _mqueue_recv()
1944 if (mq->mq_notifier != NULL && mq->mq_receivers == 0 && in _mqueue_recv()
1945 !TAILQ_EMPTY(&mq->mq_msgq)) { in _mqueue_recv()
1948 mtx_unlock(&mq->mq_mutex); in _mqueue_recv()
1969 LIST_FOREACH(nt, &p->p_mqnotifier, nt_link) { in notifier_search()
1970 if (nt->nt_ksi.ksi_mqd == fd) in notifier_search()
1979 LIST_INSERT_HEAD(&p->p_mqnotifier, nt, nt_link); in notifier_insert()
1994 mtx_assert(&mq->mq_mutex, MA_OWNED); in notifier_remove()
1998 if (mq->mq_notifier == nt) in notifier_remove()
1999 mq->mq_notifier = NULL; in notifier_remove()
2000 sigqueue_take(&nt->nt_ksi); in notifier_remove()
2020 pdp = td->td_proc->p_pd; in kern_kmq_open()
2021 cmode = ((mode & ~pdp->pd_cmask) & ALLPERMS) & ~S_ISTXT; in kern_kmq_open()
2024 if (attr->mq_maxmsg <= 0 || attr->mq_maxmsg > maxmsg) in kern_kmq_open()
2026 if (attr->mq_msgsize <= 0 || attr->mq_msgsize > maxmsgsize) in kern_kmq_open()
2045 len--; in kern_kmq_open()
2060 pn = mqfs_search(mqfs_data.mi_root, path, len, td->td_ucred); in kern_kmq_open()
2070 path, len, td->td_ucred, in kern_kmq_open()
2080 pn->mn_data = mq; in kern_kmq_open()
2092 error = vaccess(VREG, pn->mn_mode, pn->mn_uid, in kern_kmq_open()
2093 pn->mn_gid, accmode, td->td_ucred); in kern_kmq_open()
2110 td->td_retval[0] = fd; in kern_kmq_open()
2124 if ((uap->flags & O_ACCMODE) == O_ACCMODE || uap->flags & O_EXEC) in sys_kmq_open()
2126 flags = FFLAGS(uap->flags); in sys_kmq_open()
2127 if ((flags & O_CREAT) != 0 && uap->attr != NULL) { in sys_kmq_open()
2128 error = copyin(uap->attr, &attr, sizeof(attr)); in sys_kmq_open()
2132 return (kern_kmq_open(td, uap->path, flags, uap->mode, in sys_kmq_open()
2133 uap->attr != NULL ? &attr : NULL)); in sys_kmq_open()
2147 error = copyinstr(uap->path, path, MQFS_NAMELEN + 1, NULL); in sys_kmq_unlink()
2156 len--; in sys_kmq_unlink()
2163 pn = mqfs_search(mqfs_data.mi_root, path, len, td->td_ucred); in sys_kmq_unlink()
2165 error = do_unlink(pn, td->td_ucred); in sys_kmq_unlink()
2187 if (&mqueueops != (*fpp)->f_ops) { in _getmq()
2191 pn = (*fpp)->f_data; in _getmq()
2195 *pmq = pn->mn_data; in _getmq()
2236 if (attr != NULL && (attr->mq_flags & ~O_NONBLOCK) != 0) in kern_kmq_setattr()
2241 oattr->mq_maxmsg = mq->mq_maxmsg; in kern_kmq_setattr()
2242 oattr->mq_msgsize = mq->mq_msgsize; in kern_kmq_setattr()
2243 oattr->mq_curmsgs = mq->mq_curmsgs; in kern_kmq_setattr()
2246 oflag = flag = fp->f_flag; in kern_kmq_setattr()
2248 flag |= (attr->mq_flags & O_NONBLOCK); in kern_kmq_setattr()
2249 } while (atomic_cmpset_int(&fp->f_flag, oflag, flag) == 0); in kern_kmq_setattr()
2251 oflag = fp->f_flag; in kern_kmq_setattr()
2252 oattr->mq_flags = (O_NONBLOCK & oflag); in kern_kmq_setattr()
2263 if (uap->attr != NULL) { in sys_kmq_setattr()
2264 error = copyin(uap->attr, &attr, sizeof(attr)); in sys_kmq_setattr()
2268 error = kern_kmq_setattr(td, uap->mqd, uap->attr != NULL ? &attr : NULL, in sys_kmq_setattr()
2270 if (error == 0 && uap->oattr != NULL) { in sys_kmq_setattr()
2272 error = copyout(&oattr, uap->oattr, sizeof(oattr)); in sys_kmq_setattr()
2289 waitok = (fp->f_flag & O_NONBLOCK) == 0; in kern_kmq_timedreceive()
2302 if (uap->abs_timeout != NULL) { in sys_kmq_timedreceive()
2303 error = copyin(uap->abs_timeout, &ets, sizeof(ets)); in sys_kmq_timedreceive()
2310 return (kern_kmq_timedreceive(td, uap->mqd, uap->msg_ptr, uap->msg_len, in sys_kmq_timedreceive()
2311 uap->msg_prio, abs_timeout)); in sys_kmq_timedreceive()
2326 waitok = (fp->f_flag & O_NONBLOCK) == 0; in kern_kmq_timedsend()
2339 if (uap->abs_timeout != NULL) { in sys_kmq_timedsend()
2340 error = copyin(uap->abs_timeout, &ets, sizeof(ets)); in sys_kmq_timedsend()
2347 return (kern_kmq_timedsend(td, uap->mqd, uap->msg_ptr, uap->msg_len, in sys_kmq_timedsend()
2348 uap->msg_prio, abs_timeout)); in sys_kmq_timedsend()
2363 if (sigev->sigev_notify != SIGEV_SIGNAL && in kern_kmq_notify()
2364 sigev->sigev_notify != SIGEV_THREAD_ID && in kern_kmq_notify()
2365 sigev->sigev_notify != SIGEV_NONE) in kern_kmq_notify()
2367 if ((sigev->sigev_notify == SIGEV_SIGNAL || in kern_kmq_notify()
2368 sigev->sigev_notify == SIGEV_THREAD_ID) && in kern_kmq_notify()
2369 !_SIG_VALID(sigev->sigev_signo)) in kern_kmq_notify()
2372 p = td->td_proc; in kern_kmq_notify()
2373 fdp = td->td_proc->p_fd; in kern_kmq_notify()
2397 mtx_lock(&mq->mq_mutex); in kern_kmq_notify()
2400 if (mq->mq_notifier != NULL) { in kern_kmq_notify()
2408 mtx_unlock(&mq->mq_mutex); in kern_kmq_notify()
2415 sigqueue_take(&nt->nt_ksi); in kern_kmq_notify()
2423 ksiginfo_init(&nt->nt_ksi); in kern_kmq_notify()
2424 nt->nt_ksi.ksi_flags |= KSI_INS | KSI_EXT; in kern_kmq_notify()
2425 nt->nt_ksi.ksi_code = SI_MESGQ; in kern_kmq_notify()
2426 nt->nt_proc = p; in kern_kmq_notify()
2427 nt->nt_ksi.ksi_mqd = mqd; in kern_kmq_notify()
2430 nt->nt_sigev = *sigev; in kern_kmq_notify()
2431 mq->mq_notifier = nt; in kern_kmq_notify()
2438 if (mq->mq_receivers == 0 && in kern_kmq_notify()
2439 !TAILQ_EMPTY(&mq->mq_msgq)) in kern_kmq_notify()
2445 mtx_unlock(&mq->mq_mutex); in kern_kmq_notify()
2460 if (uap->sigev == NULL) { in sys_kmq_notify()
2463 error = copyin(uap->sigev, &ev, sizeof(ev)); in sys_kmq_notify()
2468 return (kern_kmq_notify(td, uap->mqd, evp)); in sys_kmq_notify()
2478 fdp = td->td_proc->p_fd; in mqueue_fdclose()
2482 if (fp->f_ops == &mqueueops) { in mqueue_fdclose()
2484 mtx_lock(&mq->mq_mutex); in mqueue_fdclose()
2485 notifier_remove(td->td_proc, mq, fd); in mqueue_fdclose()
2488 if (mq->mq_flags & MQ_RSEL) { in mqueue_fdclose()
2489 mq->mq_flags &= ~MQ_RSEL; in mqueue_fdclose()
2490 selwakeup(&mq->mq_rsel); in mqueue_fdclose()
2492 if (mq->mq_flags & MQ_WSEL) { in mqueue_fdclose()
2493 mq->mq_flags &= ~MQ_WSEL; in mqueue_fdclose()
2494 selwakeup(&mq->mq_wsel); in mqueue_fdclose()
2496 mtx_unlock(&mq->mq_mutex); in mqueue_fdclose()
2508 fdp = p->p_fd; in mq_proc_exit()
2510 for (i = 0; i < fdp->fd_nfiles; ++i) { in mq_proc_exit()
2512 if (fp != NULL && fp->f_ops == &mqueueops) { in mq_proc_exit()
2514 mtx_lock(&mq->mq_mutex); in mq_proc_exit()
2516 mtx_unlock(&mq->mq_mutex); in mq_proc_exit()
2520 KASSERT(LIST_EMPTY(&p->p_mqnotifier), ("mq notifiers left")); in mq_proc_exit()
2530 mtx_lock(&mq->mq_mutex); in mqf_poll()
2532 if (mq->mq_curmsgs) { in mqf_poll()
2535 mq->mq_flags |= MQ_RSEL; in mqf_poll()
2536 selrecord(td, &mq->mq_rsel); in mqf_poll()
2540 if (mq->mq_curmsgs < mq->mq_maxmsg) in mqf_poll()
2543 mq->mq_flags |= MQ_WSEL; in mqf_poll()
2544 selrecord(td, &mq->mq_wsel); in mqf_poll()
2547 mtx_unlock(&mq->mq_mutex); in mqf_poll()
2556 fp->f_ops = &badfileops; in mqf_close()
2557 pn = fp->f_data; in mqf_close()
2558 fp->f_data = NULL; in mqf_close()
2568 struct mqfs_node *pn = fp->f_data; in mqf_stat()
2572 st->st_atim = pn->mn_atime; in mqf_stat()
2573 st->st_mtim = pn->mn_mtime; in mqf_stat()
2574 st->st_ctim = pn->mn_ctime; in mqf_stat()
2575 st->st_birthtim = pn->mn_birth; in mqf_stat()
2576 st->st_uid = pn->mn_uid; in mqf_stat()
2577 st->st_gid = pn->mn_gid; in mqf_stat()
2578 st->st_mode = S_IFIFO | pn->mn_mode; in mqf_stat()
2591 pn = fp->f_data; in mqf_chmod()
2593 error = vaccess(VREG, pn->mn_mode, pn->mn_uid, pn->mn_gid, VADMIN, in mqf_chmod()
2597 pn->mn_mode = mode & ACCESSPERMS; in mqf_chmod()
2611 pn = fp->f_data; in mqf_chown()
2613 if (uid == (uid_t)-1) in mqf_chown()
2614 uid = pn->mn_uid; in mqf_chown()
2615 if (gid == (gid_t)-1) in mqf_chown()
2616 gid = pn->mn_gid; in mqf_chown()
2617 if (((uid != pn->mn_uid && uid != active_cred->cr_uid) || in mqf_chown()
2618 (gid != pn->mn_gid && !groupmember(gid, active_cred))) && in mqf_chown()
2621 pn->mn_uid = uid; in mqf_chown()
2622 pn->mn_gid = gid; in mqf_chown()
2634 if (kn->kn_filter == EVFILT_READ) { in mqf_kqfilter()
2635 kn->kn_fop = &mq_rfiltops; in mqf_kqfilter()
2636 knlist_add(&mq->mq_rsel.si_note, kn, 0); in mqf_kqfilter()
2637 } else if (kn->kn_filter == EVFILT_WRITE) { in mqf_kqfilter()
2638 kn->kn_fop = &mq_wfiltops; in mqf_kqfilter()
2639 knlist_add(&mq->mq_wsel.si_note, kn, 0); in mqf_kqfilter()
2648 struct mqueue *mq = FPTOMQ(kn->kn_fp); in filt_mqdetach()
2650 if (kn->kn_filter == EVFILT_READ) in filt_mqdetach()
2651 knlist_remove(&mq->mq_rsel.si_note, kn, 0); in filt_mqdetach()
2652 else if (kn->kn_filter == EVFILT_WRITE) in filt_mqdetach()
2653 knlist_remove(&mq->mq_wsel.si_note, kn, 0); in filt_mqdetach()
2661 struct mqueue *mq = FPTOMQ(kn->kn_fp); in filt_mqread()
2663 mtx_assert(&mq->mq_mutex, MA_OWNED); in filt_mqread()
2664 return (mq->mq_curmsgs != 0); in filt_mqread()
2670 struct mqueue *mq = FPTOMQ(kn->kn_fp); in filt_mqwrite()
2672 mtx_assert(&mq->mq_mutex, MA_OWNED); in filt_mqwrite()
2673 return (mq->mq_curmsgs < mq->mq_maxmsg); in filt_mqwrite()
2680 kif->kf_type = KF_TYPE_MQUEUE; in mqf_fill_kinfo()
2735 .vfc_typenum = -1,
2760 to->mq_flags = from->mq_flags; in mq_attr_from32()
2761 to->mq_maxmsg = from->mq_maxmsg; in mq_attr_from32()
2762 to->mq_msgsize = from->mq_msgsize; in mq_attr_from32()
2763 to->mq_curmsgs = from->mq_curmsgs; in mq_attr_from32()
2770 to->mq_flags = from->mq_flags; in mq_attr_to32()
2771 to->mq_maxmsg = from->mq_maxmsg; in mq_attr_to32()
2772 to->mq_msgsize = from->mq_msgsize; in mq_attr_to32()
2773 to->mq_curmsgs = from->mq_curmsgs; in mq_attr_to32()
2783 if ((uap->flags & O_ACCMODE) == O_ACCMODE || uap->flags & O_EXEC) in freebsd32_kmq_open()
2785 flags = FFLAGS(uap->flags); in freebsd32_kmq_open()
2786 if ((flags & O_CREAT) != 0 && uap->attr != NULL) { in freebsd32_kmq_open()
2787 error = copyin(uap->attr, &attr32, sizeof(attr32)); in freebsd32_kmq_open()
2792 return (kern_kmq_open(td, uap->path, flags, uap->mode, in freebsd32_kmq_open()
2793 uap->attr != NULL ? &attr : NULL)); in freebsd32_kmq_open()
2803 if (uap->attr != NULL) { in freebsd32_kmq_setattr()
2804 error = copyin(uap->attr, &attr32, sizeof(attr32)); in freebsd32_kmq_setattr()
2809 error = kern_kmq_setattr(td, uap->mqd, uap->attr != NULL ? &attr : NULL, in freebsd32_kmq_setattr()
2811 if (error == 0 && uap->oattr != NULL) { in freebsd32_kmq_setattr()
2814 error = copyout(&oattr32, uap->oattr, sizeof(oattr32)); in freebsd32_kmq_setattr()
2827 if (uap->abs_timeout != NULL) { in freebsd32_kmq_timedsend()
2828 error = copyin(uap->abs_timeout, &ets32, sizeof(ets32)); in freebsd32_kmq_timedsend()
2837 return (kern_kmq_timedsend(td, uap->mqd, uap->msg_ptr, uap->msg_len, in freebsd32_kmq_timedsend()
2838 uap->msg_prio, abs_timeout)); in freebsd32_kmq_timedsend()
2849 if (uap->abs_timeout != NULL) { in freebsd32_kmq_timedreceive()
2850 error = copyin(uap->abs_timeout, &ets32, sizeof(ets32)); in freebsd32_kmq_timedreceive()
2859 return (kern_kmq_timedreceive(td, uap->mqd, uap->msg_ptr, uap->msg_len, in freebsd32_kmq_timedreceive()
2860 uap->msg_prio, abs_timeout)); in freebsd32_kmq_timedreceive()
2870 if (uap->sigev == NULL) { in freebsd32_kmq_notify()
2873 error = copyin(uap->sigev, &ev32, sizeof(ev32)); in freebsd32_kmq_notify()
2881 return (kern_kmq_notify(td, uap->mqd, evp)); in freebsd32_kmq_notify()