Message ID | 20210206000903.215028-1-mcroce@linux.microsoft.com (mailing list archive) |
---|---|
Headers | show |
Series | block: add a sequence number to disks | expand |
On Sa, 06.02.21 01:08, Matteo Croce (mcroce@linux.microsoft.com) wrote: > From: Matteo Croce <mcroce@microsoft.com> > > With this series a monotonically increasing number is added to disks, > precisely in the genhd struct, and it's exported in sysfs and uevent. > > This helps the userspace correlate events for devices that reuse the > same device, like loop. > > The first patch is the core one, the 2..4 expose the information in > different ways, while the last one increase the sequence number for > loop devices at every attach. Patch set looks excellent to me. This would be great to have for the systems project, as it would allow us to fix some major races around loop device allocation, that are relatively easily triggered on loaded systems. Lennart
On Sat, Feb 6, 2021 at 1:09 AM Matteo Croce <mcroce@linux.microsoft.com> wrote: > > From: Matteo Croce <mcroce@microsoft.com> > > With this series a monotonically increasing number is added to disks, > precisely in the genhd struct, and it's exported in sysfs and uevent. > > This helps the userspace correlate events for devices that reuse the > same device, like loop. > > The first patch is the core one, the 2..4 expose the information in > different ways, while the last one increase the sequence number for > loop devices at every attach. > > # udevadm monitor -kp |grep -e ^DEVNAME -e ^DISKSEQ & > [1] 523 > # losetup -fP 3part > [ 3698.615848] loop0: detected capacity change from 16384 to 0 > DEVNAME=/dev/loop0 > DISKSEQ=13 > [ 3698.647189] loop0: p1 p2 p3 > DEVNAME=/dev/loop0 > DISKSEQ=13 > DEVNAME=/dev/loop0p1 > DISKSEQ=13 > DEVNAME=/dev/loop0p2 > DISKSEQ=13 > DEVNAME=/dev/loop0p3 > DISKSEQ=13 > # losetup -fP 2part > [ 3705.170766] loop1: detected capacity change from 40960 to 0 > DEVNAME=/dev/loop1 > DISKSEQ=14 > [ 3705.247280] loop1: p1 p2 > DEVNAME=/dev/loop1 > DISKSEQ=14 > DEVNAME=/dev/loop1p1 > DISKSEQ=14 > DEVNAME=/dev/loop1p2 > DISKSEQ=14 > # ./getdiskseq /dev/loop* > /dev/loop0: 13 > /dev/loop0p1: 13 > /dev/loop0p2: 13 > /dev/loop0p3: 13 > /dev/loop1: 14 > /dev/loop1p1: 14 > /dev/loop1p2: 14 > /dev/loop2: 5 > /dev/loop3: 6 > /dev/loop-control: Function not implemented > # grep . /sys/class/block/*/diskseq > /sys/class/block/loop0/diskseq:13 > /sys/class/block/loop1/diskseq:14 > /sys/class/block/loop2/diskseq:5 > /sys/class/block/loop3/diskseq:6 > /sys/class/block/ram0/diskseq:1 > /sys/class/block/ram1/diskseq:2 > /sys/class/block/vda/diskseq:7 > > If merged, this feature will immediately used by the userspace: > https://github.com/systemd/systemd/issues/17469#issuecomment-762919781 > > Matteo Croce (5): > block: add disk sequence number > block: add ioctl to read the disk sequence number > block: refactor sysfs code > block: export diskseq in sysfs > loop: increment sequence number > > Documentation/ABI/testing/sysfs-block | 12 ++++++++ > block/genhd.c | 43 ++++++++++++++++++++++++--- > block/ioctl.c | 2 ++ > drivers/block/loop.c | 3 ++ > include/linux/genhd.h | 2 ++ > include/uapi/linux/fs.h | 1 + > 6 files changed, 59 insertions(+), 4 deletions(-) > > -- > 2.29.2 > Hi, Did anyone have a chance to look at this series? Ideas or suggestions? Regards, -- per aspera ad upstream
From: Matteo Croce <mcroce@microsoft.com> With this series a monotonically increasing number is added to disks, precisely in the genhd struct, and it's exported in sysfs and uevent. This helps the userspace correlate events for devices that reuse the same device, like loop. The first patch is the core one, the 2..4 expose the information in different ways, while the last one increase the sequence number for loop devices at every attach. # udevadm monitor -kp |grep -e ^DEVNAME -e ^DISKSEQ & [1] 523 # losetup -fP 3part [ 3698.615848] loop0: detected capacity change from 16384 to 0 DEVNAME=/dev/loop0 DISKSEQ=13 [ 3698.647189] loop0: p1 p2 p3 DEVNAME=/dev/loop0 DISKSEQ=13 DEVNAME=/dev/loop0p1 DISKSEQ=13 DEVNAME=/dev/loop0p2 DISKSEQ=13 DEVNAME=/dev/loop0p3 DISKSEQ=13 # losetup -fP 2part [ 3705.170766] loop1: detected capacity change from 40960 to 0 DEVNAME=/dev/loop1 DISKSEQ=14 [ 3705.247280] loop1: p1 p2 DEVNAME=/dev/loop1 DISKSEQ=14 DEVNAME=/dev/loop1p1 DISKSEQ=14 DEVNAME=/dev/loop1p2 DISKSEQ=14 # ./getdiskseq /dev/loop* /dev/loop0: 13 /dev/loop0p1: 13 /dev/loop0p2: 13 /dev/loop0p3: 13 /dev/loop1: 14 /dev/loop1p1: 14 /dev/loop1p2: 14 /dev/loop2: 5 /dev/loop3: 6 /dev/loop-control: Function not implemented # grep . /sys/class/block/*/diskseq /sys/class/block/loop0/diskseq:13 /sys/class/block/loop1/diskseq:14 /sys/class/block/loop2/diskseq:5 /sys/class/block/loop3/diskseq:6 /sys/class/block/ram0/diskseq:1 /sys/class/block/ram1/diskseq:2 /sys/class/block/vda/diskseq:7 If merged, this feature will immediately used by the userspace: https://github.com/systemd/systemd/issues/17469#issuecomment-762919781 Matteo Croce (5): block: add disk sequence number block: add ioctl to read the disk sequence number block: refactor sysfs code block: export diskseq in sysfs loop: increment sequence number Documentation/ABI/testing/sysfs-block | 12 ++++++++ block/genhd.c | 43 ++++++++++++++++++++++++--- block/ioctl.c | 2 ++ drivers/block/loop.c | 3 ++ include/linux/genhd.h | 2 ++ include/uapi/linux/fs.h | 1 + 6 files changed, 59 insertions(+), 4 deletions(-)