函数逻辑报告

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\fcntl.c Create Date:2022-07-29 10:35:53
Last Modify:2020-03-12 14:18:49 Copyright©Brick
首页 函数Tree
注解内核,赢得工具下载SCCTEnglish

函数名称:send_sigio

函数原型:void send_sigio(struct fown_struct *fown, int fd, int band)

返回类型:void

参数:

类型参数名称
struct fown_struct *fown
intfd
intband
784  read_lock( & protects pid, uid, euid fields )
786  type等于 Kind of process group SIGIO should be sent to
787  pid等于 pid or -pgrp where SIGIO should be sent
788  如果非pid则转到:out_unlock_fown
791  如果type小于等于PIDTYPE_TGID
792  _read_lock() - mark the beginning of an RCU read-side critical section* When synchronize_rcu() is invoked on one CPU while other CPUs* are within RCU read-side critical sections, then the* synchronize_rcu() is guaranteed to block until after all the other
793  p等于pid_task(pid, 单一进程)
794  如果psend_sigio_to_task(p, fown, fd, band, type)
796  _read_unlock() - marks the end of an RCU read-side critical section.* In most situations, rcu_read_unlock() is immune from deadlock.* However, in kernels built with CONFIG_RCU_BOOST, rcu_read_unlock()
797  否则
798  read_lock( & tasklist_lock)
799  循环
799  如果((pid) != NULL)则循环(({
799  循环(({}), (p) = ({
799  typeof(({typeof(( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first))))________p1 = ({union{typeof(( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first))))__val;char __c[1];}__u;if (1)__read_once_size( & (( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first)))));否则 __read_once_size_nocheck( & (( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first)))));循环{}while (0);__u.__val;});((typeof( * ( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first)))) * )(________p1));}))____ptr = (({
799  typeof(( * ((struct hlist_node * * )( & ( & (pid)->进程属性列[type])->first))))________p1 = ({
799  union{typeof(( * ((structhlist_node * * )( & first)))) __val;char __c[1];}__u
799  如果1则__read_once_size( & (( * ((structhlist_node * * )( & first)))), __c, *first的长度)
799  否则__read_once_size_nocheck( & (( * ((structhlist_node * * )( & first)))), __c, *first的长度)
799  循环
799  当0循环
799  __val
799  })
799  }))
799  ____ptr ? ({
799  __mptr等于____ptr
799  循环
799  当0循环
799  __mptr__builtin_offsetof(typeof( * ((p))), pid_links[type])
799  }) : NULL
799  循环(({}), (p) = ({});(p);(p) = ({
799  typeof(({typeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next))))________p1 = ({union{typeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next))))__val;char __c[1];}__u;if (1)__read_once_size( & (( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))));否则 __read_once_size_nocheck( & (( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))));循环{}while (0);__u.__val;});((typeof( * ( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))) * )(________p1));}))____ptr = (({
799  typeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next))))________p1 = ({
799  union{typeof(( * ((structhlist_node * * )( & next)))) __val;char __c[1];}__u
799  如果1则__read_once_size( & (( * ((structhlist_node * * )( & next)))), __c, *next的长度)
799  否则__read_once_size_nocheck( & (( * ((structhlist_node * * )( & next)))), __c, *next的长度)
799  循环
799  当0循环
799  __val
799  })
799  }))
799  ____ptr ? ({
799  __mptr等于____ptr
799  循环
799  当0循环
799  __mptr__builtin_offsetof(typeof( * ((p))), pid_links[type])
799  }) : NULL
799  }))
801  如果type恒等于单一进程退出
801  当0循环
802  read_unlock( & tasklist_lock)
804  out_unlock_fown :
805  read_unlock( & protects pid, uid, euid fields )
调用者
名称描述
kill_fasync_rcu_read_lock() is held
dnotify_handle_eventMains fsnotify call where events are delivered to dnotify.* Find the dnotify mark on the relevant inode, run the list of dnotify structs* on that mark and determine which of them has expressed interest in receiving* events of this type