summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorken <ken@FreeBSD.org>2017-05-08 18:30:55 +0000
committerken <ken@FreeBSD.org>2017-05-08 18:30:55 +0000
commitf8b2253cad4d2da29fac3ed8cf9e226a9f020063 (patch)
tree852a0962c5148f9f61e96ffe82ad37fa4758a346 /sbin
parent194640fd0ae6e384fb8d96a81d8834d9cd8c1488 (diff)
downloadFreeBSD-src-f8b2253cad4d2da29fac3ed8cf9e226a9f020063.zip
FreeBSD-src-f8b2253cad4d2da29fac3ed8cf9e226a9f020063.tar.gz
MFC r317854:
When editing a mode page on a tape drive, do not clear the device specific parameter. Tape drives include write protect (WP), Buffered Mode and Speed settings in the device-specific parameter. Clearing this parameter on a mode select can have the effect of turning off write protect or buffered mode, or changing the speed setting of the tape drive. Disks report DPO/FUA support via the device specific parameter for MODE SENSE, but the bit is reserved for MODE SELECT. So we clear this for disks (and other non-tape devices) to avoid potential errors from the target device. sbin/camcontrol/modeedit.c: Clear the device-specific parameter in the mode page header if we're not operating on a tape drive. Sponsored by: Spectra Logic
Diffstat (limited to 'sbin')
-rw-r--r--sbin/camcontrol/modeedit.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/sbin/camcontrol/modeedit.c b/sbin/camcontrol/modeedit.c
index b636515..e7b877d 100644
--- a/sbin/camcontrol/modeedit.c
+++ b/sbin/camcontrol/modeedit.c
@@ -629,8 +629,21 @@ editlist_save(struct cam_device *device, int dbd, int pc, int page,
/* Recalculate headers & offsets. */
mh->data_length = 0; /* Reserved for MODE SELECT command. */
- mh->dev_spec = 0; /* Clear device-specific parameters. */
mh->blk_desc_len = 0; /* No block descriptors. */
+ /*
+ * Tape drives include write protect (WP), Buffered Mode and Speed
+ * settings in the device-specific parameter. Clearing this
+ * parameter on a mode select can have the effect of turning off
+ * write protect or buffered mode, or changing the speed setting of
+ * the tape drive.
+ *
+ * Disks report DPO/FUA support via the device specific parameter
+ * for MODE SENSE, but the bit is reserved for MODE SELECT. So we
+ * clear this for disks (and other non-tape devices) to avoid
+ * potential errors from the target device.
+ */
+ if (device->pd_type != T_SEQUENTIAL)
+ mh->dev_spec = 0;
mph = MODE_PAGE_HEADER(mh);
mph->page_code &= ~SMPH_PS; /* Reserved for MODE SELECT command. */
OpenPOWER on IntegriCloud