"But can't just just get the kref in set_selection before using cmpxchg? and if that fails, put it back. If it succeeded, the work schedule will happen, and either it will manage to take the tty and put its kref, or be canceled, and the kref will be put as well." Yes that's much better, thank you!