SYTest

Retired DISLab
(버전 사이의 차이)
이동: 둘러보기, 찾기
 
(사용자 2명의 중간의 편집 5개 숨겨짐)
1번째 줄: 1번째 줄:
 
<uml>
 
<uml>
 +
page 2x2
  
 
class  Scsi_Host<< (S,#FF7700)/scsi/scsi_host.h >> {
 
class  Scsi_Host<< (S,#FF7700)/scsi/scsi_host.h >> {
65번째 줄: 66번째 줄:
 
unsigned long hostdata[0];
 
unsigned long hostdata[0];
 
}
 
}
Scsi_Host --> list_head
 
 
Scsi_Host --> scsi_host_cmd_pool
 
Scsi_Host --> scsi_host_cmd_pool
 
Scsi_Host --> mutex
 
Scsi_Host --> mutex
113번째 줄: 113번째 줄:
 
kmem_cache --> kmem_cache_cpu
 
kmem_cache --> kmem_cache_cpu
 
kmem_cache --> kmem_cache_order_objects
 
kmem_cache --> kmem_cache_order_objects
kmem_cache --> list_head
 
  
  
147번째 줄: 146번째 줄:
 
}
 
}
 
page --> address_space
 
page --> address_space
page --> list_head
 
 
page --> slab
 
page --> slab
page --> rcu_head
 
  
  
172번째 줄: 169번째 줄:
 
address_space --> radix_tree_root
 
address_space --> radix_tree_root
 
address_space --> rb_root
 
address_space --> rb_root
address_space --> list_head
 
 
address_space --> mutex
 
address_space --> mutex
 
address_space --> backing_dev_info
 
address_space --> backing_dev_info
192번째 줄: 188번째 줄:
 
unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
 
unsigned long tags[RADIX_TREE_MAX_TAGS][RADIX_TREE_TAG_LONGS];
 
}
 
}
radix_tree_node --> rcu_head
 
  
  
256번째 줄: 251번째 줄:
 
inode --> mutex
 
inode --> mutex
 
inode --> hlist_node
 
inode --> hlist_node
inode --> list_head
 
inode --> rcu_head
 
 
inode --> file_lock
 
inode --> file_lock
 +
 +
class inode_operations << (S,#77FF00)/linux/fs.h>> {
 +
struct dentry * (*lookup) (struct inode *,struct dentry *, unsigned int);
 +
void * (*follow_link) (struct dentry *, struct nameidata *);
 +
int (*permission) (struct inode *, int);
 +
struct posix_acl * (*get_acl)(struct inode *, int);
 +
(*readlink) (struct dentry *, char __user *,int) : int
 +
(*put_link) (struct dentry *, struct nameidata *, void *) : void
 +
int (*create) (struct inode *,struct dentry *, umode_t, bool);
 +
int (*link) (struct dentry *,struct inode *,struct dentry *);
 +
int (*unlink) (struct inode *,struct dentry *);
 +
int (*symlink) (struct inode *,struct dentry *,const char *);
 +
int (*mkdir) (struct inode *,struct dentry *,umode_t);
 +
int (*rmdir) (struct inode *,struct dentry *);
 +
int (*mknod) (struct inode *,struct dentry *,umode_t,dev_t);
 +
int (*rename) (struct inode *, struct dentry *, struct inode *, struct dentry *);
 +
int (*setattr) (struct dentry *, struct iattr *);
 +
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
 +
int (*setxattr) (struct dentry *, const char *,const void *,size_t,int);
 +
ssize_t (*getxattr) (struct dentry *, const char *, void *, size_t);
 +
ssize_t (*listxattr) (struct dentry *, char *, size_t);
 +
int (*removexattr) (struct dentry *, const char *);
 +
int (*fiemap)(struct inode *, struct fiemap_extent_info *, u64 start, u64 len);
 +
int (*update_time)(struct inode *, struct timespec *, int);
 +
int (*atomic_open)(struct inode *, struct dentry *, struct file *, unsigned open_flag, umode_t create_mode, int *opened);
 +
int (*tmpfile) (struct inode *, struct dentry *, umode_t);
 +
int (*set_acl)(struct inode *, struct posix_acl *, int);
 +
}
 +
inode_operations --> dentry
 +
inode_operations --> posix_acl
 +
 +
class dentry<< (S,#77FF00)/linux/dcache.h >> {
 +
d_flags : unsigned int
 +
d_seq : seqcount_t
 +
d_hash : struct hlist_bl_node
 +
struct dentry *d_parent;   
 +
struct qstr d_name;
 +
struct inode *d_inode;
 +
unsigned char d_iname[DNAME_INLINE_LEN]; 
 +
struct lockref d_lockref; 
 +
const struct dentry_operations *d_op;
 +
struct super_block *d_sb;   
 +
unsigned long d_time;     
 +
void *d_fsdata;               
 +
struct list_head d_lru;     
 +
union {
 +
struct list_head d_child;   
 +
struct rcu_head d_rcu;
 +
} d_u;
 +
struct list_head d_subdirs; 
 +
struct hlist_node d_alias;     
 +
}
 +
dentry --> hlist_bl_node
 +
dentry --> qstr
 +
dentry --> inode
 +
dentry --> lockref
 +
dentry --> super_block
 +
dentry --> hlist_node
 +
 +
 +
class hlist_bl_node << (S,#77FF00)/linux/list_bl.h >> {
 +
struct hlist_bl_node *next, **pprev;
 +
}
 +
 +
class qstr  << (S,#77FF00)/linux/dcache.h >> {
 +
union {
 +
struct {
 +
HASH_LEN_DECLARE;
 +
};
 +
u64 hash_len;
 +
};
 +
const unsigned char *name;
 +
}
 +
 +
class lockref << (S,#77FF00)/linux/lockref.h >> {
 +
struct {
 +
spinlock_t lock;
 +
unsigned int count;
 +
};
 +
}
 +
 +
 +
class posix_acl << (S,#77FF00)/linux/posix_acl.h >> {
 +
union {
 +
atomic_t a_refcount;
 +
struct rcu_head a_rcu;
 +
};
 +
unsigned int a_count;
 +
struct posix_acl_entry a_entries[0];
 +
}
 +
posix_acl --> posix_acl_entry
 +
 +
 +
class posix_acl_entry << (S,#77FF00)/linux/posix_acl.h >> {
 +
short e_tag;
 +
unsigned short e_perm;
 +
union {
 +
kuid_t e_uid;
 +
kgid_t e_gid;
 +
};
 +
}
 +
 +
 +
class super_block << (S,#77FF00)/linux/fs.h >> {
 +
struct list_head s_list; 
 +
dev_t  s_dev;     
 +
unsigned char s_blocksize_bits;
 +
unsigned long s_blocksize;
 +
loff_t s_maxbytes; 
 +
struct file_system_type *s_type;
 +
const struct super_operations *s_op;
 +
const struct dquot_operations *dq_op;
 +
const struct quotactl_ops *s_qcop;
 +
const struct export_operations *s_export_op;
 +
unsigned long s_flags;
 +
unsigned long s_magic;
 +
struct dentry *s_root;
 +
struct rw_semaphore s_umount;
 +
int s_count;
 +
atomic_t s_active;
 +
const struct xattr_handler **s_xattr;
 +
struct list_head s_inodes;   
 +
struct hlist_bl_head s_anon;       
 +
struct list_head s_mounts; 
 +
struct block_device *s_bdev;
 +
struct backing_dev_info *s_bdi;
 +
struct mtd_info *s_mtd;
 +
struct hlist_node s_instances;
 +
struct quota_info s_dquot;     
 +
struct sb_writers s_writers;
 +
char s_id[32];                       
 +
u8 s_uuid[16];                 
 +
void *s_fs_info;   
 +
unsigned int s_max_links;
 +
fmode_t s_mode;
 +
u32 s_time_gran;
 +
struct mutex s_vfs_rename_mutex;
 +
char *s_subtype;
 +
char __rcu *s_options;
 +
const struct dentry_operations *s_d_op;
 +
int cleancache_poolid;
 +
struct shrinker s_shrink;
 +
atomic_long_t s_remove_count;
 +
int s_readonly_remount;
 +
struct workqueue_struct *s_dio_done_wq;
 +
struct list_lru s_dentry_lru ____cacheline_aligned_in_smp;
 +
struct list_lru s_inode_lru ____cacheline_aligned_in_smp;
 +
struct rcu_head rcu;
 +
}
 +
super_block --> file_system_type
 +
super_block --> super_operations
 +
super_block --> dquot_operations
 +
super_block --> quotactl_ops
 +
super_block --> export_operations
 +
super_block --> xattr_handler
 +
super_block --> hlist_bl_head
 +
super_block --> block_device
 +
super_block --> backing_dev_info
 +
super_block --> mtd_info
 +
super_block --> quota_info
 +
super_block --> sb_writers
 +
super_block --> mutex
 +
super_block --> dentry_operations
 +
super_block --> shrinker
 +
super_block --> workqueue_struct
 +
super_block --> list_lru
 +
 +
class file_system_type << (S,#77FF00)/linux/fs.h >> {
 +
const char *name;
 +
int fs_flags;
 +
struct dentry *(*mount) (struct file_system_type *, int,
 +
const char *, void *);
 +
void (*kill_sb) (struct super_block *);
 +
struct module *owner;
 +
struct file_system_type * next;
 +
struct hlist_head fs_supers;
 +
struct lock_class_key s_lock_key;
 +
struct lock_class_key s_umount_key;
 +
struct lock_class_key s_vfs_rename_key;
 +
struct lock_class_key s_writers_key[SB_FREEZE_LEVELS];
 +
struct lock_class_key i_lock_key;
 +
struct lock_class_key i_mutex_key;
 +
struct lock_class_key i_mutex_dir_key;
 +
}
 +
file_system_type --> dentry
 +
file_system_type --> module
 +
file_system_type --> hlist_head
 +
file_system_type --> lock_class_key
 +
 +
 +
class module << (S,#77FF00)/mod/modpost.h >> {
 +
struct module *next;
 +
const char *name;
 +
int gpl_compatible;
 +
struct symbol *unres;
 +
int seen;
 +
int skip;
 +
int has_init;
 +
int has_cleanup;
 +
struct buffer dev_table_buf;
 +
char        srcversion[25];
 +
int is_dot_o;
 +
}
 +
module --> symbol
 +
module --> buffer
 +
 +
 +
class symbol << (S,#77FF00)/mod/modpost.h >> {
 +
struct symbol *next;
 +
struct module *module;
 +
unsigned int crc;
 +
int crc_valid;
 +
unsigned int weak:1;
 +
unsigned int vmlinux:1;
 +
unsigned int kernel:1;
 +
unsigned int preloaded:1; 
 +
enum export  export;
 +
char name[0];
 +
}
 +
symbol --> module
 +
 +
 +
class buffer << (S,#77FF00)/mod/modpost.h >> {
 +
char *p;
 +
int pos;
 +
int size;
 +
}
 +
 +
class hlist_head << (S,#77FF00)/linux/types.h >> {
 +
struct hlist_node *first;
 +
}
 +
hlist_head --> hlist_node
 +
 +
class lock_class_key << (S,#77FF00)/linux/lockdep.h >> {
 +
struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES];
 +
}
 +
lock_class_key --> lockdep_subclass_key
 +
 +
 +
class lockdep_subclass_key << (S,#77FF00)/linux/lockdep.h >> {
 +
char __one_byte;
 +
}
 +
 +
 +
class super_operations<< (S,#77FF00)/linux/fs.h >> {
 +
struct inode *(*alloc_inode)(struct super_block *sb);
 +
void (*destroy_inode)(struct inode *);
 +
void (*dirty_inode) (struct inode *, int flags);
 +
int (*write_inode) (struct inode *, struct writeback_control *wbc);
 +
int (*drop_inode) (struct inode *);
 +
void (*evict_inode) (struct inode *);
 +
void (*put_super) (struct super_block *);
 +
int (*sync_fs)(struct super_block *sb, int wait);
 +
int (*freeze_fs) (struct super_block *);
 +
int (*unfreeze_fs) (struct super_block *);
 +
int (*statfs) (struct dentry *, struct kstatfs *);
 +
int (*remount_fs) (struct super_block *, int *, char *);
 +
void (*umount_begin) (struct super_block *);
 +
int (*show_options)(struct seq_file *, struct dentry *);
 +
int (*show_devname)(struct seq_file *, struct dentry *);
 +
int (*show_path)(struct seq_file *, struct dentry *);
 +
int (*show_stats)(struct seq_file *, struct dentry *);
 +
}
 +
super_operations --> inode
 +
 +
 +
class dquot_operations << (S,#77FF00)/linust/quota.h >> {
 +
int (*write_dquot) (struct dquot *);            /* Ordinary dquot write */
 +
struct dquot *(*alloc_dquot)(struct super_block *, int);   
 +
void (*destroy_dquot)(struct dquot *);   
 +
int (*acquire_dquot) (struct dquot *);     
 +
int (*release_dquot) (struct dquot *);       
 +
int (*mark_dirty) (struct dquot *);         
 +
int (*write_info) (struct super_block *, int);
 +
qsize_t *(*get_reserved_space) (struct inode *);
 +
}
 +
dquot_operations --> dquot
 +
 +
 +
class dquot << (S,#77FF00/linust/quota.h) >> {
 +
struct hlist_node dq_hash; 
 +
struct list_head dq_inuse;   
 +
struct list_head dq_free; 
 +
struct list_head dq_dirty;   
 +
struct mutex dq_lock;   
 +
atomic_t dq_count;         
 +
wait_queue_head_t dq_wait_unused;     
 +
struct super_block *dq_sb; 
 +
struct kqid dq_id;           
 +
loff_t dq_off;               
 +
unsigned long dq_flags;     
 +
struct mem_dqblk dq_dqb;     
 +
}
 +
dquot --> hlist_node
 +
dquot --> mutex
 +
dquot --> super_block
 +
dquot --> kqid
 +
dquot --> mem_dqblk
 +
 +
class kqid << (S,#77FF00)/linust/quota.h >> {
 +
kuid_t uid;
 +
kgid_t gid;
 +
kprojid_t projid;
 +
}
 +
 +
class mem_dqblk << (S,#77FF00)/linust/quota.h >> {
 +
qsize_t dqb_bhardlimit;
 +
qsize_t dqb_bsoftlimit;
 +
qsize_t dqb_curspace;
 +
qsize_t dqb_rsvspace;
 +
qsize_t dqb_ihardlimit;
 +
qsize_t dqb_isoftlimit;
 +
qsize_t dqb_curinodes;
 +
time_t dqb_btime;     
 +
time_t dqb_itime;   
 +
}
 +
 +
 +
class quotactl_ops << (S,#77FF00))/linust/quota.h >> {
 +
int (*quota_on)(struct super_block *, int, int, struct path *);
 +
int (*quota_on_meta)(struct super_block *, int, int);
 +
int (*quota_off)(struct super_block *, int);
 +
int (*quota_sync)(struct super_block *, int);
 +
int (*get_info)(struct super_block *, int, struct if_dqinfo *);
 +
int (*set_info)(struct super_block *, int, struct if_dqinfo *);
 +
int (*get_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 +
int (*set_dqblk)(struct super_block *, struct kqid, struct fs_disk_quota *);
 +
int (*get_xstate)(struct super_block *, struct fs_quota_stat *);
 +
int (*set_xstate)(struct super_block *, unsigned int, int);
 +
int (*get_xstatev)(struct super_block *, struct fs_quota_statv *);
 +
}
 +
 +
class export_operations<< (S,#77FF00)/linux/exportfs.h >> {
 +
int (*encode_fh)(struct inode *inode, __u32 *fh, int *max_len, struct inode *parent);
 +
struct dentry * (*fh_to_dentry)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type);
 +
struct dentry * (*fh_to_parent)(struct super_block *sb, struct fid *fid, int fh_len, int fh_type);
 +
int (*get_name)(struct dentry *parent, char *name, struct dentry *child);
 +
struct dentry * (*get_parent)(struct dentry *child);
 +
int (*commit_metadata)(struct inode *inode);
 +
}
 +
export_operations --> dentry
 +
 +
class  xattr_handler<< (S,#77FF00)/linux/xattr.h >> {
 +
const char *prefix;
 +
int flags;      /* fs private flags passed back to the handlers */
 +
size_t (*list)(struct dentry *dentry, char *list, size_t list_size, const char *name, size_t name_len, int handler_flags);
 +
int (*get)(struct dentry *dentry, const char *name, void *buffer, size_t size, int handler_flags);
 +
int (*set)(struct dentry *dentry, const char *name, const void *buffer, size_t size, int flags, int handler_flags);
 +
}
 +
 +
 +
class hlist_bl_head << (S,#77FF00)/linust/list_bl.h >> {
 +
struct hlist_bl_node *first;
 +
}
 +
hlist_blk_head --> hlist_bl_node
 +
 +
 +
class block_device << (S,#77FF00)/linux/fs.h >> {
 +
dev_t bd_dev;  /* not a kdev_t - it's a search key */
 +
int bd_openers;
 +
struct inode * bd_inode;   
 +
struct super_block * bd_super;
 +
struct mutex bd_mutex;     
 +
struct list_head bd_inodes;
 +
void * bd_claiming;
 +
void * bd_holder;
 +
int bd_holders;
 +
bool bd_write_holder;
 +
struct block_device * bd_contains;
 +
unsigned bd_block_size;
 +
struct hd_struct * bd_part;
 +
unsigned bd_part_count;
 +
int bd_invalidated;
 +
struct gendisk * bd_disk;
 +
struct request_queue * bd_queue;
 +
struct list_head bd_list;
 +
unsigned long bd_private;
 +
int bd_fsfreeze_count;
 +
struct mutex bd_fsfreeze_mutex;
 +
}
 +
block_device --> inode
 +
block_device --> super_block
 +
block_device --> mutex
 +
block_device --> hd_struct
 +
block_device --> gendisk
 +
block_device --> request_queue
 +
 +
 +
class hd_struct<< (S,#77FF00)/linux/genhd.h >> {
 +
sector_t start_sect;
 +
sector_t nr_sects;
 +
seqcount_t nr_sects_seq;
 +
sector_t alignment_offset;
 +
unsigned int discard_alignment;
 +
struct device __dev;
 +
struct kobject *holder_dir;
 +
int policy, partno;
 +
struct partition_meta_info *info;
 +
unsigned long stamp;
 +
atomic_t in_flight[2];
 +
atomic_t ref;
 +
struct rcu_head rcu_head;
 +
}
 +
hd_struct --> device
 +
hd_struct --> kobject
 +
hd_struct --> partition_meta_info
 +
 +
 +
class kobject << (S,#77FF00)/linux/kobject.h >> {
 +
const char *name;
 +
struct list_head entry;
 +
struct kobject *parent;
 +
struct kset *kset;
 +
struct kobj_type *ktype;
 +
struct kernfs_node *sd;
 +
struct kref kref;
 +
unsigned int state_initialized:1;
 +
unsigned int state_in_sysfs:1;
 +
unsigned int state_add_uevent_sent:1;
 +
unsigned int state_remove_uevent_sent:1;
 +
unsigned int uevent_suppress:1;
 +
}
 +
kobject --> kset
 +
kobject --> kobj_type
 +
kobject --> kernfs_node
 +
kobject --> kref
 +
 +
 +
class kset << (S,#77FF00)/linux/kobject.h >> {
 +
struct list_head list;
 +
spinlock_t list_lock;
 +
struct kobject kobj;
 +
const struct kset_uevent_ops *uevent_ops;
 +
}
 +
kset --> kobject
 +
 +
class kobj_type << (S,#77FF00)/linux/kobject.h >> {
 +
void (*release)(struct kobject *kobj);
 +
const struct sysfs_ops *sysfs_ops;
 +
struct attribute **default_attrs;
 +
const struct kobj_ns_type_operations *(*child_ns_type)(struct kobject *kobj);
 +
const void *(*namespace)(struct kobject *kobj);
 +
}
 +
kobj_type --> sysfs_ops
 +
kobj_type --> attribute
 +
kobj_type --> kobj_ns_type_operations
 +
 +
 +
class sysfs_ops << (S,#77FF00)/linux/sysfs.h >> {
 +
ssize_t (*show)(struct kobject *, struct attribute *, char *);
 +
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
 +
}
 +
 +
 +
class attribute << (S,#77FF00)/linux/sysfs.h >> {
 +
const char              *name;
 +
umode_t                mode;
 +
}
 +
 +
 +
class kobj_ns_type_operations << (S,#77FF00)/linux/kobject_ns.h >> {
 +
enum kobj_ns_type type;
 +
bool (*current_may_mount)(void);
 +
void *(*grab_current_ns)(void);
 +
const void *(*netlink_ns)(struct sock *sk);
 +
const void *(*initial_ns)(void);
 +
void (*drop_ns)(void *);
 +
}
 +
 +
 +
class kernfs_node << (S,#77FF00)/linux/kernfs.h >> {
 +
atomic_t                count;
 +
atomic_t                active;
 +
struct kernfs_node      *parent;
 +
const char              *name;
 +
struct rb_node          rb;
 +
union {
 +
struct completion      *completion;
 +
struct kernfs_node      *removed_list;
 +
} u;
 +
const void              *ns;    /* namespace tag */
 +
unsigned int            hash;  /* ns + name hash */
 +
union {
 +
struct kernfs_elem_dir          dir;
 +
struct kernfs_elem_symlink      symlink;
 +
struct kernfs_elem_attr        attr;
 +
};
 +
void                    *priv;
 +
unsigned short          flags;
 +
umode_t                mode;
 +
unsigned int            ino;
 +
struct kernfs_iattrs    *iattr;
 +
}
 +
kernfs_node --> rb_node
 +
kernfs_node --> completion
 +
kernfs_node --> kernfs_elem_dir
 +
kernfs_node --> kernfs_symlink
 +
kernfs_node --> kernfs_elem_attr
 +
kernfs_node --> kernfs_iattrs
 +
 +
 +
class kref << (S,#77FF00)/linux/kobject.h>> {
 +
 +
}
 +
 +
 +
class partition_meta_info << (S,#77FF00) >> {
 +
 +
}
 +
 +
class gendisk << (S,#77FF00) >> {
 +
 +
}
 +
 +
 +
 +
class mtd_info << (S,#77FF00) >> {
 +
 +
}
 +
 +
class quota_info << (S,#77FF00) >> {
 +
 +
}
 +
 +
class sb_writers << (S,#77FF00) >> {
 +
 +
}
 +
 +
class dentry_operations << (S,#77FF00) >> {
 +
 +
}
 +
 +
class shrinker << (S,#77FF00) >> {
 +
 +
}
 +
 +
class list_lru << (S,#77FF00) >> {
 +
 +
}
 +
 +
 +
class backing_dev_info << (S,#77FF00) >> {
 +
 +
}
 +
 +
class timespec << (S,#77FF00)can't find >> {
 +
 +
}
 +
 +
class file_lock << (S,#77FF00)can't find >> {
 +
 +
}
 +
 +
class backing_dev_info << (S,#77FF00)can't find >> {
 +
 +
}
  
  
364번째 줄: 913번째 줄:
 
struct list_head all_q_node;
 
struct list_head all_q_node;
 
}
 
}
 
+
request_queue --> request
 +
request_queue --> elevator_queue
 +
request_queue --> request_list
 +
request_queue --> blk_mq_ops
 +
request_queue --> blk_mq_ctx
 +
request_queue --> delayed_work
 +
request_queue --> backing_dev_info
 +
request_queue --> kobject
 +
request_queue --> blk_queue_tag
 +
request_queue --> timer_list
 +
request_queue --> queue_limits
 +
request_queue --> mutex
 +
request_queue --> percpu_counter
  
  
400번째 줄: 961번째 줄:
 
bool offline:1;
 
bool offline:1;
 
}
 
}
 +
device --> device_private
 +
device --> kobject
 +
device --> device_type
 +
device --> mutex
 +
device --> bus_type
 +
device --> device_driver
 +
device --> dev_pm_info
 +
device --> dev_pm_domain
 +
device --> device_dma_parameters
 +
device --> dma_coherent_mem
 +
device --> dev_archdata
 +
device --> device_node
 +
device --> acpi_dev_node
 +
device --> klist_node
 +
device --> class
 +
device --> attribute_group
 +
device --> device
 +
device --> iommu_group
 +
  
  
409번째 줄: 989번째 줄:
 
const char *(* info)(struct Scsi_Host *);
 
const char *(* info)(struct Scsi_Host *);
 
int (* ioctl)(struct scsi_device *dev, int cmd, void __user *arg);
 
int (* ioctl)(struct scsi_device *dev, int cmd, void __user *arg);
 
 
}
 
}
 +
scsi_host_template --> module
  
  
432번째 줄: 1,012번째 줄:
 
struct bio_vec bi_inline_vecs[0];
 
struct bio_vec bi_inline_vecs[0];
 
}
 
}
 +
bio --> block_device
 +
bio --> bvec_iter
 +
bio --> bio_vec
 +
bio --> bio_set
  
  
438번째 줄: 1,022번째 줄:
 
struct bio *tail;
 
struct bio *tail;
 
}
 
}
 +
bio_list --> bio
  
  
495번째 줄: 1,080번째 줄:
 
struct request *next_rq;
 
struct request *next_rq;
 
}
 
}
 +
request --> call_single_data
 +
request --> work_struct
 +
request --> request_queue
 +
request --> blk_mq_ctx
 +
request --> bio
 +
request --> hlist_node
 +
request --> rb_node
 +
request --> io_cq
 +
request --> gendisk
 +
request --> hd_struct
 +
  
 
class blk_plug << (S,#FF7700)/linux/blkdev.h >> {
 
class blk_plug << (S,#FF7700)/linux/blkdev.h >> {
502번째 줄: 1,098번째 줄:
 
struct list_head cb_list;  
 
struct list_head cb_list;  
 
}
 
}
 +
blk_plug --> list_head
 +
  
 
class scsi_device << (S,#FF7700)/scsi/scsi_device >> {
 
class scsi_device << (S,#FF7700)/scsi/scsi_device >> {
586번째 줄: 1,184번째 줄:
 
unsigned int max_device_blocked;
 
unsigned int max_device_blocked;
 
}
 
}
 +
scsi_device --> Scsi_Host
 +
scsi_device --> request_queue
 +
scsi_device --> scsi_cmnd
 +
scsi_device --> scsi_target
 +
scsi_device --> work_struct
 +
  
 
class scsi_cmnd << (S,#FF7700)/scsi/scsi_cmnd.h >> {
 
class scsi_cmnd << (S,#FF7700)/scsi/scsi_cmnd.h >> {
616번째 줄: 1,220번째 줄:
 
scsi_cmnd --> scsi_pointer
 
scsi_cmnd --> scsi_pointer
 
scsi_cmnd --> scsi_device
 
scsi_cmnd --> scsi_device
scsi_cmnd --> list_head
 
 
scsi_cmnd --> delayed_work
 
scsi_cmnd --> delayed_work
 
scsi_cmnd --> scsi_data_buffer
 
scsi_cmnd --> scsi_data_buffer
646번째 줄: 1,249번째 줄:
 
}
 
}
  
class list_head << (S,#77FF00)/scripts/kconfig/list.h >> {
 
struct list_head *next, *prev;
 
}
 
  
 
class delayed_work << (S,#77FF00)/linux/workqueue.h >> {
 
class delayed_work << (S,#77FF00)/linux/workqueue.h >> {
666번째 줄: 1,266번째 줄:
 
work_func_t func;
 
work_func_t func;
 
}
 
}
work_struct --> list_head
+
 
  
 
class timer_list << (S,#77FF00)/linux/timer.h >> {
 
class timer_list << (S,#77FF00)/linux/timer.h >> {
699번째 줄: 1,299번째 줄:
 
struct list_head vec[TVR_SIZE];
 
struct list_head vec[TVR_SIZE];
 
}
 
}
tvec_root --> list_head
 
  
 
class tvec << (S,#77FF00)kernel/timer.c >> {
 
class tvec << (S,#77FF00)kernel/timer.c >> {
 
struct list_head vec[TVN_SIZE];
 
struct list_head vec[TVN_SIZE];
 
}
 
}
tvec --> list_head
 
  
 
class workqueue_struct << (S,#77FF00)/kernel/workqueue.c >> {
 
class workqueue_struct << (S,#77FF00)/kernel/workqueue.c >> {
723번째 줄: 1,321번째 줄:
 
struct pool_workqueue *dfl_pwq;
 
struct pool_workqueue *dfl_pwq;
 
}
 
}
workqueue_struct --> list_head
 
 
workqueue_struct --> mutex
 
workqueue_struct --> mutex
 
workqueue_struct --> wq_flusher
 
workqueue_struct --> wq_flusher
736번째 줄: 1,333번째 줄:
 
struct list_head wait_list;
 
struct list_head wait_list;
 
}
 
}
mutex --> list_head
 
  
  
744번째 줄: 1,340번째 줄:
 
struct completion done;     
 
struct completion done;     
 
}
 
}
wq_flusher --> list_head
 
 
wq_flusher --> completion
 
wq_flusher --> completion
  
770번째 줄: 1,365번째 줄:
 
struct workqueue_struct *rescue_wq;
 
struct workqueue_struct *rescue_wq;
 
}
 
}
worker --> list_head
 
 
worker --> hlist_node
 
worker --> hlist_node
 
worker --> work_struct
 
worker --> work_struct
795번째 줄: 1,389번째 줄:
 
struct timer_list mayday_timer;
 
struct timer_list mayday_timer;
 
}
 
}
worker_pool --> list_head
 
 
worker_pool --> timer_list
 
worker_pool --> timer_list
  
822번째 줄: 1,415번째 줄:
 
pool_workqueue --> worker_pool
 
pool_workqueue --> worker_pool
 
pool_workqueue --> workqueue_struct
 
pool_workqueue --> workqueue_struct
pool_workqueue --> list_head
 
 
pool_workqueue --> work_struct
 
pool_workqueue --> work_struct
pool_workqueue --> rcu_head
 
 
 
 
class rcu_head << (S,#77FF00)/linux/types.h >> {
 
#define rcu_head callback_head
 
}
 
rcu_head --> callback_head
 
  
  
951번째 줄: 1,535번째 줄:
 
task_struct --> sched_rt_entity
 
task_struct --> sched_rt_entity
 
task_struct --> sched_dl_entity
 
task_struct --> sched_dl_entity
task_struct --> list_head
 
 
task_struct --> pid_link
 
task_struct --> pid_link
 
task_struct --> completion
 
task_struct --> completion
970번째 줄: 1,553번째 줄:
 
task_struct --> io_context
 
task_struct --> io_context
 
task_struct --> task_io_accounting
 
task_struct --> task_io_accounting
task_struct --> rcu_head
 
 
task_struct --> pipe_inode_info
 
task_struct --> pipe_inode_info
 
task_struct --> page_frag
 
task_struct --> page_frag
  
  
 +
 +
class rcu_head << (S,#77FF00)/linux/types.h >> {
 +
#define rcu_head callback_head
 +
}
 +
note left: So many structs reference this. So I don't draw line to this.
 +
rcu_head --> callback_head
 +
 +
 +
class list_head << (S,#77FF00)/scripts/kconfig/list.h >> {
 +
struct list_head *next, *prev;
 +
}
 +
note left: So many structs reference this. So I don't draw line to this.
  
  
 
</uml>
 
</uml>

2014년 5월 14일 (수) 21:18 현재 판

개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기