Read(User - ext4)

(버전 사이의 차이)
이동: 둘러보기, 찾기
37번째 줄: 37번째 줄:
 
"page_cache_release(page)"-->"file_accessed(filp)"
 
"page_cache_release(page)"-->"file_accessed(filp)"
 
}
 
}
 +
  
 
partition EXT4 {
 
partition EXT4 {
"ext4_readpage(struct file *file, struct page *page)"-->"mpage_readpage(page, ext4_get_block)"
+
"generic_file_aio_read()"--> if "not O_DIRECT" then
"mpage_readpage(page, ext4_get_block)" -> "ext4_get_block"
+
-->"do_generic_file_read()"
"mpage_readpage(page, ext4_get_block)" --> "do_mpage_readpage"
+
"do_generic_file_read()"-->if "no page" then
"do_mpage_readpage" --> if "bio exit" then
+
-->"page_cache_sync_readahead()"
-->"mpage_bio_submit(READ, bio)"
+
-->"ondemand_readahead()"
"mpage_bio_submit(READ, bio)"-->"mpage_end_io"
+
-->"__do_page_cache_readahead()"
 +
-->"read_pages()"
  
note left
+
"do_generic_file_read()"-->if "PageReadahead(page)" then
I/O completion handler for multipage BIOs.
+
--> "page_cache_async_readahead()"
end note
+
-->"ondemand_readahead()"
 +
-->"__do_page_cache_readahead()"
 +
-->"read_pages()"
  
"mpage_end_io" --> "end_page_writeback(page)"
+
"do_generic_file_read()"-->"ext4_readpages()"
 
+
-->"mpage_readpages()"
note left
+
-->"do_mpage_readpage()"
end writeback against a page
+
-->"mpage_bio_submit()"
end note
+
}
 
+
"mpage_end_io" --> "bio_put(bio)"
+
 
+
note right:release a reference to a bio
+
 
+
"mpage_bio_submit(READ, bio)"-->"submit_bio(rw, bio)"
+
note right:submit a bio to the block device layer
+
  
 
-->"generic_make_request(bio)"
 
-->"generic_make_request(bio)"
note right: hand a buffer to its device driver
 
 
"generic_make_request(bio)" --> if "current process has bio"then
 
-->"bio_list_add(current->bio_list, bio)"
 
 
"generic_make_request(bio)" --> if "bio exist" then
 
-->"make_request_fn(q, bio)"
 
  
 
</uml>
 
</uml>

2014년 5월 20일 (화) 14:36 판

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