Art of Pr0gr4m

Linux Kernel Network Commit #2 본문

IT

Linux Kernel Network Commit #2

pr0gr4m 2021. 8. 20. 00:54

BlueZ 트리의 bluetooth-next 브랜치에 커밋했다.

 

[v4] Bluetooth: Fix return value in hci_dev_do_close() - Patchwork (kernel.org)

 

[v4] Bluetooth: Fix return value in hci_dev_do_close() - Patchwork

 

patchwork.kernel.org

 

현재 hci_dev_do_close() 함수는 모든 종료 경로에서 return 0;으로 끝난다.

종료 루틴이 실패하면 에러 값을 반환해야 하는데, 어떤 상황에서도 0을 반환하는 상황이다.

 

기기 에러 상황에서 reset하는 경우, hci_error_reset 함수에서 이 함수를 호출하는데,

종료 동작이 정상적으로 수행되면 이어서 hci_dev_do_open() 함수를 호출하여 재시작하지만,

종료 동작이 비정상적으로 끝나면 hci_dev_do_open() 함수를 호출하지 않고 끝내야 한다.

 

또한, ioctl() 함수에서 종료 동작 수행 시에도 이 함수를 호출하는데,

종료가 제대로 수행되지 못했다면 에러값을 반환해줘야 한다.

 

따라서, 종료 과정에 에러가 생긴 경우 해당 에러 값을 반환하도록 수정해줘야 하는데..

문제는 hdev에 등록되는 모든 close 콜백은 단순히 return 0;으로 끝난다.

그렇다면 그냥 넘어가도 되는건가? 싶겠지만,

위쪽에 shutdown 콜백은 수행 중에 오류가 생길 수 있으며, 에러 값도 제대로 반환해준다.

 

그러므로 이 shutdown 콜백의 반환 값을 저장해뒀다가, 종료 시 반환하도록 코드를 수정해서 패치를 보냈다.

패치가 v4까지 되었는데, 실수한 점을 짚으면 다음과 같다.

 

v1 : bluetooth-next 브랜치가 아니라 net-next 브랜치에서 작업하였음 (블루투스 브랜치가 따로 있는지 몰랐음)

v2 : obsolete된 bluetooth-next 브랜치에서 작업하였음 (블루투스 브랜치는 세 개가 있으며, bluetooth group의 브랜치 외에는 obsolete 된 것을 몰랐음)

v3 : 여기서는 메인테이너분의 리뷰 메일을 받았는데 변수 이름을 ret이 아니라 err로 해달라고 요청해주셨음 (관련 메일 : LKML: Marcel Holtmann: Re: [PATCH v3] Bluetooth: Fix return value in hci_dev_do_close())

v4 : bluetooth-next 브랜치에 merge 됨

 

블루투스 내에서는 가장 코어라고 할 수 있는 부분인데, 이 또한 좋은 성과이다.

'IT' 카테고리의 다른 글

Linux Kernel Network Commit #3  (0) 2021.08.25
Linux Kernel 참고 사이트 추천  (4) 2021.07.27
Linux Kernel Network Commit #1  (2) 2021.07.24
데이터 분석 시각화 블로그 링크  (0) 2016.11.09