Comment 0 for bug 1729145

Revision history for this message
Ryan Harper (raharper) wrote :

1. $ lsb_release -rd
Description: Ubuntu 17.10
Release: 17.10

2. $ apt-cache policy linux-image-`uname -r`
linux-image-4.13.0-16-generic:
  Installed: 4.13.0-16.19
  Candidate: 4.13.0-16.19
  Version table:
 *** 4.13.0-16.19 500
        500 http://nova.clouds.archive.ubuntu.com/ubuntu artful/main amd64 Packages
        100 /var/lib/dpkg/status

3. After creating some bcache devices and rebooting /dev/bcache/by-uuid/<UUID> -> ../../bcacheN
symlinks point to the current bcache device which is caching the dev.uuid found after creating a backing device.

4. /dev/bcache/by-uuid does not exist and there are not symlinks underneath

It appears that since the initramfs loads the bcache module which probes and finds all of the cache devices and backing devices then once the rootfs is mounted and udev gets to run, the bcache kernel module does not emit the CACHED_UUID value into the environment if the underlying devices are already registered.

In dmesg, one can see that prior to mounting the rootfs, we see bcache register events:

[ 5.333973] bcache: register_bdev() registered backing device vdb2
[ 5.354138] bcache: register_bdev() registered backing device vdb4
[ 5.365665] bcache: register_bdev() registered backing device vdb3
[ 5.397720] bcache: bch_journal_replay() journal replay done, 0 keys in 1 entries, seq 1
[ 5.428683] bcache: register_cache() registered cache device vdb1

then rootfs ismounted and systemd starts systemd-udev

[ 9.350889] systemd[1]: Listening on udev Kernel Socket.

And then the coldplug replay of kernel events triggers /lib/udev/rules.d/69-bcache.rules
which invokes /lib/udev/bcache-register which writes the device name (/dev/vdb1 or /dev/bcache0) into /sys/fs/bcache/register and results is the bcache kernel driver attempting to register the block device. However, there is already a bcache device associated already and registration fails

[ 11.173141] bcache: register_bcache() error opening /dev/vdb2: device already registered
[ 11.184617] bcache: register_bcache() error opening /dev/vdb3: device already registered
[ 11.199130] bcache: register_bcache() error opening /dev/vdb1: device already registered
[ 11.271694] bcache: register_bcache() error opening /dev/vdb4: device already registered

The problem then is that only a kernel call to bch_cached_dev_run() which happens like this:

bcache_register()
  register_bdev()
    bch_cached_dev_run()
      kobject_uevent_env(&disk_to_dev(d->disk)->kobj, KOBJ_CHANGE, env);

where env includes:
    "DRIVER=bcache",
        kasprintf(GFP_KERNEL, "CACHED_UUID=%pU", dc->sb.uuid),
        NULL,
        NULL,
    };

Since that event is not emitted for any previously registered device, then the symlink will not be created.

ProblemType: Bug
DistroRelease: Ubuntu 17.10
Package: linux-image-4.13.0-16-generic 4.13.0-16.19
ProcVersionSignature: User Name 4.13.0-16.19-generic 4.13.4
Uname: Linux 4.13.0-16-generic x86_64
AlsaDevices:
 total 0
 crw-rw---- 1 root audio 116, 1 Oct 31 22:09 seq
 crw-rw---- 1 root audio 116, 33 Oct 31 22:09 timer
AplayDevices: Error: [Errno 2] No such file or directory: 'aplay': 'aplay'
ApportVersion: 2.20.7-0ubuntu3.1
Architecture: amd64
ArecordDevices: Error: [Errno 2] No such file or directory: 'arecord': 'arecord'
AudioDevicesInUse: Error: command ['fuser', '-v', '/dev/snd/seq', '/dev/snd/timer'] failed with exit code 1:
CRDA: N/A
Date: Wed Nov 1 01:39:01 2017
Ec2AMI: ami-0000030b
Ec2AMIManifest: FIXME
Ec2AvailabilityZone: nova
Ec2InstanceType: m1.small
Ec2Kernel: unavailable
Ec2Ramdisk: unavailable
IwConfig: Error: [Errno 2] No such file or directory: 'iwconfig': 'iwconfig'
Lsusb:
 Bus 001 Device 002: ID 0627:0001 Adomax Technology Co., Ltd
 Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
MachineType: OpenStack Foundation OpenStack Nova
PciMultimedia:

ProcEnviron:
 TERM=xterm
 PATH=(custom, no user)
 XDG_RUNTIME_DIR=<set>
 LANG=C.UTF-8
 SHELL=/bin/bash
ProcFB:

ProcKernelCmdLine: BOOT_IMAGE=/boot/vmlinuz-4.13.0-16-generic root=LABEL=cloudimg-rootfs ro console=tty1 console=ttyS0
RelatedPackageVersions:
 linux-restricted-modules-4.13.0-16-generic N/A
 linux-backports-modules-4.13.0-16-generic N/A
 linux-firmware N/A
RfKill: Error: [Errno 2] No such file or directory: 'rfkill': 'rfkill'
SourcePackage: linux
UpgradeStatus: No upgrade log present (probably fresh install)
dmi.bios.date: 04/01/2014
dmi.bios.vendor: SeaBIOS
dmi.bios.version: 1.10.1-1ubuntu1~cloud0
dmi.chassis.type: 1
dmi.chassis.vendor: QEMU
dmi.chassis.version: pc-i440fx-zesty
dmi.modalias: dmi:bvnSeaBIOS:bvr1.10.1-1ubuntu1~cloud0:bd04/01/2014:svnOpenStackFoundation:pnOpenStackNova:pvr15.0.7:cvnQEMU:ct1:cvrpc-i440fx-zesty:
dmi.product.family: Virtual Machine
dmi.product.name: OpenStack Nova
dmi.product.version: 15.0.7
dmi.sys.vendor: OpenStack Foundation