• C
    block: add a hard-readonly flag to struct gendisk · 52f019d4
    Christoph Hellwig 提交于
    Commit 20bd1d02 ("scsi: sd: Keep disk read-only when re-reading
    partition") addressed a long-standing problem with user read-only
    policy being overridden as a result of a device-initiated revalidate.
    The commit has since been reverted due to a regression that left some
    USB devices read-only indefinitely.
    
    To fix the underlying problems with revalidate we need to keep track
    of hardware state and user policy separately.
    
    The gendisk has been updated to reflect the current hardware state set
    by the device driver. This is done to allow returning the device to
    the hardware state once the user clears the BLKROSET flag.
    
    The resulting semantics are as follows:
    
     - If BLKROSET sets a given partition read-only, that partition will
       remain read-only even if the underlying storage stack initiates a
       revalidate. However, the BLKRRPART ioctl will cause the partition
       table to be dropped and any user policy on partitions will be lost.
    
     - If BLKROSET has not been set, both the whole disk device and any
       partitions will reflect the current write-protect state of the
       underlying device.
    
    Based on a patch from Martin K. Petersen <martin.petersen@oracle.com>.
    Reported-by: NOleksii Kurochko <olkuroch@cisco.com>
    Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=201221Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Reviewed-by: NMing Lei <ming.lei@redhat.com>
    Reviewed-by: NMartin K. Petersen <martin.petersen@oracle.com>
    Reviewed-by: NHannes Reinecke <hare@suse.de>
    Signed-off-by: NJens Axboe <axboe@kernel.dk>
    52f019d4
blk-core.c 47.8 KB