In case an ALTQ is used a memory leak can happen if drbr_putback is executed as no other function check for driver queue.
Always putback into the buf_ring and change the order of checks in other drbr_* functions.
This ensures that no frames are lost and no additional synchronization is needed.
This also have an additional effect of increasing the network performance in case the ALTQ is compiled in but not really enabled on the interface (the order of functions changed and the default path is checked first).
This is a second approach to fix this bug that occurred on custom ARM board with driver that uses this interface and have ALTQ enabled (https://reviews.freebsd.org/D52424). The previous approach changed the synchronization requirements and led to spontaneous kernel crashes so it could be closed.