forked from mirrors/linux
		
	[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
	
	 James Bottomley
						James Bottomley