diff options
author | ken <ken@FreeBSD.org> | 2017-05-08 18:30:55 +0000 |
---|---|---|
committer | ken <ken@FreeBSD.org> | 2017-05-08 18:30:55 +0000 |
commit | f8b2253cad4d2da29fac3ed8cf9e226a9f020063 (patch) | |
tree | 852a0962c5148f9f61e96ffe82ad37fa4758a346 /sbin | |
parent | 194640fd0ae6e384fb8d96a81d8834d9cd8c1488 (diff) | |
download | FreeBSD-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.c | 15 |
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. */ |