|
|
8번째 줄: |
8번째 줄: |
| "vfs_read()" --> "do_sync_read()" | | "vfs_read()" --> "do_sync_read()" |
| "do_sync_read()" -->"generic_file_aio_read" | | "do_sync_read()" -->"generic_file_aio_read" |
− |
| |
− | "generic_file_aio_read" -->"generic_segment_checks"
| |
− | "generic_segment_checks" --> if "error" then
| |
− | -->[error] (*)
| |
− | endif
| |
− |
| |
− | "generic_segment_checks" --> if "filp->f_flag check" then
| |
− | --> [O_DIRECT]"filemap_write_and_wait_range"
| |
− | else
| |
− | -->"do_generic_file_read"
| |
− | "filemap_write_and_wait_range" --> if "return O" then
| |
− | --> "generic_file_direct_IO"
| |
− | endif
| |
− |
| |
− | "filemap_write_and_wait_range" -> "filemap_fdatawrite_range"
| |
− | "filemap_fdatawrite_range" --> "do_writepages"
| |
− | "do_writepages" --> "generic_writepage"
| |
− | "generic_writepage" -->"write_cache_pages"
| |
− | "write_cache_pages" --> "writepage"
| |
− |
| |
− | "do_generic_file_read" --> "find_get_page(mapping, index)"
| |
− | -->[no page] "page_cache_alloc_cold(mapping)"
| |
− | "find_get_page(mapping, index)" --> "add_to_page_cache_lru"
| |
− | "add_to_page_cache_lru" --> if "error check" then
| |
− | -->[error]"page_cache_release(page)"
| |
− | else
| |
− | -->[error X]"ext4_readpage(struct file *file, struct page *page)"
| |
− | "page_cache_release(page)"-->"file_accessed(filp)"
| |
| } | | } |
| | | |