LVM snapshot broke between 4.14 and 4.16

From: WGH
Date: Thu Aug 02 2018 - 12:04:02 EST


(I originally reported this problem here:
https://bugzilla.kernel.org/show_bug.cgi?id=200439)

When I updated from 4.14 to 4.16, my LVM snapshotting script broke for
no apparent reason.

My script has the following line, and it fails like this:
+ lvcreate --size 5G --snapshot --name snap0 --permission r
/dev/mapper/vg0-lvol_rootfs
 device-mapper: create ioctl on
vg0-snap0-cowLVM-sDdIeh9cecWdaNyRfZC31mxgfwTa4sOeHMJXVOykGVRtfP6Aii7IHvwS066AOLOM-cow
failed: Device or resource busy
 Failed to lock logical volume vg0/lvol_rootfs.
 Aborting. Manual intervention required.

At the same time, some errors appear in dmesg as well:
[ÂÂ 26.145279] generic_make_request: Trying to write to read-only
block-device dm-3 (partno 0)
[ÂÂ 26.145288] device-mapper: persistent snapshot: write_header failed
[ÂÂ 26.145847] device-mapper: table: 253:4: snapshot: Failed to read
snapshot metadata
[ÂÂ 26.145851] device-mapper: ioctl: error adding target to table

I bisected the vanilla kernel, and the first bad commit is
[721c7fc701c71f693307d274d2b346a1ecd4a534] block: fail op_is_write()
requests to read-only partitions