svn commit: r357849 - head/sys/cam/scsi

Warner Losh imp at FreeBSD.org
Thu Feb 13 01:23:45 UTC 2020


Author: imp
Date: Thu Feb 13 01:23:44 2020
New Revision: 357849
URL: https://svnweb.freebsd.org/changeset/base/357849

Log:
  Convert rotating and unmapped_io to a DA flag
  
  Rotating and unmapped_io are really da flags. Convert them to a flag so it will
  be reported with the other flags for the device. Deprecate the .rotating and
  .unmapped_io sysctls in FreeBSD 14 and remove the softc ints.
  
  Differential Revision: https://reviews.freebsd.org/D23417

Modified:
  head/sys/cam/scsi/scsi_da.c

Modified: head/sys/cam/scsi/scsi_da.c
==============================================================================
--- head/sys/cam/scsi/scsi_da.c	Thu Feb 13 01:23:32 2020	(r357848)
+++ head/sys/cam/scsi/scsi_da.c	Thu Feb 13 01:23:44 2020	(r357849)
@@ -106,6 +106,7 @@ typedef enum {
 	DA_FLAG_NEW_PACK	= 0x000002,
 	DA_FLAG_PACK_LOCKED	= 0x000004,
 	DA_FLAG_PACK_REMOVABLE	= 0x000008,
+	DA_FLAG_ROTATING	= 0x000010,
 	DA_FLAG_NEED_OTAG	= 0x000020,
 	DA_FLAG_WAS_OTAG	= 0x000040,
 	DA_FLAG_RETRY_UA	= 0x000080,
@@ -120,7 +121,8 @@ typedef enum {
 	DA_FLAG_CAN_ATA_IDLOG	= 0x010000,
 	DA_FLAG_CAN_ATA_SUPCAP	= 0x020000,
 	DA_FLAG_CAN_ATA_ZONE	= 0x040000,
-	DA_FLAG_TUR_PENDING	= 0x080000
+	DA_FLAG_TUR_PENDING	= 0x080000,
+	DA_FLAG_UNMAPPEDIO	= 0x100000
 } da_flags;
 #define DA_FLAG_STRING		\
 	"\020"			\
@@ -128,7 +130,7 @@ typedef enum {
 	"\002NEW_PACK"		\
 	"\003PACK_LOCKED"	\
 	"\004PACK_REMOVABLE"	\
-	"\005UNUSED"		\
+	"\005ROTATING"		\
 	"\006NEED_OTAG"		\
 	"\007WAS_OTAG"		\
 	"\010RETRY_UA"		\
@@ -143,7 +145,8 @@ typedef enum {
 	"\021CAN_ATA_IDLOG"	\
 	"\022CAN_ATA_SUPACP"	\
 	"\023CAN_ATA_ZONE"	\
-	"\024TUR_PENDING"
+	"\024TUR_PENDING"	\
+	"\025UNMAPPEDIO"
 
 typedef enum {
 	DA_Q_NONE		= 0x00,
@@ -367,8 +370,6 @@ struct da_softc {
 	da_delete_methods	delete_method_pref;
 	da_delete_methods	delete_method;
 	da_delete_func_t	*delete_func;
-	int			unmappedio;
-	int			rotating;
 	int			p_type;
 	struct	 disk_params params;
 	struct	 disk *disk;
@@ -1464,6 +1465,7 @@ static	void		dasysctlinit(void *context, int pending);
 static	int		dasysctlsofttimeout(SYSCTL_HANDLER_ARGS);
 static	int		dacmdsizesysctl(SYSCTL_HANDLER_ARGS);
 static	int		dadeletemethodsysctl(SYSCTL_HANDLER_ARGS);
+static	int		dabitsysctl(SYSCTL_HANDLER_ARGS);
 static	int		daflagssysctl(SYSCTL_HANDLER_ARGS);
 static	int		dazonemodesysctl(SYSCTL_HANDLER_ARGS);
 static	int		dazonesupsysctl(SYSCTL_HANDLER_ARGS);
@@ -2315,24 +2317,6 @@ dasysctlinit(void *context, int pending)
 	SYSCTL_ADD_INT(&softc->sysctl_ctx,
 		       SYSCTL_CHILDREN(softc->sysctl_tree),
 		       OID_AUTO,
-		       "unmapped_io",
-		       CTLFLAG_RD,
-		       &softc->unmappedio,
-		       0,
-		       "Unmapped I/O support");
-
-	SYSCTL_ADD_INT(&softc->sysctl_ctx,
-		       SYSCTL_CHILDREN(softc->sysctl_tree),
-		       OID_AUTO,
-		       "rotating",
-		       CTLFLAG_RD,
-		       &softc->rotating,
-		       0,
-		       "Rotating media");
-
-	SYSCTL_ADD_INT(&softc->sysctl_ctx,
-		       SYSCTL_CHILDREN(softc->sysctl_tree),
-		       OID_AUTO,
 		       "p_type",
 		       CTLFLAG_RD,
 		       &softc->p_type,
@@ -2343,6 +2327,14 @@ dasysctlinit(void *context, int pending)
 	    OID_AUTO, "flags", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
 	    softc, 0, daflagssysctl, "A",
 	    "Flags for drive");
+	SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree),
+	    OID_AUTO, "rotating", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
+	    &softc->flags, DA_FLAG_ROTATING, dabitsysctl, "I",
+	    "Rotating media *DEPRECATED* gone in FreeBSD 14");
+	SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree),
+	    OID_AUTO, "unmapped_io", CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
+	    &softc->flags, DA_FLAG_UNMAPPEDIO, dabitsysctl, "I",
+	    "Unmapped I/O support *DEPRECATED* gone in FreeBSD 14");
 
 #ifdef CAM_TEST_FAILURE
 	SYSCTL_ADD_PROC(&softc->sysctl_ctx, SYSCTL_CHILDREN(softc->sysctl_tree),
@@ -2619,6 +2611,21 @@ dadeletemethodchoose(struct da_softc *softc, da_delete
 }
 
 static int
+dabitsysctl(SYSCTL_HANDLER_ARGS)
+{
+	int flags = (intptr_t)arg1;
+	int test = arg2;
+	int tmpout, error;
+
+	tmpout = !!(flags & test);
+	error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout));
+	if (error || !req->newptr)
+		return (error);
+
+	return (EPERM);
+}
+
+static int
 daflagssysctl(SYSCTL_HANDLER_ARGS)
 {
 	struct sbuf sbuf;
@@ -2775,7 +2782,7 @@ daregister(struct cam_periph *periph, void *arg)
 	softc->unmap_gran_align = 0;
 	softc->ws_max_blks = WS16_MAX_BLKS;
 	softc->trim_max_ranges = ATA_TRIM_MAX_RANGES;
-	softc->rotating = 1;
+	softc->flags |= DA_FLAG_ROTATING;
 
 	periph->softc = softc;
 
@@ -2908,7 +2915,7 @@ daregister(struct cam_periph *periph, void *arg)
 	if ((softc->quirks & DA_Q_NO_SYNC_CACHE) == 0)
 		softc->disk->d_flags |= DISKFLAG_CANFLUSHCACHE;
 	if ((cpi.hba_misc & PIM_UNMAPPED) != 0) {
-		softc->unmappedio = 1;
+		softc->flags |= DA_FLAG_UNMAPPEDIO;
 		softc->disk->d_flags |= DISKFLAG_UNMAPPED_BIO;
 	}
 	cam_strvis(softc->disk->d_descr, cgd->inq_data.vendor,
@@ -5188,7 +5195,7 @@ dadone_probebdc(struct cam_periph *periph, union ccb *
 			    SVPD_BDC_RATE_NON_ROTATING) {
 				cam_iosched_set_sort_queue(
 				    softc->cam_iosched, 0);
-				softc->rotating = 0;
+				softc->flags &= ~DA_FLAG_ROTATING;
 			}
 			if (softc->disk->d_rotation_rate != old_rate) {
 				disk_attr_changed(softc->disk,
@@ -5298,7 +5305,7 @@ dadone_probeata(struct cam_periph *periph, union ccb *
 		softc->disk->d_rotation_rate = ata_params->media_rotation_rate;
 		if (softc->disk->d_rotation_rate == ATA_RATE_NON_ROTATING) {
 			cam_iosched_set_sort_queue(softc->cam_iosched, 0);
-			softc->rotating = 0;
+			softc->flags &= ~DA_FLAG_ROTATING;
 		}
 		if (softc->disk->d_rotation_rate != old_rate) {
 			disk_attr_changed(softc->disk,


More information about the svn-src-all mailing list