6018 /*
6019 * Arrange to wake up the polling lwp when
6020 * the target process/lwp stops or terminates
6021 * or when the file descriptor becomes invalid.
6022 */
6023 pcp->prc_flags |= PRC_POLL;
6024 *phpp = php;
6025 }
6026 mutex_exit(&p->p_lock);
6027 return (0);
6028 }
6029
6030 /* in prioctl.c */
6031 extern int prioctl(vnode_t *, int, intptr_t, int, cred_t *, int *,
6032 caller_context_t *);
6033
6034 /*
6035 * /proc vnode operations vector
6036 */
6037 const fs_operation_def_t pr_vnodeops_template[] = {
6038 VOPNAME_OPEN, { .vop_open = propen },
6039 VOPNAME_CLOSE, { .vop_close = prclose },
6040 VOPNAME_READ, { .vop_read = prread },
6041 VOPNAME_WRITE, { .vop_write = prwrite },
6042 VOPNAME_IOCTL, { .vop_ioctl = prioctl },
6043 VOPNAME_GETATTR, { .vop_getattr = prgetattr },
6044 VOPNAME_ACCESS, { .vop_access = praccess },
6045 VOPNAME_LOOKUP, { .vop_lookup = prlookup },
6046 VOPNAME_CREATE, { .vop_create = prcreate },
6047 VOPNAME_READDIR, { .vop_readdir = prreaddir },
6048 VOPNAME_READLINK, { .vop_readlink = prreadlink },
6049 VOPNAME_FSYNC, { .vop_fsync = prfsync },
6050 VOPNAME_INACTIVE, { .vop_inactive = prinactive },
6051 VOPNAME_SEEK, { .vop_seek = prseek },
6052 VOPNAME_CMP, { .vop_cmp = prcmp },
6053 VOPNAME_FRLOCK, { .error = fs_error },
6054 VOPNAME_REALVP, { .vop_realvp = prrealvp },
6055 VOPNAME_POLL, { .vop_poll = prpoll },
6056 VOPNAME_DISPOSE, { .error = fs_error },
6057 VOPNAME_SHRLOCK, { .error = fs_error },
6058 NULL, NULL
6059 };
|
6018 /*
6019 * Arrange to wake up the polling lwp when
6020 * the target process/lwp stops or terminates
6021 * or when the file descriptor becomes invalid.
6022 */
6023 pcp->prc_flags |= PRC_POLL;
6024 *phpp = php;
6025 }
6026 mutex_exit(&p->p_lock);
6027 return (0);
6028 }
6029
6030 /* in prioctl.c */
6031 extern int prioctl(vnode_t *, int, intptr_t, int, cred_t *, int *,
6032 caller_context_t *);
6033
6034 /*
6035 * /proc vnode operations vector
6036 */
6037 const fs_operation_def_t pr_vnodeops_template[] = {
6038 { VOPNAME_OPEN, { .vop_open = propen } },
6039 { VOPNAME_CLOSE, { .vop_close = prclose } },
6040 { VOPNAME_READ, { .vop_read = prread } },
6041 { VOPNAME_WRITE, { .vop_write = prwrite } },
6042 { VOPNAME_IOCTL, { .vop_ioctl = prioctl } },
6043 { VOPNAME_GETATTR, { .vop_getattr = prgetattr } },
6044 { VOPNAME_ACCESS, { .vop_access = praccess } },
6045 { VOPNAME_LOOKUP, { .vop_lookup = prlookup } },
6046 { VOPNAME_CREATE, { .vop_create = prcreate } },
6047 { VOPNAME_READDIR, { .vop_readdir = prreaddir } },
6048 { VOPNAME_READLINK, { .vop_readlink = prreadlink } },
6049 { VOPNAME_FSYNC, { .vop_fsync = prfsync } },
6050 { VOPNAME_INACTIVE, { .vop_inactive = prinactive } },
6051 { VOPNAME_SEEK, { .vop_seek = prseek } },
6052 { VOPNAME_CMP, { .vop_cmp = prcmp } },
6053 { VOPNAME_FRLOCK, { .error = fs_error } },
6054 { VOPNAME_REALVP, { .vop_realvp = prrealvp } },
6055 { VOPNAME_POLL, { .vop_poll = prpoll } },
6056 { VOPNAME_DISPOSE, { .error = fs_error } },
6057 { VOPNAME_SHRLOCK, { .error = fs_error } },
6058 { NULL, { NULL } }
6059 };
|