io trave

io travle

Get Started. It's Free
or sign up with your email address
io trave by Mind Map: io trave

1. address_space

1.1. *inode

1.2. *radix_tree_root

1.2.1. (page in page cache)

1.3. *address_space_operations

1.3.1. *writepage()

1.3.2. *readpage()

1.3.2.1. submit_bio

1.3.2.1.1. bio

1.3.2.1.2. generic_make_request

1.3.3. *set_page_dirty()

1.3.4. *migratepage()

1.3.5. *readpages()

2. file

2.1. f_mapping

2.2. f_inode

2.3. f_path

2.3.1. vfsmount

2.3.2. dentry

2.4. *f_op

2.4.1. *read

2.4.1.1. [fs_wrapper]generic_file_read_iter

2.4.1.1.1. do_generic_file_read

2.4.2. *write

2.4.3. *llseet

2.4.4. *open

2.4.5. ...

3. files_struct

3.1. fdtable fdtab

3.1.1. **fd

3.1.2. *close_on_exec

3.1.3. *open_fds

3.1.4. *full_fds_bits

3.2. close_on_exec_init

3.3. open_fds_init

3.4. full_fds_bits_init

4. task_struct

4.1. files

4.2. plug

5. SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count)

5.1. 1 fdget_pos

5.1.1. __fget_light

5.1.1.1. current->files

5.2. 2 vfs_read(f.file, buf, count, &pos)

5.2.1. file->f_op->read

5.3. 3 file_pos_write

6. sys_opoen

6.1. SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)

6.1.1. *do_sys_open

6.1.1.1. * build_open_flags- [build &op ]

6.1.1.2. *getname

6.1.1.2.1. getname_flags

6.1.1.3. *get_unused_fd_flags

6.1.1.3.1. __alloc_fd(current->files, 0, rlimit(RLIMIT_NOFILE), flags)

6.1.1.4. *do_filp_open

6.1.1.4.1. set_nameidata

6.1.1.4.2. path_openat

6.1.1.5. fd_install

7. nameidata

7.1. path

7.1.1. vfsmount *mnt

7.1.1.1. sb

7.1.1.2. sb_dentry

7.1.2. dentry

7.1.2.1. d_inode

7.1.2.2. dentry *d_parent

7.1.2.3. char d_iname[DNAME_INLINE_LEN]

7.1.2.4. qstr d_name

7.1.2.5. super_block *d_sb

7.2. inode

7.3. filename

7.4. root[path]

8. User land : ssize_t read(int fd, void *buf, size_t count)

9. request_queue

9.1. *request_fn

9.1.1. [while ]rq=blk_fetch_request(q)

9.1.1.1. blk_peek_request

9.1.1.1.1. __elv_next_request

9.1.1.2. blk_fetch_request

9.1.1.2.1. blk_dequeue_request

9.1.2. blk_end_request_all(rq, rv);

9.2. *make_request_fn

9.2.1. *blk_queue_bio(q,bio)

9.2.1.1. blk_queue_split

9.2.1.1.1. generic_make_request

9.2.1.2. el_ret = elv_merge(q, &req, bio)

9.2.1.2.1. ELEVATOR_BACK_MERGE

9.2.1.3. get_request

9.2.1.4. init_request_from_bio(req, bio)

9.2.1.5. current->plug

9.2.1.5.1. [plug]

9.2.1.5.2. [unplug]

9.3. *request list

9.4. __elv_add_request(q, rq, ELEVATOR_INSERT_SORT_MERGE)

9.5. ELEVATOR_FRONT_MERGE

9.6. *elevator

9.6.1. type[cfq,deadline]

9.6.1.1. ops

9.6.1.1.1. elevator_merge_req_fn

9.6.1.1.2. elevator_dispatch_fn

9.6.1.1.3. elevator_add_req_fn

10. request

10.1. list_head queuelist

10.2. bio

10.3. struct gendisk *rq_disk

11. bio

11.1. bio *bi_next

11.2. *bi_io_vect

11.2.1. bio_vect[ ]

11.2.1.1. *page

11.2.1.2. offset

11.2.1.3. lenth

11.3. *bi_bdev

11.4. *bi_end_io

11.4.1. (completion call back)

11.5. bvec_iter

11.5.1. bi_sector

11.5.2. bi_size

11.5.3. bi_idx

11.5.4. bi_bvec_done

12. VFS

12.1. OVER_LOAD_INODE_[F]OPS

12.1.1. inode_operations

12.1.1.1. [MEM_OPS]

12.1.1.1.1. [fs_spec ]ext4_dir_inode_operations

12.1.1.1.2. [fs_spec ]ext4_file_inode_operations

12.1.2. file_operations

12.1.2.1. [MEM_OPS]

12.1.2.1.1. [fs_wrapper]generic_file_write_iter

12.1.2.1.2. [fs_wrapper]generic_file_read_iter

12.1.3. address_space_operations

12.1.3.1. [fs_spec] ext4_readpage

12.1.3.2. [fs_spec] ext4_readpages

12.1.3.3. [fs_spec] ext4_writepage

12.1.3.4. [fs_spec] ext4_writepages

13. block_device

13.1. block device driver

13.1.1. struct gendisk alloc_disk()

13.1.2. assign value to gendisk

13.1.2.1. major

13.1.2.2. first-minor

13.1.2.3. *fops

13.1.2.3.1. open

13.1.2.3.2. release

13.1.2.3.3. ioctl

13.1.2.4. *reques_queue

13.1.2.4.1. blk_mq_init_queue

13.1.2.4.2. blk_init_queue

13.1.2.4.3. blk_alloc_queue (manually)

14. file_system_type ext4_fs_type

14.1. owner = THIS_MODULE

14.2. .name = "ext4"

14.3. .mount = ext4_mount

14.3.1. mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super)

14.4. .kill_sb = kill_block_super

15. blk_finish_plug

15.1. blk_flush_plug_list(plug, false)

15.2. current->plug = NULL

16. blk_start_plug

16.1. INIT_LIST_HEAD(&plug->list);