Message ID | 20241125140301.3912-5-Kai.Makisara@kolumbus.fi |
---|---|
State | New |
Headers | show |
Series | scsi: st: scsi_error: More reset patches | expand |
Reviewed-by: John Meneghini <jmeneghi@redhat.com> Tested-by: John Meneghini <jmeneghi@redhat.com> On 11/25/24 09:03, Kai Mäkisara wrote: > If the value read from the file is 1, reads and writes from/to the > device are blocked because the tape position may not match user's > expectation (tape rewound after device reset). > > Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi> > --- > Documentation/scsi/st.rst | 5 +++++ > drivers/scsi/st.c | 19 +++++++++++++++++++ > 2 files changed, 24 insertions(+) > > diff --git a/Documentation/scsi/st.rst b/Documentation/scsi/st.rst > index d3b28c28d74c..2209f03faad3 100644 > --- a/Documentation/scsi/st.rst > +++ b/Documentation/scsi/st.rst > @@ -157,6 +157,11 @@ enabled driver and mode options. The value in the file is a bit mask where the > bit definitions are the same as those used with MTSETDRVBUFFER in setting the > options. > > +Each directory contains the entry 'reset_blocked'. If this value is one, > +reading and writing to the device is blocked after device reset. Most > +devices rewind the tape after reset and the writes/read don't access the > +tape position the user expects. > + > A link named 'tape' is made from the SCSI device directory to the class > directory corresponding to the mode 0 auto-rewind device (e.g., st0). > > diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c > index ad86dfbc8919..0e6a87f1f47f 100644 > --- a/drivers/scsi/st.c > +++ b/drivers/scsi/st.c > @@ -4697,6 +4697,24 @@ options_show(struct device *dev, struct device_attribute *attr, char *buf) > } > static DEVICE_ATTR_RO(options); > > +/** > + * reset_blocked_show - Value 1 indicates that reads, writes, etc. are blocked > + * because a device reset has occurred and no operation positioning the tape > + * has been issued. > + * @dev: struct device > + * @attr: attribute structure > + * @buf: buffer to return formatted data in > + */ > +static ssize_t reset_blocked_show(struct device *dev, > + struct device_attribute *attr, char *buf) > +{ > + struct st_modedef *STm = dev_get_drvdata(dev); > + struct scsi_tape *STp = STm->tape; > + > + return sprintf(buf, "%d", STp->pos_unknown); > +} > +static DEVICE_ATTR_RO(reset_blocked); > + > /* Support for tape stats */ > > /** > @@ -4881,6 +4899,7 @@ static struct attribute *st_dev_attrs[] = { > &dev_attr_default_density.attr, > &dev_attr_default_compression.attr, > &dev_attr_options.attr, > + &dev_attr_reset_blocked.attr, > NULL, > }; >
diff --git a/Documentation/scsi/st.rst b/Documentation/scsi/st.rst index d3b28c28d74c..2209f03faad3 100644 --- a/Documentation/scsi/st.rst +++ b/Documentation/scsi/st.rst @@ -157,6 +157,11 @@ enabled driver and mode options. The value in the file is a bit mask where the bit definitions are the same as those used with MTSETDRVBUFFER in setting the options. +Each directory contains the entry 'reset_blocked'. If this value is one, +reading and writing to the device is blocked after device reset. Most +devices rewind the tape after reset and the writes/read don't access the +tape position the user expects. + A link named 'tape' is made from the SCSI device directory to the class directory corresponding to the mode 0 auto-rewind device (e.g., st0). diff --git a/drivers/scsi/st.c b/drivers/scsi/st.c index ad86dfbc8919..0e6a87f1f47f 100644 --- a/drivers/scsi/st.c +++ b/drivers/scsi/st.c @@ -4697,6 +4697,24 @@ options_show(struct device *dev, struct device_attribute *attr, char *buf) } static DEVICE_ATTR_RO(options); +/** + * reset_blocked_show - Value 1 indicates that reads, writes, etc. are blocked + * because a device reset has occurred and no operation positioning the tape + * has been issued. + * @dev: struct device + * @attr: attribute structure + * @buf: buffer to return formatted data in + */ +static ssize_t reset_blocked_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct st_modedef *STm = dev_get_drvdata(dev); + struct scsi_tape *STp = STm->tape; + + return sprintf(buf, "%d", STp->pos_unknown); +} +static DEVICE_ATTR_RO(reset_blocked); + /* Support for tape stats */ /** @@ -4881,6 +4899,7 @@ static struct attribute *st_dev_attrs[] = { &dev_attr_default_density.attr, &dev_attr_default_compression.attr, &dev_attr_options.attr, + &dev_attr_reset_blocked.attr, NULL, };
If the value read from the file is 1, reads and writes from/to the device are blocked because the tape position may not match user's expectation (tape rewound after device reset). Signed-off-by: Kai Mäkisara <Kai.Makisara@kolumbus.fi> --- Documentation/scsi/st.rst | 5 +++++ drivers/scsi/st.c | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+)