As for 'buffering', after disable_bh is called, the next interrupt of
any kind including (AFAIK) the timer tick will run any outstanding
bottom half code. This takes precedence over user driven code. It's a
tradeoff, a more local lock and a slightly delayed bh against a global
lock that hits every piece of code.
Bottom half routines are run when the kernel is on its way out to
user-mode. So it'll be the the next interrupt or when the kernel next
tries to return from a system call. If something is a bottom-half
handler, it usually is something which can stand to wait a small
fraction of time before it runs.....
- Ted