• Linus Torvalds's avatar
    tty: use the new 'flush_delayed_work()' helper to do ldisc flush · 97ad5a03
    Linus Torvalds authored
    This way all flush_to_ldisc work is always done through the workqueues,
    and we thus have a single point of serialization.  It also means that we
    can avoid calling flush_to_ldisc() entirely if there was no delayed work
    pending.
    
    [ Side note: using workqueues and keventd as the single way to enter
      flush_to_ldisc() still doesn't absolutely guarantee that we can't have
      concurrency: keventd is multithreaded and has a thread per CPU, and
      while the WORK_STRUCT_PENDING bit guarantees a single work only being
      on the pending list once, the work might be both pending and _running_
      at the same time. Workqueues are not simple. ]
    
    This was also confirmed to fix bugzilla #14388, even without the earlier
    locking fix and cleanup (commit c8e33141: "tty: Make flush_to_ldisc()
    locking more robust").  So both commits fix the same bug differently,
    and either would have worked on its own.  But I'm committing them both
    since they are cleanups independent of each other.
    Reported-and-tested-by: default avatarBoyan <btanastasov@yahoo.co.uk>
    Acked-by: default avatarAlan Cox <alan@lxorguk.ukuu.org.uk>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    97ad5a03
tty_buffer.c 13.6 KB