Function report |
Source Code:mm\filemap.c |
Create Date:2022-07-28 14:02:19 |
Last Modify:2020-03-12 14:18:49 | Copyright©Brick |
home page | Tree |
Annotation kernel can get tool activity | Download SCCT | Chinese |
Name:generic_file_buffered_read - generic file read routine*@iocb: the iocb to read*@iter: data destination*@written: already copied* This is a generic file read routine, and uses the* mapping->a_ops->readpage() function for the actual low-level stuff.
Proto:static ssize_t generic_file_buffered_read(struct kiocb *iocb, struct iov_iter *iter, ssize_t written)
Type:ssize_t
Parameter:
Type | Parameter | Name |
---|---|---|
struct kiocb * | iocb | |
struct iov_iter * | iter | |
ssize_t | written |
2022 | error = 0 |
2024 | If Value for the false possibility is greater at compile time( * ppos >= s_maxbytes) Then Return 0 |
2028 | index = ppos >> PAGE_SHIFT determines the page size |
2030 | prev_offset = Cache last read() position & PAGE_SIZE - 1 |
2031 | last_index = ppos + count + PAGE_SIZE - 1 >> PAGE_SHIFT determines the page size |
2034 | cycle |
2040 | cond_resched() |
2041 | find_page : |
2042 | If fatal_signal_pending(current process) Then |
2048 | If Not page Then |
2049 | If ki_flags & IOCB_NOWAIT Then Go to would_block |
2051 | page_cache_sync_readahead(mapping, ra, filp, index, last_index - index) |
2055 | If Value for the false possibility is greater at compile time(page == NULL) Then Go to no_cached_page |
2058 | If PageReadahead(page) Then |
2059 | page_cache_async_readahead(mapping, ra, filp, page, index, last_index - index) |
2063 | If Not PageUptodate(page) Then |
2064 | If ki_flags & IOCB_NOWAIT Then |
2066 | Go to would_block |
2074 | error = wait_on_page_locked_killable(page) |
2075 | If Value for the false possibility is greater at compile time(error) Then Go to readpage_error |
2077 | If PageUptodate(page) Then Go to page_ok |
2080 | If i_blkbits == PAGE_SHIFT determines the page size || Not is_partially_uptodate Then Go to page_not_up_to_date |
2084 | If Value for the false possibility is greater at compile time(iov_iter_is_pipe(iter)) Then Go to page_not_up_to_date |
2086 | If Not Return true if the page was successfully locked Then Go to page_not_up_to_date |
2089 | If Not See page-flags.h for PAGE_MAPPING_FLAGS Then Go to page_not_up_to_date_locked |
2091 | If Not is_partially_uptodate(page, offset, count) Then Go to page_not_up_to_date_locked |
2096 | page_ok : |
2107 | end_index = isize - 1 >> PAGE_SHIFT determines the page size |
2108 | If Value for the false possibility is greater at compile time(!isize || index > end_index) Then |
2135 | If prev_index != index || offset != prev_offset Then mark_page_accessed(page) |
2137 | prev_index = index |
2146 | index += offset >> PAGE_SHIFT determines the page size |
2148 | prev_offset = offset |
2152 | If Not iov_iter_count(iter) Then Go to out |
2158 | Continue |
2160 | page_not_up_to_date : |
2162 | error = lock_page_killable is like lock_page but can be interrupted by fatal* signals. It returns 0 if it locked the page and -EINTR if it was* killed while waiting. |
2163 | If Value for the false possibility is greater at compile time(error) Then Go to readpage_error |
2166 | page_not_up_to_date_locked : |
2168 | If Not See page-flags.h for PAGE_MAPPING_FLAGS Then |
2171 | Continue |
2175 | If PageUptodate(page) Then |
2177 | Go to page_ok |
2180 | readpage : |
2186 | ClearPageError(page) |
2191 | If error == AOP_TRUNCATED_PAGE Then |
2196 | Go to readpage_error |
2199 | If Not PageUptodate(page) Then |
2200 | error = lock_page_killable is like lock_page but can be interrupted by fatal* signals. It returns 0 if it locked the page and -EINTR if it was* killed while waiting. |
2201 | If Value for the false possibility is greater at compile time(error) Then Go to readpage_error |
2203 | If Not PageUptodate(page) Then |
2204 | If ( See page-flags.h for PAGE_MAPPING_FLAGS == NULL) Then |
2210 | Go to find_page |
2215 | Go to readpage_error |
2220 | Go to page_ok |
2222 | readpage_error : |
2225 | Go to out |
2227 | no_cached_page : |
2232 | page = page_cache_alloc(mapping) |
2233 | If Not page Then |
2237 | error = add_to_page_cache_lru(page, mapping, index, Restricts the given gfp_mask to what the mapping allows. ) |
2239 | If error Then |
2245 | Go to out |
2247 | Go to readpage |
2250 | would_block : |
2252 | out : |
2257 | ppos = (index << PAGE_SHIFT determines the page size ) + offset |
2258 | file_accessed(filp) |
Name | Describe |
---|---|
generic_file_read_iter | generic_file_read_iter - generic filesystem read routine*@iocb: kernel I/O control block*@iter: destination for the data read* This is the "read_iter()" routine for all filesystems* that can use the page cache directly |
Source code conversion tool public plug-in interface | X |
---|---|
Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion |