git: 730ea72c706e - main - cam(4): Limit search for disks in SES enclosure by single bus

From: Alexander Motin <mav_at_FreeBSD.org>
Date: Tue, 05 Oct 2021 19:04:08 UTC
The branch main has been updated by mav:

URL: https://cgit.FreeBSD.org/src/commit/?id=730ea72c706ef8e025616772cfd86fd89ed3d42e

commit 730ea72c706ef8e025616772cfd86fd89ed3d42e
Author:     Alexander Motin <mav@FreeBSD.org>
AuthorDate: 2021-10-05 19:01:16 +0000
Commit:     Alexander Motin <mav@FreeBSD.org>
CommitDate: 2021-10-05 19:01:16 +0000

    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
---
 sys/cam/scsi/scsi_enc_ses.c | 8 ++++++++
 1 file changed, 8 insertions(+)

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,