| From 8acf608e602f6ec38b7cc37b04c80f1ce9a1a6cc Mon Sep 17 00:00:00 2001 |
| From: "Martin K. Petersen" <martin.petersen@oracle.com> |
| Date: Mon, 20 May 2019 10:57:18 -0400 |
| Subject: Revert "scsi: sd: Keep disk read-only when re-reading partition" |
| |
| From: Martin K. Petersen <martin.petersen@oracle.com> |
| |
| commit 8acf608e602f6ec38b7cc37b04c80f1ce9a1a6cc upstream. |
| |
| This reverts commit 20bd1d026aacc5399464f8328f305985c493cde3. |
| |
| This patch introduced regressions for devices that come online in |
| read-only state and subsequently switch to read-write. |
| |
| Given how the partition code is currently implemented it is not |
| possible to persist the read-only flag across a device revalidate |
| call. This may need to get addressed in the future since it is common |
| for user applications to proactively call BLKRRPART. |
| |
| Reverting this commit will re-introduce a regression where a |
| device-initiated revalidate event will cause the admin state to be |
| forgotten. A separate patch will address this issue. |
| |
| Fixes: 20bd1d026aac ("scsi: sd: Keep disk read-only when re-reading partition") |
| Cc: <stable@vger.kernel.org> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/scsi/sd.c | 3 +-- |
| 1 file changed, 1 insertion(+), 2 deletions(-) |
| |
| --- a/drivers/scsi/sd.c |
| +++ b/drivers/scsi/sd.c |
| @@ -2603,7 +2603,6 @@ sd_read_write_protect_flag(struct scsi_d |
| int res; |
| struct scsi_device *sdp = sdkp->device; |
| struct scsi_mode_data data; |
| - int disk_ro = get_disk_ro(sdkp->disk); |
| int old_wp = sdkp->write_prot; |
| |
| set_disk_ro(sdkp->disk, 0); |
| @@ -2644,7 +2643,7 @@ sd_read_write_protect_flag(struct scsi_d |
| "Test WP failed, assume Write Enabled\n"); |
| } else { |
| sdkp->write_prot = ((data.device_specific & 0x80) != 0); |
| - set_disk_ro(sdkp->disk, sdkp->write_prot || disk_ro); |
| + set_disk_ro(sdkp->disk, sdkp->write_prot); |
| if (sdkp->first_scan || old_wp != sdkp->write_prot) { |
| sd_printk(KERN_NOTICE, sdkp, "Write Protect is %s\n", |
| sdkp->write_prot ? "on" : "off"); |