Function report

Linux Kernel

v5.5.9

Brick Technologies Co., Ltd

Source Code:fs\fcntl.c Create Date:2022-07-28 20:05:59
Last Modify:2020-03-12 14:18:49 Copyright©Brick
home page Tree
Annotation kernel can get tool activityDownload SCCTChinese

Name:send_sigio

Proto:void send_sigio(struct fown_struct *fown, int fd, int band)

Type:void

Parameter:

TypeParameterName
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  If Not pid Then Go to out_unlock_fown
791  If type <= PIDTYPE_TGID Then
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, PIDTYPE_PID)
794  If p Then send_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  Else
798  read_lock( & tasklist_lock)
799  Do
799  If ((pid) != NULL) Then cycle (({
799  cycle (({}), (p) = ({
799  typeof(({typeof(( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first))))________p1 = ({union{typeof(( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first))))__val;char __c[1];}__u;if (1)__read_once_size( & (( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first)))));Else  __read_once_size_nocheck( & (( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first)))));Do{}while (0);__u.__val;});((typeof( * ( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first)))) * )(________p1));}))____ptr = (({
799  typeof(( * ((struct hlist_node * * )( & ( & (pid)-> lists of tasks that use this pid [type])->first))))________p1 = ({
799  union{typeof(( * ((structhlist_node * * )( & first)))) __val;char __c[1];}__u
799  If 1 Then __read_once_size( & (( * ((structhlist_node * * )( & first)))), __c, size of *first )
799  Else __read_once_size_nocheck( & (( * ((structhlist_node * * )( & first)))), __c, size of *first )
799  Do
799  When 0 cycle
799  __val
799  })
799  }))
799  ____ptr ? ({
799  __mptr = ____ptr
799  Do
799  When 0 cycle
799  __mptr - __builtin_offsetof(typeof( * ((p))), pid_links[type])
799  }) : NULL
799  cycle (({}), (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)))));Else  __read_once_size_nocheck( & (( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))), __u.__c, sizeof(( * ((struct hlist_node * * )( & ( & ((p))->pid_links[type])->next)))));Do{}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  If 1 Then __read_once_size( & (( * ((structhlist_node * * )( & next)))), __c, size of *next )
799  Else __read_once_size_nocheck( & (( * ((structhlist_node * * )( & next)))), __c, size of *next )
799  Do
799  When 0 cycle
799  __val
799  })
799  }))
799  ____ptr ? ({
799  __mptr = ____ptr
799  Do
799  When 0 cycle
799  __mptr - __builtin_offsetof(typeof( * ((p))), pid_links[type])
799  }) : NULL
799  }))
801  If type == PIDTYPE_PID Then Break
801  When 0 cycle
802  read_unlock( & tasklist_lock)
804  out_unlock_fown :
805  read_unlock( & protects pid, uid, euid fields )
Caller
NameDescribe
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