운영체제 기본/Linux의 파일시스템/ext4의 파일 읽기: 두 판 사이의 차이

ext4 메타데이터 참조 관계와 /home/ldmsys 디렉터리 블록 구조 그림 추가
읽기 완료의 기본 흐름에 집중하도록 후처리 예시 축소
 
134번째 줄: 134번째 줄:
== 읽기 완료와 mmap의 연결 ==
== 읽기 완료와 mmap의 연결 ==


장치 읽기가 끝나면 bio의 완료 함수인 <code>mpage_end_io()</code>가 실행된다. 필요한 후처리가 없다면 <code>__read_end_io()</code>가 곧바로 <code>folio_end_read()</code>를 호출해 성공 여부를 반영하고 대기자를 깨운다. 암호화나 무결성 검증이 필요한 파일에서는 해당 후처리를 거친 뒤 완료된다. 따라서 요청을 제출한 순간과 캐시의 데이터를 사용할 수 있는 순간은 같지 않다.<ref name="ext4-readpage"/>
장치 읽기가 끝나면 bio의 완료 함수인 <code>mpage_end_io()</code>가 실행된다. 필요한 후처리가 없다면 <code>__read_end_io()</code>가 곧바로 <code>folio_end_read()</code>를 호출해 성공 여부를 반영하고 대기자를 깨운다. 따라서 요청을 제출한 순간과 캐시의 데이터를 사용할 수 있는 순간은 같지 않다.<ref name="ext4-readpage"/>


준비된 데이터는 <code>filemap_read()</code>의 <code>copy_folio_to_iter()</code>를 통해 읽기 대상 버퍼로 복사된다. 공통 계층은 읽은 만큼 위치를 진행시키고 바이트 수를 반환한다. EOF에서는 요청량보다 적게 읽거나 0을 반환할 수 있으며, 장치 오류가 있으면 정상 데이터처럼 취급하지 않는다.<ref name="ext4-filemap"/>
준비된 데이터는 <code>filemap_read()</code>의 <code>copy_folio_to_iter()</code>를 통해 읽기 대상 버퍼로 복사된다. 공통 계층은 읽은 만큼 위치를 진행시키고 바이트 수를 반환한다. EOF에서는 요청량보다 적게 읽거나 0을 반환할 수 있으며, 장치 오류가 있으면 정상 데이터처럼 취급하지 않는다.<ref name="ext4-filemap"/>