Ryan forwarded this to bcache-tools upstream on github.
 https://github.com/koverstreet/bcache-tools/pull/1


** Description changed:

  [Impact]
  
   * Current users of bcache devices may encounter unreliable device
     numbering as the Linux kernel does not guarantee that bcache
     minor numbers are assigned to the same devices at each boot.
     Users who may have used /dev/bcacheN in paths to a specific
     device could possible be pointing to a different dataset
     altogether.  bcache udev rules do provide some mechanism to
     generate persistent symlinks in /dev/bcache/by-uuid or
     /dev/bcache/by-label which is based on superblock data on
     the underlying device.  However, the Linux kernel does not
     always generate an kernel uevent to trigger the udev rules
     to create the symlink.
  
   * The fix adds a udev program which will read bcache superblock
     of slave devices and extract the UUID and LABEL, exporting them
     to udev for use in the bcache rule files.
  
   * This is affected in upstream bcache-tools, the owning package
     of the udev rules.  This affects all releases of bcache-tools
     as the rules rely upon the kernel to trigger these events,
     though that is not a requirement to resolve the lack of
     persistent links.
  
  [Test Case]
  
   * Launch and Ubuntu Cloud Image with 3 unused disks
     - apt install bcache-tools tree
     - make-bcache -C /dev/vdb
     - make-bcache -B /dev/vdc
     - make-bcache -B /dev/vdd
     - echo "vdc" > /sys/class/block/bcache0/bcache/label
     - echo "vdd" > /sys/class/block/bcache1/bcache/label
     - reboot
  
     - Run this test:
  
      #!/bin/bash
      FAIL=0
      [ ! -d /dev/bcache ] && {
          echo "FAIL: /dev/bcache is not a directory";
          exit 1
      }
      for label in /dev/bcache/by-label/*; do
          LABEL_TARGET="$(ls -1 /sys/class/block/`basename $label`/holders/)"
          DEVNAME=`readlink -f $label`;
          KNAME="${DEVNAME#*/dev/}"
          if [ "$LABEL_TARGET" != "$KNAME" ]; then
              echo "FAIL: label points to $LABEL_TARGET but symlink points to 
$DEVNAME";
              FAIL=1
          fi;
      done
      if [ "$FAIL" == "0" ]; then
          echo "PASS";
          exit 0
      fi
      exit 1
  
  [Regression Potential]
  
   * As bcache minor numbers and these symlinks have been unreliable in
     the past there may be code that makes assumptions about
     /dev/bcache* expanded only to the block devices, versus
     /dev/bcache which is a directory.
  
  [Original Description]
  
  Bcache device names like /dev/bcache0 are unstable.  Bcache does not use
  any predictable ordering when assembling bcache devices, so on systems
  with multiple bcache devices, a symlink to /dev/bcache0 may end up
  pointing do a different device.
  
  the bcache dname symlink should point to the /dev/bcache/by-uuid/<UUID>
  which matches the backing device UUID that's set at creation time.
  
  Related bugs:
-  * bug 1729145: /dev/bcache/by-uuid links not created after reboot
+  * bug 1729145: [kernel] /dev/bcache/by-uuid links not created after reboot

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1728742

Title:
  curtin dname for bcache uses unstable devname instead of UUID

To manage notifications about this bug go to:
https://bugs.launchpad.net/bcache-tools/+bug/1728742/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to