• Dan Ehrenberg's avatar
    dm table: fall back to getting device using name_to_dev_t() · 644bda6f
    Dan Ehrenberg authored
    If a device is used as the root filesystem, it can't be built
    off of devices which are within the root filesystem (just like
    command line arguments to root=).  For this reason, Linux has a
    pseudo-filesystem for root= and MD initialization (based on the
    function name_to_dev_t) which handles different ways of specifying
    devices including PARTUUID and major:minor.
    
    Switch to using name_to_dev_t() in dm_get_device().  Rather than
    having DM assume that all things which are not major:minor are paths in
    an already-mounted filesystem, change dm_get_device() to first attempt
    to look up the device in the filesystem, and if not found it will fall
    back to using name_to_dev_t().
    
    In terms of backwards compatibility, there are some cases where
    behavior will be different:
    - If you have a file in the current working directory named 1:2 and
      you initialze DM there, then it will try to use that file rather
      than the disk with that major:minor pair as a backing device.
    - Similarly for other bdev types which name_to_dev_t() knows how to
      interpret, the previous behavior was to repeatedly check for the
      existence of the file (e.g., while waiting for rootfs to come up)
      but the new behavior is to use the name_to_dev_t() interpretation.
      For example, if you have a file named /dev/ubiblock0_0 which is
      a symlink to /dev/sda3, but it is not yet present when DM starts
      to initialize, then the name_to_dev_t() interpretation will take
      precedence.
    
    These incompatibilities would only show up in really strange setups
    with bad practices so we shouldn't have to worry about them.
    Signed-off-by: default avatarDan Ehrenberg <dehrenberg@chromium.org>
    Signed-off-by: default avatarMike Snitzer <snitzer@redhat.com>
    644bda6f
dm-table.c 39.8 KB