Hi, We found a problem when using SCSI device. Setting the read-only attribute to scsi disk by calling "ioctl(fd, BLKROSET, &ro)" only block the first write operation. In detail: 1: set ioctl(fd, BLKROSET, &ro) 2: dd to the block device(as /dev/sdc), write failed 3: dd to the block device again, write successed Above operation can be reproduced by following script: #! /bin/bash DEV=$1 [[ "$DEV" =~ ^/dev/sd ]] || echo "Need a scsi device to reproduce" blockdev --setro $DEV echo $DEV getro is [ $(blockdev --getro $DEV) ] dd if=/dev/zero of=$DEV count=1 echo $DEV getro is [ $(blockdev --getro $1) ] dd if=/dev/zero of=$DEV count=1 Environment: - Kernel: ALL We reproduced this problem in following kernel version: 4.15 4.10, 3.10. And by reference source, we think the problem exist in all versions. - Driver: SCSI it exists only when using SCSI disks, and xen-blk,virtio-blk do not have such a problem Here is a test result: # uname -r 4.15.0+ # ./reproduce.sh /dev/sda /dev/sda getro is [ 1 ] dd: writing to ‘/dev/sda’: Operation not permitted 1+0 records in 0+0 records out 0 bytes (0 B) copied, 0.000258806 s, 0.0 kB/s /dev/sda getro is [ 0 ] 1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.000321595 s, 1.6 MB/s ---
Issue fixed by: 20bd1d026aac ("scsi: sd: Keep disk read-only when re-reading partition") https://marc.info/?l=linux-scsi&m=151991330722943&w=2