mirror of
https://github.com/adulau/aha.git
synced 2024-12-30 12:46:17 +00:00
[libata] blacklist Maxtor*BANC* using new wildcard blacklist matching
Support the use of '*' in model_num and model_rev entries in ata_device_blacklist[]. Based largely on David Milburn's "libata-core: support wildcard matching in ata_blacklist_entry" patch. Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
ec300d99ef
commit
539cc7c70c
1 changed files with 22 additions and 10 deletions
|
@ -3814,16 +3814,11 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||||
/* http://thread.gmane.org/gmane.linux.ide/14907 */
|
/* http://thread.gmane.org/gmane.linux.ide/14907 */
|
||||||
{ "FUJITSU MHT2060BH", NULL, ATA_HORKAGE_NONCQ },
|
{ "FUJITSU MHT2060BH", NULL, ATA_HORKAGE_NONCQ },
|
||||||
/* NCQ is broken */
|
/* NCQ is broken */
|
||||||
{ "Maxtor 6L250S0", "BANC1G10", ATA_HORKAGE_NONCQ },
|
{ "Maxtor *", "BANC*", ATA_HORKAGE_NONCQ },
|
||||||
{ "Maxtor 6B200M0", "BANC1BM0", ATA_HORKAGE_NONCQ },
|
|
||||||
{ "Maxtor 6B200M0", "BANC1B10", ATA_HORKAGE_NONCQ },
|
|
||||||
{ "Maxtor 7B250S0", "BANC1B70", ATA_HORKAGE_NONCQ, },
|
|
||||||
{ "Maxtor 7B300S0", "BANC1B70", ATA_HORKAGE_NONCQ },
|
|
||||||
{ "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ },
|
{ "Maxtor 7V300F0", "VA111630", ATA_HORKAGE_NONCQ },
|
||||||
{ "HITACHI HDS7250SASUN500G 0621KTAWSD", "K2AOAJ0AHITACHI",
|
{ "HITACHI HDS7250SASUN500G 0621KTAWSD", "K2AOAJ0AHITACHI",
|
||||||
ATA_HORKAGE_NONCQ },
|
ATA_HORKAGE_NONCQ },
|
||||||
/* NCQ hard hangs device under heavier load, needs hard power cycle */
|
|
||||||
{ "Maxtor 6B250S0", "BANC1B70", ATA_HORKAGE_NONCQ },
|
|
||||||
/* Blacklist entries taken from Silicon Image 3124/3132
|
/* Blacklist entries taken from Silicon Image 3124/3132
|
||||||
Windows driver .inf file - also several Linux problem reports */
|
Windows driver .inf file - also several Linux problem reports */
|
||||||
{ "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, },
|
{ "HTS541060G9SA00", "MB3OC60D", ATA_HORKAGE_NONCQ, },
|
||||||
|
@ -3849,6 +3844,23 @@ static const struct ata_blacklist_entry ata_device_blacklist [] = {
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int strn_pattern_cmp(const char *patt, const char *name, int wildchar)
|
||||||
|
{
|
||||||
|
const char *p;
|
||||||
|
int len;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check for trailing wildcard: *\0
|
||||||
|
*/
|
||||||
|
p = strchr(patt, wildchar);
|
||||||
|
if (p && ((*(p + 1)) == 0))
|
||||||
|
len = p - patt;
|
||||||
|
else
|
||||||
|
len = strlen(name);
|
||||||
|
|
||||||
|
return strncmp(patt, name, len);
|
||||||
|
}
|
||||||
|
|
||||||
static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
|
static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
|
||||||
{
|
{
|
||||||
unsigned char model_num[ATA_ID_PROD_LEN + 1];
|
unsigned char model_num[ATA_ID_PROD_LEN + 1];
|
||||||
|
@ -3859,10 +3871,10 @@ static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
|
||||||
ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
|
ata_id_c_string(dev->id, model_rev, ATA_ID_FW_REV, sizeof(model_rev));
|
||||||
|
|
||||||
while (ad->model_num) {
|
while (ad->model_num) {
|
||||||
if (!strcmp(ad->model_num, model_num)) {
|
if (!strn_pattern_cmp(ad->model_num, model_num, '*')) {
|
||||||
if (ad->model_rev == NULL)
|
if (ad->model_rev == NULL)
|
||||||
return ad->horkage;
|
return ad->horkage;
|
||||||
if (!strcmp(ad->model_rev, model_rev))
|
if (!strn_pattern_cmp(ad->model_rev, model_rev, '*'))
|
||||||
return ad->horkage;
|
return ad->horkage;
|
||||||
}
|
}
|
||||||
ad++;
|
ad++;
|
||||||
|
|
Loading…
Reference in a new issue