mbox series

[0/5] block: add a sequence number to disks

Message ID 20210206000903.215028-1-mcroce@linux.microsoft.com (mailing list archive)
Headers show
Series block: add a sequence number to disks | expand

Message

Matteo Croce Feb. 6, 2021, 12:08 a.m. UTC
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(-)

Comments

Lennart Poettering Feb. 8, 2021, 8:55 p.m. UTC | #1
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
Matteo Croce Feb. 23, 2021, 3:46 p.m. UTC | #2
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