aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2021-10-05 19:01:16 +0000
committerAlexander Motin <mav@FreeBSD.org>2021-10-05 19:01:16 +0000
commit730ea72c706ef8e025616772cfd86fd89ed3d42e (patch)
tree471f44af379d20b0f2868fb862aad2faa798efcc
parent8f9be1eed11c27c66386c3d72cd6c6aef597fa0d (diff)
downloadsrc-730ea72c706ef8e025616772cfd86fd89ed3d42e.tar.gz
src-730ea72c706ef8e025616772cfd86fd89ed3d42e.zip
cam(4): Limit search for disks in SES enclosure by single bus
At least for SAS that we only support now disks are typically connected to the same bus as the enclosure. Limiting the search scope makes it much faster on systems with multiple buses and thousands of disks. Reviewed by: imp MFC after: 2 weeks Sponsored by: iXsystems, Inc. Differential Revision: https://reviews.freebsd.org/D32305
-rw-r--r--sys/cam/scsi/scsi_enc_ses.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/sys/cam/scsi/scsi_enc_ses.c b/sys/cam/scsi/scsi_enc_ses.c
index f4f1c4a23516..39d99fd23eb9 100644
--- a/sys/cam/scsi/scsi_enc_ses.c
+++ b/sys/cam/scsi/scsi_enc_ses.c
@@ -374,6 +374,10 @@ typedef struct ses_softc {
ses_control_reqlist_t ses_pending_requests;
} ses_softc_t;
+static int ses_search_globally = 0;
+SYSCTL_INT(_kern_cam_enc, OID_AUTO, search_globally, CTLFLAG_RWTUN,
+ &ses_search_globally, 0, "Search for disks on other buses");
+
/**
* \brief Reset a SES iterator to just before the first element
* in the configuration.
@@ -890,6 +894,10 @@ ses_path_iter_devid_callback(enc_softc_t *enc, enc_element_t *elem,
+ devid->length;
memcpy(device_pattern->data.devid_pat.id, devid,
device_pattern->data.devid_pat.id_len);
+ if (!ses_search_globally) {
+ device_pattern->flags |= DEV_MATCH_PATH;
+ device_pattern->path_id = xpt_path_path_id(enc->periph->path);
+ }
memset(&cdm, 0, sizeof(cdm));
if (xpt_create_path(&cdm.ccb_h.path, /*periph*/NULL,