From: Brian King <brking@us.ibm.com>
To: Brian King <brking@us.ibm.com>
Cc: dougg@torque.net, Andrew Morton <akpm@osdl.org>,
linux-scsi@vger.kernel.org, Ruben Faelens <parasietje@gmail.com>
Subject: Re: Fw: SCSI device not spinning up on rw
Date: Mon, 05 Jun 2006 13:04:46 -0500 [thread overview]
Message-ID: <4484723E.7060906@us.ibm.com> (raw)
In-Reply-To: <44835AA2.1070809@us.ibm.com>
[-- Attachment #1: Type: text/plain, Size: 1403 bytes --]
Brian King wrote:
> Douglas Gilbert wrote:
>>> I have a SCSI disk, which I want to spin down when the system is not in
>>> use. I do this by using sdparm, scsi-spin or sg-utils. These tools all
>>> spin down the SCSI drive by using an IOCTL.
>>>
>>> Problem is that the kernel doesn't spin the drive back up. When a
>>> process requests data from the disk (a simple ls), the kernel responds
>>> with an I/O error. After some of these errors, reiserfs marks the drive
>>> read-only.
>
> Setting sdev->allow_restart in struct scsi_device will cause sense
> key/code/qual of 02/04/02 (not ready, initialization command required)
> to wake up the scsi error handler and will force scsi core to issue
> a start unit command to the disk. I added this a while back to handle
> ipr raid arrays which need a start unit command each time the adapter
> gets reset. It would be easy enough for sd to use this, either
> all the time, or only when directed to, or we could add a sysfs attribute
> to the disk to enable/disable this behavior.
Please try the attached patch. It adds a sysfs device attribute "allow_restart".
If you set it to 1, then scsi core will issue a start unit when it sees 02/04/02
sense data. The attribute is in the same place as the FUA and cache_type
attributes (eg. /sys/block/sdc/device/scsi_disk:1:1:9:0/allow_restart).
--
Brian King
eServer Storage I/O
IBM Linux Technology Center
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: sd_allow_restart_sysfs_attr.patch --]
[-- Type: text/x-patch; name="sd_allow_restart_sysfs_attr.patch", Size: 1621 bytes --]
Signed-off-by: Brian King <brking@us.ibm.com>
---
linux-2.6-bjking1/drivers/scsi/sd.c | 26 ++++++++++++++++++++++++++
1 files changed, 26 insertions(+)
diff -puN drivers/scsi/sd.c~sd_allow_restart_sysfs_attr drivers/scsi/sd.c
--- linux-2.6/drivers/scsi/sd.c~sd_allow_restart_sysfs_attr 2006-06-05 12:33:06.000000000 -0500
+++ linux-2.6-bjking1/drivers/scsi/sd.c 2006-06-05 12:34:22.000000000 -0500
@@ -208,6 +208,23 @@ static ssize_t sd_store_cache_type(struc
return count;
}
+static ssize_t sd_store_allow_restart(struct class_device *cdev, const char *buf,
+ size_t count)
+{
+ struct scsi_disk *sdkp = to_scsi_disk(cdev);
+ struct scsi_device *sdp = sdkp->device;
+
+ if (!capable(CAP_SYS_ADMIN))
+ return -EACCES;
+
+ if (sdp->type != TYPE_DISK)
+ return -EINVAL;
+
+ sdp->allow_restart = simple_strtoul(buf, NULL, 10);
+
+ return count;
+}
+
static ssize_t sd_show_cache_type(struct class_device *cdev, char *buf)
{
struct scsi_disk *sdkp = to_scsi_disk(cdev);
@@ -223,10 +240,19 @@ static ssize_t sd_show_fua(struct class_
return snprintf(buf, 20, "%u\n", sdkp->DPOFUA);
}
+static ssize_t sd_show_allow_restart(struct class_device *cdev, char *buf)
+{
+ struct scsi_disk *sdkp = to_scsi_disk(cdev);
+
+ return snprintf(buf, 40, "%d\n", sdkp->device->allow_restart);
+}
+
static struct class_device_attribute sd_disk_attrs[] = {
__ATTR(cache_type, S_IRUGO|S_IWUSR, sd_show_cache_type,
sd_store_cache_type),
__ATTR(FUA, S_IRUGO, sd_show_fua, NULL),
+ __ATTR(allow_restart, S_IRUGO|S_IWUSR, sd_show_allow_restart,
+ sd_store_allow_restart),
__ATTR_NULL,
};
_
next prev parent reply other threads:[~2006-06-05 18:04 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-06-04 1:23 Fw: SCSI device not spinning up on rw Andrew Morton
2006-06-04 4:12 ` Douglas Gilbert
2006-06-04 22:11 ` Brian King
2006-06-05 18:04 ` Brian King [this message]
2006-07-11 6:20 ` Olaf Hering
2006-07-11 12:19 ` Stefan Richter
2006-07-11 12:57 ` Olaf Hering
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4484723E.7060906@us.ibm.com \
--to=brking@us.ibm.com \
--cc=akpm@osdl.org \
--cc=dougg@torque.net \
--cc=linux-scsi@vger.kernel.org \
--cc=parasietje@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.