Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F167997754
D12578.id33691.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
D12578.id33691.diff
View Options
Index: head/sys/geom/geom_disk.h
===================================================================
--- head/sys/geom/geom_disk.h
+++ head/sys/geom/geom_disk.h
@@ -37,6 +37,11 @@
#ifndef _GEOM_GEOM_DISK_H_
#define _GEOM_GEOM_DISK_H_
+#define DISK_RR_UNKNOWN 0
+#define DISK_RR_NON_ROTATING 1
+#define DISK_RR_MIN 0x0401
+#define DISK_RR_MAX 0xfffe
+
#ifdef _KERNEL
#include <sys/queue.h>
@@ -126,11 +131,6 @@
#define DISKFLAG_UNMAPPED_BIO 0x10
#define DISKFLAG_DIRECT_COMPLETION 0x20
#define DISKFLAG_CANZONE 0x80
-
-#define DISK_RR_UNKNOWN 0
-#define DISK_RR_NON_ROTATING 1
-#define DISK_RR_MIN 0x0401
-#define DISK_RR_MAX 0xfffe
struct disk *disk_alloc(void);
void disk_create(struct disk *disk, int version);
Index: head/sys/sys/disk.h
===================================================================
--- head/sys/sys/disk.h
+++ head/sys/sys/disk.h
@@ -134,6 +134,7 @@
char str[DISK_IDENT_SIZE];
off_t off;
int i;
+ uint16_t u16;
} value;
};
#define DIOCGATTR _IOWR('d', 142, struct diocgattr_arg)
Index: head/sys/sys/param.h
===================================================================
--- head/sys/sys/param.h
+++ head/sys/sys/param.h
@@ -58,7 +58,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1200048 /* Master, propagated to newvers */
+#define __FreeBSD_version 1200049 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
Index: head/usr.sbin/diskinfo/diskinfo.c
===================================================================
--- head/usr.sbin/diskinfo/diskinfo.c
+++ head/usr.sbin/diskinfo/diskinfo.c
@@ -31,6 +31,7 @@
* $FreeBSD$
*/
+#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
@@ -42,6 +43,7 @@
#include <libutil.h>
#include <paths.h>
#include <err.h>
+#include <geom/geom_disk.h>
#include <sysexits.h>
#include <sys/aio.h>
#include <sys/disk.h>
@@ -62,9 +64,11 @@
static int opt_c, opt_i, opt_p, opt_s, opt_S, opt_t, opt_v, opt_w;
+static bool candelete(int fd);
static void speeddisk(int fd, off_t mediasize, u_int sectorsize);
static void commandtime(int fd, off_t mediasize, u_int sectorsize);
static void iopsbench(int fd, off_t mediasize, u_int sectorsize);
+static void rotationrate(int fd, char *buf, size_t buflen);
static void slogbench(int fd, int isreg, off_t mediasize, u_int sectorsize);
static int zonecheck(int fd, uint32_t *zone_mode, char *zone_str,
size_t zone_str_len);
@@ -78,6 +82,7 @@
int i, ch, fd, error, exitval = 0;
char tstr[BUFSIZ], ident[DISK_IDENT_SIZE], physpath[MAXPATHLEN];
char zone_desc[64];
+ char rrate[64];
struct diocgattr_arg arg;
off_t mediasize, stripesize, stripeoffset;
u_int sectorsize, fwsectors, fwheads, zoned = 0, isreg;
@@ -246,6 +251,10 @@
printf("\t%-12s\t# Disk ident.\n", ident);
if (ioctl(fd, DIOCGPHYSPATH, physpath) == 0)
printf("\t%-12s\t# Physical path\n", physpath);
+ printf("\t%-12s\t# TRIM/UNMAP support\n",
+ candelete(fd) ? "Yes" : "No");
+ rotationrate(fd, rrate, sizeof(rrate));
+ printf("\t%-12s\t# Rotation rate in RPM\n", rrate);
if (zoned != 0)
printf("\t%-12s\t# Zone Mode\n", zone_desc);
}
@@ -263,6 +272,39 @@
}
free(buf);
exit (exitval);
+}
+
+static bool
+candelete(int fd)
+{
+ struct diocgattr_arg arg;
+
+ strlcpy(arg.name, "GEOM::candelete", sizeof(arg.name));
+ arg.len = sizeof(arg.value.i);
+ if (ioctl(fd, DIOCGATTR, &arg) == 0)
+ return (arg.value.i != 0);
+ else
+ return (false);
+}
+
+static void
+rotationrate(int fd, char *rate, size_t buflen)
+{
+ struct diocgattr_arg arg;
+ int ret;
+
+ strlcpy(arg.name, "GEOM::rotation_rate", sizeof(arg.name));
+ arg.len = sizeof(arg.value.u16);
+
+ ret = ioctl(fd, DIOCGATTR, &arg);
+ if (ret < 0 || arg.value.u16 == DISK_RR_UNKNOWN)
+ snprintf(rate, buflen, "Unknown");
+ else if (arg.value.u16 == DISK_RR_NON_ROTATING)
+ snprintf(rate, buflen, "%d", 0);
+ else if (arg.value.u16 >= DISK_RR_MIN && arg.value.u16 <= DISK_RR_MAX)
+ snprintf(rate, buflen, "%d", arg.value.u16);
+ else
+ snprintf(rate, buflen, "Invalid");
}
static void
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Aug 26, 8:23 PM (2 m, 47 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37275133
Default Alt Text
D12578.id33691.diff (4 KB)
Attached To
Mode
D12578: Display TRIM/UNMAP support in "diskinfo -v"
Attached
Detach File
Event Timeline
Log In to Comment