I skimmed through the LWN article and it appears to oversimplify the situation implying that bucket lists are singly-linked. They aren't (or at least they weren't in kernel's hlist few years ago), there's also a back pointer and I'm not really sure how this fits in, i.e. one can't simply re-link tail of one bucket to the head of another when merging them... In other words it seems like LWN got the whole thing dumbed down significantly, no?
Readers don't look at the prev pointers, only the next pointers, so the writers can safely change prev pointers concurrently without worrying about readers.