summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Bottomley <James.Bottomley@HansenPartnership.com>2015-12-09 14:12:03 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2015-12-18 22:06:21 -0500
commit3b91d09c1ca69a69c470efe5fbf346e3e90181d5 (patch)
tree8b76b33089e2d7ae8c96e9919da48f217141da25
parented94724bedcbc40cbfc12d16990e834d64220d3f (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.c16
-rw-r--r--include/scsi/scsi_transport_sas.h9
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 */
349int 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}
356EXPORT_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;
10struct sas_rphy; 10struct sas_rphy;
11struct request; 11struct request;
12 12
13#if !IS_ENABLED(CONFIG_SCSI_SAS_ATTRS)
14static inline int is_sas_attached(struct scsi_device *sdev)
15{
16 return 0;
17}
18#else
19extern int is_sas_attached(struct scsi_device *sdev);
20#endif
21
13static inline int sas_protocol_ata(enum sas_protocol proto) 22static inline int sas_protocol_ata(enum sas_protocol proto)
14{ 23{
15 return ((proto & SAS_PROTOCOL_SATA) || 24 return ((proto & SAS_PROTOCOL_SATA) ||