diff options
author | James Bottomley <James.Bottomley@HansenPartnership.com> | 2015-12-09 14:12:03 -0500 |
---|---|---|
committer | James Bottomley <James.Bottomley@HansenPartnership.com> | 2015-12-18 22:06:21 -0500 |
commit | 3b91d09c1ca69a69c470efe5fbf346e3e90181d5 (patch) | |
tree | 8b76b33089e2d7ae8c96e9919da48f217141da25 | |
parent | ed94724bedcbc40cbfc12d16990e834d64220d3f (diff) |
scsi_transport_sas: add is_sas_attached() function
Adds a function designed to be callable any time (regardless of
whether the transport attributes are configured or not) which returns
true if the device is attached over a SAS transport. The design of
this function is that transport specific functions can be embedded
within a
if (is_sas_attached(sdev)) {
...
}
which would be compiled out (and thus eliminate the symbols) if SAS is
not configured.
Reviewed-by: Hannes Reinecke <hare@suse.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r-- | drivers/scsi/scsi_transport_sas.c | 16 | ||||
-rw-r--r-- | include/scsi/scsi_transport_sas.h | 9 |
2 files changed, 25 insertions, 0 deletions
diff --git a/drivers/scsi/scsi_transport_sas.c b/drivers/scsi/scsi_transport_sas.c index 30d26e345dcc..b17f763a73b2 100644 --- a/drivers/scsi/scsi_transport_sas.c +++ b/drivers/scsi/scsi_transport_sas.c | |||
@@ -341,6 +341,22 @@ static int do_sas_phy_delete(struct device *dev, void *data) | |||
341 | } | 341 | } |
342 | 342 | ||
343 | /** | 343 | /** |
344 | * is_sas_attached - check if device is SAS attached | ||
345 | * @sdev: scsi device to check | ||
346 | * | ||
347 | * returns true if the device is SAS attached | ||
348 | */ | ||
349 | int is_sas_attached(struct scsi_device *sdev) | ||
350 | { | ||
351 | struct Scsi_Host *shost = sdev->host; | ||
352 | |||
353 | return shost->transportt->host_attrs.ac.class == | ||
354 | &sas_host_class.class; | ||
355 | } | ||
356 | EXPORT_SYMBOL(is_sas_attached); | ||
357 | |||
358 | |||
359 | /** | ||
344 | * sas_remove_children - tear down a devices SAS data structures | 360 | * sas_remove_children - tear down a devices SAS data structures |
345 | * @dev: device belonging to the sas object | 361 | * @dev: device belonging to the sas object |
346 | * | 362 | * |
diff --git a/include/scsi/scsi_transport_sas.h b/include/scsi/scsi_transport_sas.h index 0bd71e2702e3..a8fdd10fc9c5 100644 --- a/include/scsi/scsi_transport_sas.h +++ b/include/scsi/scsi_transport_sas.h | |||
@@ -10,6 +10,15 @@ struct scsi_transport_template; | |||
10 | struct sas_rphy; | 10 | struct sas_rphy; |
11 | struct request; | 11 | struct request; |
12 | 12 | ||
13 | #if !IS_ENABLED(CONFIG_SCSI_SAS_ATTRS) | ||
14 | static inline int is_sas_attached(struct scsi_device *sdev) | ||
15 | { | ||
16 | return 0; | ||
17 | } | ||
18 | #else | ||
19 | extern int is_sas_attached(struct scsi_device *sdev); | ||
20 | #endif | ||
21 | |||
13 | static inline int sas_protocol_ata(enum sas_protocol proto) | 22 | static inline int sas_protocol_ata(enum sas_protocol proto) |
14 | { | 23 | { |
15 | return ((proto & SAS_PROTOCOL_SATA) || | 24 | return ((proto & SAS_PROTOCOL_SATA) || |