• James Toy's avatar
    · 8e580e58
    James Toy authored
    The following commit make console open fails while booting:
    
    	commit d966976924119acd35a431adbb95292082f73f8c
    	Author: Alan Cox <alan@linux.intel.com>
    	Date:   Tue Aug 11 10:23:05 2009 +1000
    
    	tty: make the kref destructor occur asynchronously
    
    Due to tty release routines runs in workqueue now, error like following
    will be reported while booting:
    
    INIT open /dev/console Input/output error
    
    The reason is that now there's latency issue with closing, but when we
    open a "closing not finished" tty, -EIO will be returned.
    
    Fix it as alan's following suggestion:
    
    Fun but its actually not a bug and the fix is wrong in itself as the port
    may be closing but not yet being destructed, in which case it seems to do
    the wrong thing.  Opening a tty that is closing (and could be closing for
    long periods) is supposed to return -EIO.
    
    I suspect a better way to deal with this and keep the old console timing
    is to split tty->shutdown into two functions.
    
    tty->shutdown() - called synchronously just before we dump the tty onto
    the waitqueue for destruction
    
    tty->cleanup() - called when the destructor runs.
    
    We would then do the shutdown part which can occur in IRQ context fine,
    before queueing the rest of the release (from tty->magic = 0 ...  the end)
    to occur asynchronously
    
    The USB update in -next would then need a call like
    
           if (tty->cleanup)
                   tty->cleanup(tty);
    
    at the top of the async function and the USB shutdown to be split between
    shutdown and cleanup as the USB resource cleanup and final tidy cannot
    occur synchronously as it needs to sleep.
    
    In other words the logic becomes
    
           final kref put
                   make object unfindable
    
           async
                   clean it up
    Signed-off-by: default avatarDave Young <hidave.darkstar@gmail.com>
    Cc: Greg KH <greg@kroah.com>
    Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
    Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
    Cc: Emmanuel Benisty <benisty.e@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    8e580e58
tty_io.c 77.3 KB