Read(User - ext4)
(버전 사이의 차이)
45번째 줄: | 45번째 줄: | ||
-->"mpage_bio_submit(READ, bio)" | -->"mpage_bio_submit(READ, bio)" | ||
"mpage_bio_submit(READ, bio)"-->"mpage_end_io" | "mpage_bio_submit(READ, bio)"-->"mpage_end_io" | ||
+ | |||
+ | note left | ||
+ | I/O completion handler for multipage BIOs. | ||
+ | end note | ||
+ | |||
+ | "mpage_end_io" --> "end_page_writeback(page)" | ||
+ | |||
+ | note left | ||
+ | end writeback against a page | ||
+ | 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)" | "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 | "generic_make_request(bio)" --> if "current process has bio"then | ||
-->"bio_list_add(current->bio_list, bio)" | -->"bio_list_add(current->bio_list, bio)" | ||
− | } | + | "generic_make_request(bio)" --> if "bio exist" then |
+ | -->"bdev_get_queue(bio->bi_bdev)" | ||
+ | --> if "bio exist" then | ||
+ | -->"make_request_fn(q, bio)" | ||
+ | --> if "bio exist" then | ||
+ | -->"bio_list_pop(current->bio_list)"} | ||
</uml> | </uml> |
2014년 5월 16일 (금) 10:39 판