Art of Pr0gr4m

Linux Kernel Network Commit #3 본문

IT

Linux Kernel Network Commit #3

pr0gr4m 2021. 8. 25. 15:23

Netdev 트리의 net-next 브랜치 커밋

 

[v3,net-next] net: bridge: change return type of br_handle_ingress_vlan_tunnel - Patchwork (kernel.org)

 

[v3,net-next] net: bridge: change return type of br_handle_ingress_vlan_tunnel - Patchwork

 

patchwork.kernel.org

 

두 번째 커밋과 비슷하게, 현재 br_handle_ingress_vlan_tunnel() 함수는 모든 종료 경로에서 return 0;으로 끝난다.

 

처음에는 pair 함수 br_handle_egress_vlan_tunnel() 함수에서는 skb_vlan_pop()을 호출해서 해당 반환 값을 반환하는데,

ingress 함수에서는 skb_vlan_push() 함수를 호출하지 않고 __vlan_hwaccel_put_tag() 함수만 호출하고 return 0;으로 종료하는게 이상해 보였다.

 

따라서, __vlan_hwaccel_put_tag() 호출 대신 skb_vlan_push() 함수를 호출해서 반환값을 반환하도록 하는 패치를 보냈다.

이에 대해 메인테이너분이 다음과 같이 답을 주셨다.

 

This changes behaviour though, I don't like changing code just for the sake of it.

Perhaps the author had a reason to use hwaccel_put_tag instead.

Before we would just put hwaccel tag, now if there already is hwaccel tag we'll push it inside the skb and then push the new tag in hwaccel.

In fact I think you can even trigger the warning inside skb_vlan_push, so

 

대충 hwaccel tag 넣기 전에 이미 hwaccel tag가 있다면 skb에 해당 tag를 push하고, hwaccel에 새 tag를 push한다는 내용인데.. 여기서는 skb_vlan_push() 함수가 아니라 hwaccel put tag를 쓰는게 맞다는 이야기같다.

 

따라서 해당 패치는 포기하고, 대신 현재 함수가 항상 return 0;로 끝나므로 이 부분 cleanup을 수행하겠다고 메일 드렸더니 이 부분에 대해서는 긍정적으로 반응해주셨다.

 

그렇게 br_handle_ingress_vlan_tunnel() 함수의 return type을 void로 변경하고,

해당 함수를 호출하는 br_handle_frame() 함수에서도 cleanup을 수행했다.

 

이 전 두 커밋은 기능 Fix나 성능 최적화가 이루어지는 contribute이었던 것에 비해, 해당 커밋은 단순히 cleanup이기 때문에 큰 성과는 아닌 것 같다.

더군다나 해당 패치는 이 전 패치들과 달리 직접 찾은게 아니라 제보를 받은 내용이라.. 그래도 보낸 패치가 accepted 되는건 역시 기분이 좋긴 하다.