페이지 캐시를 탐색하고 특정 블록을 포함하는 페이지를 검색하는 함수를 Linux 커널 공간에 작성하려고합니다.
페이지 캐시의 페이지를 하나씩 가져 오는 방법을 모르겠습니다.
나는 것을보고 find_get_page
저를 도울 수있는 기능입니다,하지만 난 첫 페이지 오프셋을 얻을 방법을 계속하는 방법을 모르겠어요. 내가 말했듯이, 나는 다음과 같은 것을 시도하고 있습니다.
for(every page in struct address_space *mapping)
{
for(every struct buffer_head in current_page->buffers)
{
check if(my_sector == current_buffer_head->b_blocknr)
...
}
}
누구든지 모든 페이지 캐시를 살펴 보는 방법을 찾는 데 도움을 줄 수 있습니까?
Linux 커널에 이와 같은 작업을 수행하는 코드가 있다고 생각합니다 (예 : 페이지에 쓰기가 있고 페이지가 캐시에서 검색되는 경우).하지만 찾지 못했습니다 ...
감사!
address_space
구조는 모든 페이지 보유 radix_tree
( mapping->page_tree
귀하의 경우)를. 따라서 필요한 것은 해당 트리를 반복하는 것입니다. Linux 커널에는 반복자를 포함하는 기수 트리 API ( 여기 참조)가 있습니다for_each
. eaxmple의 경우 :
396 /**
397 * radix_tree_for_each_chunk_slot - iterate over slots in one chunk
398 *
399 * @slot: the void** variable, at the beginning points to chunk first slot
400 * @iter: the struct radix_tree_iter pointer
401 * @flags: RADIX_TREE_ITER_*, should be constant
402 *
403 * This macro is designed to be nested inside radix_tree_for_each_chunk().
404 * @slot points to the radix tree slot, @iter->index contains its index.
405 */
406 #define radix_tree_for_each_chunk_slot(slot, iter, flags) \
407 for (; slot ; slot = radix_tree_next_slot(slot, iter, flags))
408
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다