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 --> 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 | ||
− | |||
147번째 줄: | 146번째 줄: | ||
} | } | ||
page --> address_space | page --> address_space | ||
− | |||
page --> slab | page --> slab | ||
− | |||
172번째 줄: | 169번째 줄: | ||
address_space --> radix_tree_root | address_space --> radix_tree_root | ||
address_space --> rb_root | address_space --> rb_root | ||
− | |||
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]; | ||
} | } | ||
− | |||
256번째 줄: | 251번째 줄: | ||
inode --> mutex | inode --> mutex | ||
inode --> hlist_node | inode --> hlist_node | ||
− | |||
− | |||
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 --> delayed_work | scsi_cmnd --> delayed_work | ||
scsi_cmnd --> scsi_data_buffer | scsi_cmnd --> scsi_data_buffer | ||
646번째 줄: | 1,249번째 줄: | ||
} | } | ||
− | |||
− | |||
− | |||
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; | ||
} | } | ||
− | + | ||
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]; | ||
} | } | ||
− | |||
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]; | ||
} | } | ||
− | |||
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 --> 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; | ||
} | } | ||
− | |||
744번째 줄: | 1,340번째 줄: | ||
struct completion done; | struct completion done; | ||
} | } | ||
− | |||
wq_flusher --> completion | wq_flusher --> completion | ||
770번째 줄: | 1,365번째 줄: | ||
struct workqueue_struct *rescue_wq; | struct workqueue_struct *rescue_wq; | ||
} | } | ||
− | |||
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 --> 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 --> work_struct | pool_workqueue --> work_struct | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
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 --> 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 --> 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 현재 판