Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fac829fd authored by James Bottomley's avatar James Bottomley
Browse files

[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: default avatarRandy Dunlap <randy.dunlap@oracle.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent 98e1e0f0
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
menu "SCSI device support"

config SCSI_MOD
       tristate
       default y if SCSI=n || SCSI=y
       default m if SCSI=m

config RAID_ATTRS
	tristate "RAID Transport Class"
	default n
	depends on BLOCK
	depends on SCSI_MOD
	---help---
	  Provides RAID

+2 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ static int raid_match(struct attribute_container *cont, struct device *dev)
	 * emulated RAID devices, so start with SCSI */
	struct raid_internal *i = ac_to_raid_internal(cont);

#if defined(CONFIG_SCSI) || defined(CONFIG_SCSI_MODULE)
	if (scsi_is_sdev_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);
	}
#endif
	/* FIXME: look at other subsystems too */
	return 0;
}