• NeilBrown's avatar
    md: Fix - again - partition detection when array becomes active · f0b4f7e2
    NeilBrown authored
    Revert
        b821eaa5
    and
        f3b99be1
    
    When I wrote the first of these I had a wrong idea about the
    lifetime of 'struct block_device'.  It can disappear at any time that
    the block device is not open if it falls out of the inode cache.
    
    So relying on the 'size' recorded with it to detect when the
    device size has changed and so we need to revalidate, is wrong.
    
    Rather, we really do need the 'changed' attribute stored directly in
    the mddev and set/tested as appropriate.
    
    Without this patch, a sequence of:
       mknod / open / close / unlink
    
    (which can cause a block_device to be created and then destroyed)
    will result in a rescan of the partition table and consequence removal
    and addition of partitions.
    Several of these in a row can get udev racing to create and unlink and
    other code can get confused.
    
    With the patch, the rescan is only performed when needed and so there
    are no races.
    
    This is suitable for any stable kernel from 2.6.35.
    Reported-by: default avatar"Wojcik, Krzysztof" <krzysztof.wojcik@intel.com>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Cc: stable@kernel.org
    f0b4f7e2
md.c 192 KB