O_SYNC 관련

minzkn의 이미지

* 상황 *
- CPU: Geode (중요!)
- IDE : Compact flash (Toshiba)
- Cache : cr3 의 PWT bit를 0으로 설정.
- Linux kernel 2.4.20-xxx

* 코드 *

Handle = open("Test.log", O_CREAT | O_SYNC | O_WRONLY, 0755);
if(Handle >= 0)
{
  /* 약 500MByte write 하는 코드 */
   close(s_Handle);
}

* 증상 및 의심가는 부분 *
증상으로는 첫번째 write하는 block이 read해보니 write했던 Data가 아닌 경우가 발생. (항상 발생하는 것은 아니며 간혹 발생)

의심가는 부분으로는 간혹 발생한다는 점을 감안하여 Cache관련 부분과
O_SYNC|O_CREAT 와의 관계가 좀 있는듯 한데 도저히 커널의
버그라고 하기에는 어처구니가 없어서 글 남깁니다.

이에 대하여 혹시 경험하신분이나 관련 E-Mail list가 있다면 댓글 달아주시면
무지 감사드립니다.

참고로 저와 비슷한 경우를 겪어보신분의 글을 찾아냈더니 다음과 같군요.
http://www.cs.helsinki.fi/linux/linux-kernel/2003-11/1735.html