buffer_uptodate 찾기

Linux 2010. 12. 13. 10:40
어제 본 영화 "김종욱 찾기"에서처럼 첫사랑 찾기 같은 직업을 가졌으면 좋았을 법한데, 안타깝게도 내 직업은 그런 것 (인간적 감수성을 찾아다니는 그것?)하고는 좀 거리가 멀다.

김종욱 찾기
감독 장유정 (2010 / 한국)
출연 임수정,공유
상세보기



두루뭉실하기 짝이 없는 bit란 녀석을 그나마 좀 실체적으로 접근해서... 그 0과 1이 어디에 어떻게 저장되고 어딜 따라 흘러가는지를 파악하는게 결국 내가 하는 일이다.

아.. 진짜 인간적인 감수성하고는 거리가 멀다.  (어제 영화를 봐서 그런지 모르겠는데, 웬지 이런거 --> 논리적으로 분석을 해야 하는거 -- 는 나하고 적성이 안맞는거 같기도 하다)

어쨌거나 linux kernel에서 buffer_uptodate라는 녀석을 찾아야 하는데, 이놈이 당최 무슨 방법을 써도 안나오는 거다.

Linux kernel 탐색의 기본기인 ctags + cscope 로 caller는 찾아지는데 definition이 안찾아지는거다! Indexing이 잘못되었나... 무식한 놈이 용감하다고 (용감한 놈이 무식한건가?? 헷갈린다 -.-) 나의 필살기 grep을 꺼내들었지만 역시나 마찬가지 결과다... 아니... kernel이 또다른 library를 사용하는건가 하는 의심까지도.

열심히 구글링 해보았지만 그마저도 허사, 헌데 예전에 kernel은 아니었지만, 다른 source에서 이와 비스무레한 경험을 했던 기억이 났다.  아래와 같은거..

#define dbg_print(name)        dbg_print_##name


그러니까, dbg_print(hdmi)를 하면 dbg_print_hdmi가 되는 define.  아마 이런 것이겠구나 싶어서, 검색을 시작했다.

$ grep buffer_## * -nr > ret.txt


호... 운좋게도 이런 놈들을 찾았다.

#define BUFFER_FNS(bit, name)                       \

static inline void set_buffer_##name(struct buffer_head *bh)        \

{                                   \

    set_bit(BH_##bit, &(bh)->b_state);              \

}                                   \

static inline void clear_buffer_##name(struct buffer_head *bh)      \

{                                   \

    clear_bit(BH_##bit, &(bh)->b_state);                \

}                                   \

static inline int buffer_##name(const struct buffer_head *bh)       \

{                                   \

    return test_bit(BH_##bit, &(bh)->b_state);          \

}

buffer_##name일텐데, #define BUFFER_FNS가 \으로 연결되어있는 것을 보니, 이놈이 호출되어야 뭔가 답이 나올 것 같다.  역시나, 조금 더 아래로 내려가니...

BUFFER_FNS(Uptodate, uptodate)


라는 문장이 나온다.  그래... Uptodate가 bit로, uptodate가 name으로 대입되면,

buffer_uptodate는 test_bit(BH_Uptodate, &(bh)->b_state);


이 된다.  아~ 찾았다.

그러나... 역시 사람 찾기보다는 재미 없는 거 같다. -.-; (당연히 임수정도 못찾았다)
Posted by 강군님

댓글을 달아 주세요