[SCSI] raid_attrs: fix dependency problems
RAID attributes uses scsi_is_sdev_device() to gate some SCSI specific checking code. This causes two problems. Firstly if SCSI == n just defining scsi_is_sdev_device() to return false might not be enough to prevent gcc from emitting the code (and thus referring to undefined symbols), so this needs surrounding with an ifdef. Secondly, using scsi_is_sdev_device() when SCSI is either y or m gives a subtle problem in the m case: raid_attrs must also be m to use the symbol. Do the usual Kconfig jiggery-pokery to fix this. Reported-by: Randy Dunlap <randy.dunlap@oracle.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
This commit is contained in:
parent
98e1e0f07c
commit
fac829fdca
2 changed files with 8 additions and 0 deletions
|
@ -1,9 +1,15 @@
|
||||||
menu "SCSI device support"
|
menu "SCSI device support"
|
||||||
|
|
||||||
|
config SCSI_MOD
|
||||||
|
tristate
|
||||||
|
default y if SCSI=n || SCSI=y
|
||||||
|
default m if SCSI=m
|
||||||
|
|
||||||
config RAID_ATTRS
|
config RAID_ATTRS
|
||||||
tristate "RAID Transport Class"
|
tristate "RAID Transport Class"
|
||||||
default n
|
default n
|
||||||
depends on BLOCK
|
depends on BLOCK
|
||||||
|
depends on SCSI_MOD
|
||||||
---help---
|
---help---
|
||||||
Provides RAID
|
Provides RAID
|
||||||
|
|
||||||
|
|
|
@ -63,6 +63,7 @@ static int raid_match(struct attribute_container *cont, struct device *dev)
|
||||||
* emulated RAID devices, so start with SCSI */
|
* emulated RAID devices, so start with SCSI */
|
||||||
struct raid_internal *i = ac_to_raid_internal(cont);
|
struct raid_internal *i = ac_to_raid_internal(cont);
|
||||||
|
|
||||||
|
#if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE)
|
||||||
if (scsi_is_sdev_device(dev)) {
|
if (scsi_is_sdev_device(dev)) {
|
||||||
struct scsi_device *sdev = to_scsi_device(dev);
|
struct scsi_device *sdev = to_scsi_device(dev);
|
||||||
|
|
||||||
|
@ -71,6 +72,7 @@ static int raid_match(struct attribute_container *cont, struct device *dev)
|
||||||
|
|
||||||
return i->f->is_raid(dev);
|
return i->f->is_raid(dev);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* FIXME: look at other subsystems too */
|
/* FIXME: look at other subsystems too */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue