diff mbox

libata: provide the ability to disable a disk via the params.

Message ID 1386464187-6993-1-git-send-email-robbat2@gentoo.org
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

Robin H. Johnson Dec. 8, 2013, 12:56 a.m. UTC
This was posted by a user on StackExchange, who has a failing SSD that's
soldered directly onto the motherboard of his system. The BIOS does not
give any option to disable it at all, so he can't just hide it that way.

The old IDE layer had hdX=noprobe override for situations like this, but
that was never ported to the libata layer.

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
X-URL: http://unix.stackexchange.com/questions/102648/how-to-tell-linux-kernel-3-0-to-completely-ignore-a-failing-disk
X-URL: http://askubuntu.com/questions/352836/how-can-i-tell-linux-kernel-to-completely-ignore-a-disk-as-if-it-was-not-even-co
X-URL: http://superuser.com/questions/599333/how-to-disable-kernel-probing-for-drive
---
 Documentation/kernel-parameters.txt | 2 ++
 drivers/ata/libata-core.c           | 2 ++
 2 files changed, 4 insertions(+)

Comments

Tejun Heo Dec. 12, 2013, 1:39 p.m. UTC | #1
Hello, Robin.

On Sat, Dec 07, 2013 at 04:56:27PM -0800, Robin H. Johnson wrote:
> +		{ "disable",	.horkage_on	= ATA_HORKAGE_DISABLE },
> +		{ "nodisable",	.horkage_off	= ATA_HORKAGE_DISABLE },

Given the current usage of ATA_HORKAGE_DISABLE, I don't think we need
"nodisable".  Let's just add "disable" for now.  Can you please update
the patch and resend?

Thanks.
Robin H. Johnson Dec. 12, 2013, 8:22 p.m. UTC | #2
On Thu, Dec 12, 2013 at 08:39:35AM -0500, Tejun Heo wrote:
> Hello, Robin.
> 
> On Sat, Dec 07, 2013 at 04:56:27PM -0800, Robin H. Johnson wrote:
> > +		{ "disable",	.horkage_on	= ATA_HORKAGE_DISABLE },
> > +		{ "nodisable",	.horkage_off	= ATA_HORKAGE_DISABLE },
> Given the current usage of ATA_HORKAGE_DISABLE, I don't think we need
> "nodisable".  Let's just add "disable" for now.  Can you please update
> the patch and resend?
Before I do so, I have two questions:
1.
Countering your nodisable comment, would it be valid to do:
libata.force=2:disable libata.force=2.02:nodisable
To disable all of port 2 except device 2?

2. One of my friends wondered if it would be worthwhile to add force
keywords for other HORKAGE bits, and if so, should the
ata_lflag/ata_link force bits also be presented?

There are only 3 HORKAGE bits presently available in libata.force:
ATA_HORKAGE_NONCQ
ATA_HORKAGE_DUMP_ID
ATA_HORKAGE_ATAPI_DMADIR

And 3 ata_link flags:
ATA_LFLAG_NO_HRST
ATA_LFLAG_NO_SRST
ATA_LFLAG_RST_ONCE
Levente Kurusa Dec. 12, 2013, 8:36 p.m. UTC | #3
Hi, Robin.

2013-12-12 21:22, Robin H. Johnson:
> On Thu, Dec 12, 2013 at 08:39:35AM -0500, Tejun Heo wrote:
>> Hello, Robin.
>>
>> On Sat, Dec 07, 2013 at 04:56:27PM -0800, Robin H. Johnson wrote:
>>> +		{ "disable",	.horkage_on	= ATA_HORKAGE_DISABLE },
>>> +		{ "nodisable",	.horkage_off	= ATA_HORKAGE_DISABLE },
>> Given the current usage of ATA_HORKAGE_DISABLE, I don't think we need
>> "nodisable".  Let's just add "disable" for now.  Can you please update
>> the patch and resend?
> Before I do so, I have two questions:
> 1.
> Countering your nodisable comment, would it be valid to do:
> libata.force=2:disable libata.force=2.02:nodisable
> To disable all of port 2 except device 2?

I think that makes sense and I support having 'nodisable'.
>
> 2. One of my friends wondered if it would be worthwhile to add force
> keywords for other HORKAGE bits, and if so, should the
> ata_lflag/ata_link force bits also be presented?

I don't think so. Most of the other HORKAGEs are automatically
recognized and applied by the code. I think the only ones
which can cause trouble if not detected at first are the ones that are
currently in the list.
Robin H. Johnson Dec. 12, 2013, 8:47 p.m. UTC | #4
On Thu, Dec 12, 2013 at 09:36:55PM +0100, Levente Kurusa wrote:
> > 2. One of my friends wondered if it would be worthwhile to add force
> > keywords for other HORKAGE bits, and if so, should the
> > ata_lflag/ata_link force bits also be presented?
> I don't think so. Most of the other HORKAGEs are automatically
> recognized and applied by the code. I think the only ones
> which can cause trouble if not detected at first are the ones that are
> currently in the list.
His logic was thinking that it will aid debugging/testing on new buggy
devices if the options are available at boot.

I'd think of the following as candidates for that:
ATA_HORKAGE_NODMA
ATA_HORKAGE_MAX_SEC_128
ATA_HORKAGE_DIAGNOSTIC
ATA_HORKAGE_BROKEN_HPA
ATA_HORKAGE_DISABLE
ATA_HORKAGE_HPA_SIZE
ATA_HORKAGE_IVB
ATA_HORKAGE_STUCK_ERR (only set by code presently, not by blacklist)
ATA_HORKAGE_BRIDGE_OK
ATA_HORKAGE_ATAPI_MOD16_DMA
ATA_HORKAGE_NOSETXFER
ATA_HORKAGE_MAX_SEC_LBA48
Tejun Heo Dec. 13, 2013, 9:15 p.m. UTC | #5
On Thu, Dec 12, 2013 at 09:36:55PM +0100, Levente Kurusa wrote:
> >1.
> >Countering your nodisable comment, would it be valid to do:
> >libata.force=2:disable libata.force=2.02:nodisable
> >To disable all of port 2 except device 2?
> 
> I think that makes sense and I support having 'nodisable'.

I really don't want to.  Let's please add whatever is necessary for
fringe use cases but no more.  It's not like this thing is generally
useful.

> >2. One of my friends wondered if it would be worthwhile to add force
> >keywords for other HORKAGE bits, and if so, should the
> >ata_lflag/ata_link force bits also be presented?
> 
> I don't think so. Most of the other HORKAGEs are automatically
> recognized and applied by the code. I think the only ones
> which can cause trouble if not detected at first are the ones that are
> currently in the list.

Again, just whatever is immediately necessary, please.

Thanks.
diff mbox

Patch

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 50680a5..40bf5ff 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1529,6 +1529,8 @@  bytes respectively. Such letter suffixes can also be entirely omitted.
 
 			* atapi_dmadir: Enable ATAPI DMADIR bridge support
 
+			* [no]disable: Enable or disable this device.
+
 			If there are multiple matching configurations changing
 			the same attribute, the last one is used.
 
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 75b9367..5069a96 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -6519,6 +6519,8 @@  static int __init ata_parse_force_one(char **cur,
 		{ "norst",	.lflags		= ATA_LFLAG_NO_HRST | ATA_LFLAG_NO_SRST },
 		{ "rstonce",	.lflags		= ATA_LFLAG_RST_ONCE },
 		{ "atapi_dmadir", .horkage_on	= ATA_HORKAGE_ATAPI_DMADIR },
+		{ "disable",	.horkage_on	= ATA_HORKAGE_DISABLE },
+		{ "nodisable",	.horkage_off	= ATA_HORKAGE_DISABLE },
 	};
 	char *start = *cur, *p = *cur;
 	char *id, *val, *endp;