• Home
  • Raw
  • Download

Lines Matching refs:info

90 static void remove_notification(struct mqueue_inode_info *info);
120 static int msg_insert(struct msg_msg *msg, struct mqueue_inode_info *info) in msg_insert() argument
125 p = &info->msg_tree.rb_node; in msg_insert()
137 if (info->node_cache) { in msg_insert()
138 leaf = info->node_cache; in msg_insert()
139 info->node_cache = NULL; in msg_insert()
148 rb_insert_color(&leaf->rb_node, &info->msg_tree); in msg_insert()
150 info->attr.mq_curmsgs++; in msg_insert()
151 info->qsize += msg->m_ts; in msg_insert()
156 static inline struct msg_msg *msg_get(struct mqueue_inode_info *info) in msg_get() argument
163 p = &info->msg_tree.rb_node; in msg_get()
174 if (info->attr.mq_curmsgs) { in msg_get()
178 info->attr.mq_curmsgs = 0; in msg_get()
187 rb_erase(&leaf->rb_node, &info->msg_tree); in msg_get()
188 if (info->node_cache) { in msg_get()
191 info->node_cache = leaf; in msg_get()
199 rb_erase(&leaf->rb_node, &info->msg_tree); in msg_get()
200 if (info->node_cache) { in msg_get()
203 info->node_cache = leaf; in msg_get()
207 info->attr.mq_curmsgs--; in msg_get()
208 info->qsize -= msg->m_ts; in msg_get()
231 struct mqueue_inode_info *info; in mqueue_get_inode() local
237 info = MQUEUE_I(inode); in mqueue_get_inode()
238 spin_lock_init(&info->lock); in mqueue_get_inode()
239 init_waitqueue_head(&info->wait_q); in mqueue_get_inode()
240 INIT_LIST_HEAD(&info->e_wait_q[0].list); in mqueue_get_inode()
241 INIT_LIST_HEAD(&info->e_wait_q[1].list); in mqueue_get_inode()
242 info->notify_owner = NULL; in mqueue_get_inode()
243 info->notify_user_ns = NULL; in mqueue_get_inode()
244 info->qsize = 0; in mqueue_get_inode()
245 info->user = NULL; /* set when all is ok */ in mqueue_get_inode()
246 info->msg_tree = RB_ROOT; in mqueue_get_inode()
247 info->node_cache = NULL; in mqueue_get_inode()
248 memset(&info->attr, 0, sizeof(info->attr)); in mqueue_get_inode()
249 info->attr.mq_maxmsg = min(ipc_ns->mq_msg_max, in mqueue_get_inode()
251 info->attr.mq_msgsize = min(ipc_ns->mq_msgsize_max, in mqueue_get_inode()
254 info->attr.mq_maxmsg = attr->mq_maxmsg; in mqueue_get_inode()
255 info->attr.mq_msgsize = attr->mq_msgsize; in mqueue_get_inode()
270 mq_treesize = info->attr.mq_maxmsg * sizeof(struct msg_msg) + in mqueue_get_inode()
271 min_t(unsigned int, info->attr.mq_maxmsg, MQ_PRIO_MAX) * in mqueue_get_inode()
274 mq_bytes = mq_treesize + (info->attr.mq_maxmsg * in mqueue_get_inode()
275 info->attr.mq_msgsize); in mqueue_get_inode()
289 info->user = get_uid(u); in mqueue_get_inode()
370 struct mqueue_inode_info *info; in mqueue_evict_inode() local
382 info = MQUEUE_I(inode); in mqueue_evict_inode()
383 spin_lock(&info->lock); in mqueue_evict_inode()
384 while ((msg = msg_get(info)) != NULL) in mqueue_evict_inode()
386 kfree(info->node_cache); in mqueue_evict_inode()
387 spin_unlock(&info->lock); in mqueue_evict_inode()
390 mq_treesize = info->attr.mq_maxmsg * sizeof(struct msg_msg) + in mqueue_evict_inode()
391 min_t(unsigned int, info->attr.mq_maxmsg, MQ_PRIO_MAX) * in mqueue_evict_inode()
394 mq_bytes = mq_treesize + (info->attr.mq_maxmsg * in mqueue_evict_inode()
395 info->attr.mq_msgsize); in mqueue_evict_inode()
397 user = info->user; in mqueue_evict_inode()
482 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); in mqueue_read_file() local
486 spin_lock(&info->lock); in mqueue_read_file()
489 info->qsize, in mqueue_read_file()
490 info->notify_owner ? info->notify.sigev_notify : 0, in mqueue_read_file()
491 (info->notify_owner && in mqueue_read_file()
492 info->notify.sigev_notify == SIGEV_SIGNAL) ? in mqueue_read_file()
493 info->notify.sigev_signo : 0, in mqueue_read_file()
494 pid_vnr(info->notify_owner)); in mqueue_read_file()
495 spin_unlock(&info->lock); in mqueue_read_file()
509 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); in mqueue_flush_file() local
511 spin_lock(&info->lock); in mqueue_flush_file()
512 if (task_tgid(current) == info->notify_owner) in mqueue_flush_file()
513 remove_notification(info); in mqueue_flush_file()
515 spin_unlock(&info->lock); in mqueue_flush_file()
521 struct mqueue_inode_info *info = MQUEUE_I(file_inode(filp)); in mqueue_poll_file() local
524 poll_wait(filp, &info->wait_q, poll_tab); in mqueue_poll_file()
526 spin_lock(&info->lock); in mqueue_poll_file()
527 if (info->attr.mq_curmsgs) in mqueue_poll_file()
530 if (info->attr.mq_curmsgs < info->attr.mq_maxmsg) in mqueue_poll_file()
532 spin_unlock(&info->lock); in mqueue_poll_file()
538 static void wq_add(struct mqueue_inode_info *info, int sr, in wq_add() argument
545 list_for_each_entry(walk, &info->e_wait_q[sr].list, list) { in wq_add()
551 list_add_tail(&ewp->list, &info->e_wait_q[sr].list); in wq_add()
559 static int wq_sleep(struct mqueue_inode_info *info, int sr, in wq_sleep() argument
565 wq_add(info, sr, ewp); in wq_sleep()
570 spin_unlock(&info->lock); in wq_sleep()
578 spin_lock(&info->lock); in wq_sleep()
594 spin_unlock(&info->lock); in wq_sleep()
603 struct mqueue_inode_info *info, int sr) in wq_get_first_waiter() argument
607 ptr = info->e_wait_q[sr].list.prev; in wq_get_first_waiter()
608 if (ptr == &info->e_wait_q[sr].list) in wq_get_first_waiter()
622 static void __do_notify(struct mqueue_inode_info *info) in __do_notify() argument
629 if (info->notify_owner && in __do_notify()
630 info->attr.mq_curmsgs == 1) { in __do_notify()
632 switch (info->notify.sigev_notify) { in __do_notify()
638 sig_i.si_signo = info->notify.sigev_signo; in __do_notify()
641 sig_i.si_value = info->notify.sigev_value; in __do_notify()
645 ns_of_pid(info->notify_owner)); in __do_notify()
646 sig_i.si_uid = from_kuid_munged(info->notify_user_ns, current_uid()); in __do_notify()
649 kill_pid_info(info->notify.sigev_signo, in __do_notify()
650 &sig_i, info->notify_owner); in __do_notify()
653 set_cookie(info->notify_cookie, NOTIFY_WOKENUP); in __do_notify()
654 netlink_sendskb(info->notify_sock, info->notify_cookie); in __do_notify()
658 put_pid(info->notify_owner); in __do_notify()
659 put_user_ns(info->notify_user_ns); in __do_notify()
660 info->notify_owner = NULL; in __do_notify()
661 info->notify_user_ns = NULL; in __do_notify()
663 wake_up(&info->wait_q); in __do_notify()
678 static void remove_notification(struct mqueue_inode_info *info) in remove_notification() argument
680 if (info->notify_owner != NULL && in remove_notification()
681 info->notify.sigev_notify == SIGEV_THREAD) { in remove_notification()
682 set_cookie(info->notify_cookie, NOTIFY_REMOVED); in remove_notification()
683 netlink_sendskb(info->notify_sock, info->notify_cookie); in remove_notification()
685 put_pid(info->notify_owner); in remove_notification()
686 put_user_ns(info->notify_user_ns); in remove_notification()
687 info->notify_owner = NULL; in remove_notification()
688 info->notify_user_ns = NULL; in remove_notification()
918 struct mqueue_inode_info *info, in pipelined_send() argument
939 struct mqueue_inode_info *info) in pipelined_receive() argument
941 struct ext_wait_queue *sender = wq_get_first_waiter(info, SEND); in pipelined_receive()
945 wake_up_interruptible(&info->wait_q); in pipelined_receive()
948 if (msg_insert(sender->msg, info)) in pipelined_receive()
965 struct mqueue_inode_info *info; in SYSCALL_DEFINE5() local
995 info = MQUEUE_I(inode); in SYSCALL_DEFINE5()
1003 if (unlikely(msg_len > info->attr.mq_msgsize)) { in SYSCALL_DEFINE5()
1023 if (!info->node_cache) in SYSCALL_DEFINE5()
1026 spin_lock(&info->lock); in SYSCALL_DEFINE5()
1028 if (!info->node_cache && new_leaf) { in SYSCALL_DEFINE5()
1031 info->node_cache = new_leaf; in SYSCALL_DEFINE5()
1037 if (info->attr.mq_curmsgs == info->attr.mq_maxmsg) { in SYSCALL_DEFINE5()
1044 ret = wq_sleep(info, SEND, timeout, &wait); in SYSCALL_DEFINE5()
1052 receiver = wq_get_first_waiter(info, RECV); in SYSCALL_DEFINE5()
1054 pipelined_send(&wake_q, info, msg_ptr, receiver); in SYSCALL_DEFINE5()
1057 ret = msg_insert(msg_ptr, info); in SYSCALL_DEFINE5()
1060 __do_notify(info); in SYSCALL_DEFINE5()
1066 spin_unlock(&info->lock); in SYSCALL_DEFINE5()
1085 struct mqueue_inode_info *info; in SYSCALL_DEFINE5() local
1111 info = MQUEUE_I(inode); in SYSCALL_DEFINE5()
1120 if (unlikely(msg_len < info->attr.mq_msgsize)) { in SYSCALL_DEFINE5()
1130 if (!info->node_cache) in SYSCALL_DEFINE5()
1133 spin_lock(&info->lock); in SYSCALL_DEFINE5()
1135 if (!info->node_cache && new_leaf) { in SYSCALL_DEFINE5()
1138 info->node_cache = new_leaf; in SYSCALL_DEFINE5()
1143 if (info->attr.mq_curmsgs == 0) { in SYSCALL_DEFINE5()
1145 spin_unlock(&info->lock); in SYSCALL_DEFINE5()
1150 ret = wq_sleep(info, RECV, timeout, &wait); in SYSCALL_DEFINE5()
1156 msg_ptr = msg_get(info); in SYSCALL_DEFINE5()
1162 pipelined_receive(&wake_q, info); in SYSCALL_DEFINE5()
1163 spin_unlock(&info->lock); in SYSCALL_DEFINE5()
1195 struct mqueue_inode_info *info; in SYSCALL_DEFINE2() local
1275 info = MQUEUE_I(inode); in SYSCALL_DEFINE2()
1278 spin_lock(&info->lock); in SYSCALL_DEFINE2()
1280 if (info->notify_owner == task_tgid(current)) { in SYSCALL_DEFINE2()
1281 remove_notification(info); in SYSCALL_DEFINE2()
1284 } else if (info->notify_owner != NULL) { in SYSCALL_DEFINE2()
1289 info->notify.sigev_notify = SIGEV_NONE; in SYSCALL_DEFINE2()
1292 info->notify_sock = sock; in SYSCALL_DEFINE2()
1293 info->notify_cookie = nc; in SYSCALL_DEFINE2()
1296 info->notify.sigev_notify = SIGEV_THREAD; in SYSCALL_DEFINE2()
1299 info->notify.sigev_signo = notification.sigev_signo; in SYSCALL_DEFINE2()
1300 info->notify.sigev_value = notification.sigev_value; in SYSCALL_DEFINE2()
1301 info->notify.sigev_notify = SIGEV_SIGNAL; in SYSCALL_DEFINE2()
1305 info->notify_owner = get_pid(task_tgid(current)); in SYSCALL_DEFINE2()
1306 info->notify_user_ns = get_user_ns(current_user_ns()); in SYSCALL_DEFINE2()
1309 spin_unlock(&info->lock); in SYSCALL_DEFINE2()
1329 struct mqueue_inode_info *info; in SYSCALL_DEFINE3() local
1349 info = MQUEUE_I(inode); in SYSCALL_DEFINE3()
1351 spin_lock(&info->lock); in SYSCALL_DEFINE3()
1353 omqstat = info->attr; in SYSCALL_DEFINE3()
1367 spin_unlock(&info->lock); in SYSCALL_DEFINE3()