일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- pmap
- page
- devicedriver
- Linux
- Android
- kmalloc
- spinlock
- mm_struct
- vmalloc
- strex
- proc
- Network
- commit
- blk-mq
- vm_area_struct
- memory
- fastpath
- slowpath
- NDK
- slub
- BLOCK
- slab
- allocator
- lruvec
- 카프카
- kafka
- buddy_system
- Kernel
- Apache
- multiqueue
- Today
- Total
Art of Pr0gr4m
Linux Kernel Network Commit #2 본문
BlueZ 트리의 bluetooth-next 브랜치에 커밋했다.
[v4] Bluetooth: Fix return value in hci_dev_do_close() - 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' 카테고리의 다른 글
병렬성(Parallelism)과 동시성(Concurrency) (0) | 2024.07.21 |
---|---|
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 |