Re: TYPE_RBC cache fixes (sbp2.c affected)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Al Viro wrote:
	a) TYPE_SDAD renamed to TYPE_RBC and taken to scsi.h
	b) in sbp2.c remapping of TYPE_RPB to TYPE_DISK turned off
	c) relevant places in midlayer and sd.c taught to accept TYPE_RBC
	d) sd.c::sd_read_cache_type() looks into page 6 when dealing with
TYPE_RBC - these guys have writeback cache flag there and are not guaranteed
to have page 8 at all.
	e) sd_read_cache_type() got an extra sanity check - it checks that
it got the page it asked for before using its contents.  And screams if
mismatch had happened.  Rationale: there are broken devices out there that
are "helpful" enough to go for "I don't have a page you've asked for, here,
have another one".  For example, PL3507 had been caught doing just that...
	f) sbp2 sets sdev->use_10_for_rw and sdev->use_10_for_ms instead
of bothering to remap READ6/WRITE6/MOD_SENSE, so most of the conversions
in there are gone now.

Al, I applied this patch and tested it with a Lava Firewire-HC enclosure and a Seagate 7200.7 ATA disk. The enclosure uses a OXFW900-TQ-A bridge chip.

It works ok, with a few wrinkles. MODE SENSE+SELECT
(6) work properly but MODE SENSE(10) responds with
the 6 byte variant response!? If nothing else it
was useful for testing sdparm and sg_modes coping
with such cases.

I will submit a patch for driver/scsi/scsi.c so it
stops saying the device type (in the output of
"cat /proc/scsi/scsi") is "unknown" for RBC devices.

Here is some output from sdparm (version 0.92):

# sdparm /dev/sdd -a
    /dev/sdd: ST380011  A                    [pdt=0xe]
RBC device parameters (RBC) mode page:
>>> warning: mode page seems malformed, try '--flexible'
  WCD         0  [ def:  0, saved:  0]
  LBS       45310  [ def:45310, saved:45310]
  NLBS        0  [ def:  0, saved:  0]
  P_P         0  [ def:  0, saved:  0]
  READD       0  [ def:  0, saved:  0]
  WRITED      0  [ def:  0, saved:  0]
  FORMATD     0  [ def:  0, saved:  0]
  LOCKD       0  [ def:  0, saved:  0]

# sdparm /dev/sdd -a -f
    /dev/sdd: ST380011  A                    [pdt=0xe]
RBC device parameters (RBC) mode page:
  WCD         0  [ def:  0, saved:  0]
  LBS       512  [ def:512, saved:512]
  NLBS      156301488  [ def:156301488, saved:156301488]
  P_P       254  [ def:254, saved:254]
  READD       0  [ def:  0, saved:  0]
  WRITED      0  [ def:  0, saved:  0]
  FORMATD     0  [ def:  0, saved:  0]
  LOCKD       0  [ def:  0, saved:  0]

# sdparm /dev/sdd -a -6
    /dev/sdd: ST380011  A                    [pdt=0xe]
RBC device parameters (RBC) mode page:
  WCD         0  [ def:  0, saved:  0]
  LBS       512  [ def:512, saved:512]
  NLBS      156301488  [ def:156301488, saved:156301488]
  P_P       254  [ def:254, saved:254]
  READD       0  [ def:  0, saved:  0]
  WRITED      0  [ def:  0, saved:  0]
  FORMATD     0  [ def:  0, saved:  0]
  LOCKD       0  [ def:  0, saved:  0]

# sdparm /dev/sdd -s WCD -6
    /dev/sdd: ST380011  A                    [pdt=0xe]

# echo $?
0

# sdparm /dev/sdd -g WCD -6
WCD         1  [ def:  1, saved:  1]

# sdparm -i /dev/sdd
    /dev/sdb: ST380011  A                    [pdt=0xe]
Device identification VPD page:
  Addressed logical unit:
    id_type: EUI-64 based,  code_set: Binary
      [0x00043b000000071d]

I found that the WCD field and no others could
be changed with sdparm. When other fields were
changed there was no complaint from the device
but a subsequent get showed no change.

This experiment shows that if sd and the mid level rely
on the response from a MODE SENSE (10) without doing a
sanity check, then they will be using corrupted data.

Doug Gilbert
-
: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]
  Powered by Linux