]> bbs.cooldavid.org Git - net-next-2.6.git/commitdiff
[SCSI] raid_attrs: fix dependency problems
authorJames Bottomley <James.Bottomley@suse.de>
Wed, 3 Mar 2010 05:36:56 +0000 (11:06 +0530)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 3 Mar 2010 15:47:06 +0000 (21:17 +0530)
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>
drivers/scsi/Kconfig
drivers/scsi/raid_class.c

index 9191d1ea6451a5e1cbbdac3d1ec34e5ba640888a..75f2336807cbdba97fa52a01b7d860b7796c8175 100644 (file)
@@ -1,9 +1,15 @@
 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
 
index bd88349b852684d3d31f87d614f2c50947b86fe3..2c146b44d95fc7e14a5705f2934142770f65f79b 100644 (file)
@@ -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;
 }