• Tejun Heo's avatar
    block: flush MEDIA_CHANGE from drivers on close(2) · 85ef06d1
    Tejun Heo authored
    Currently, only open(2) is defined as the 'clearing' point.  It has
    two roles - first, it's an acknowledgement from userland indicating
    that the event has been received and kernel can clear pending states
    and proceed to generate more events.  Secondly, it's passed on to
    device drivers as a hint indicating that a synchronization point has
    been reached and it might want to take a deeper look at the device.
    
    The latter currently is only used by sr which uses two different
    mechanisms - GET_EVENT_MEDIA_STATUS_NOTIFICATION and TEST_UNIT_READY
    to discover events, where the former is lighter weight and safe to be
    used repeatedly but may not provide full coverage.  Among other
    things, GET_EVENT can't detect media removal while TUR can.
    
    This patch makes close(2) - blkdev_put() - indicate clearing hint for
    MEDIA_CHANGE to drivers.  disk_check_events() is renamed to
    disk_flush_events() and updated to take @mask for events to flush
    which is or'd to ev->clearing and will be passed to the driver on the
    next ->check_events() invocation.
    
    This change makes sr generate MEDIA_CHANGE when media is ejected from
    userland - e.g. with eject(1).
    
    Note: Given the current usage, it seems @clearing hint is needlessly
    complex.  disk_clear_events() can simply clear all events and the hint
    can be boolean @flush.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Cc: Kay Sievers <kay.sievers@vrfy.org>
    Signed-off-by: default avatarJens Axboe <jaxboe@fusionio.com>
    85ef06d1
block_dev.c 40.5 KB