raid5_cache. c 데이터 구조의 r5lio_unit
하나, 몇 가지 중요 한 요소
log_start
기능: 로그 의 시작 섹 터 에 새 데이터 가 있 습 니 다.
변화: 디스크 에 새 페이지 를 쓸 때 섹 터 에 8 을 추가 합 니 다 (왜 8 일 까요? 기본 페이지 는 8 개의 섹 터 이기 때 문 입 니 다)
current_io
기능: 데이터 수신 중인 구조 체
초기 화: meta 생 성 시 log - > currentio = r5l_new_meta(log)
삭제: log 를 쓸 때 log - > currentio = NULL
링크
running_ios:
기능: 조직 수신 데이터, 로그 에 완전히 기록 되 지 않 은 io
초기 화: log 를 초기 화 할 때 INITLIST_HEAD(&log->running_ios)
진: meta 를 만 들 때 io 가입 listadd_tail(&io->log_sibling, &log->running_ios)
나 가기: io 의 state 위치 가 IO 라면UNIT_IO_END, io 는 runningios finished 로 이동ios
io_end_ios:
기능: 조직 기록 log, RAID 에 기록 되 지 않 은 io (need cache flush)
초기 화: log 를 초기 화 할 때 INITLIST_HEAD(&log->io_end_ios)
진: log - > needcache_flush 가 진짜 일 때 r5lmove_io_unit_list(&log->running_ios, &log->io_end_ios, IO_UNIT_IO_END);
나 가기: flushingios ;list_splice_tail_init(&log->io_end_ios, &log->flushing_ios)
flushing_ios
기능: flush 조직 io
초기 화: log 를 초기 화 할 때 INITLIST_HEAD(&log->flushing_ios)
진:
나 가기: io - > stripelist 제거 후, 제출 sh, listsplice_tail_init(&log->flushing_ios, &log->finished_ios)
finished_ios
기능: 로그 에 기 록 된 io 를 조직 합 니 다.
초기 화: log 를 초기 화 할 때 INITLIST_HEAD(&log->finished_ios)
들어가다
나 가기: r5lcomplete_finished_ios,
no_space_stripes
기능: log 에 공간 이 없어 pending 테이프
초기 화:
진: log 를 쓸 준비 가 되 어 있 을 때 log 에 저장 할 공간 이 없습니다. listadd_tail(&sh->log_list, &log->no_space_stripes)
나 가기: log 공간 회수 후, sh = listfirst_entry(&log->no_space_stripes, struct stripe_head, log_list); list_del_init(&sh->log_list); 이어서 setbit(STRIPE_HANDLE, &sh->state); raid5_release_stripe(sh)
3. 조금 어 려 운 요소 몇 개
struct kmem_cache *io_kc:
할당: log - > iokc = KMEM_CACHE(r5l_io_unit, 0)
사용: io, io = kmem 신청cache_zalloc(log->io_kc, GFP_NOIO | __GFP_NOFAIL)
방출: kmemcache_destroy(log->io_kc)
struct md_thread *reclain_target
기능: 회수 스 레 드
wait_queue_head_t iounit_wait
초기 화: initwaitqueue_head(&log->iounit_wait)
각성: wakeup(&log->iounit_wait)
사용: 회수 시 waitevent_lock_irq(log->iounit_wait, r5l_reclaimable_space(log) > reclaimable, log->io_list_lock);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
바이너리 파일cat 또는tail, 터미널 디코딩 시 처리 방법cat으로 바이너리 파일을 보려고 할 때 코드가 엉망이 되어 식은땀이 났다. 웹에서 스크롤된 정보의 처리 방법과alias의 설정을 요약합니다. reset 명령을 사용하여 터미널을 재설정합니다.이렇게 하면 고치지 못하...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.