Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F145075091
D6400.1777339790.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
1 KB
Referenced Files
None
Subscribers
None
D6400.1777339790.diff
View Options
Index: sys/geom/geom_disk.h
===================================================================
--- sys/geom/geom_disk.h
+++ sys/geom/geom_disk.h
@@ -118,6 +118,7 @@
void disk_media_changed(struct disk *dp, int flag);
void disk_media_gone(struct disk *dp, int flag);
int disk_resize(struct disk *dp, int flag);
+struct disk *disk_fetch_by_driver(void* sc);
#define DISK_VERSION_00 0x58561059
#define DISK_VERSION_01 0x5856105a
Index: sys/geom/geom_disk.c
===================================================================
--- sys/geom/geom_disk.c
+++ sys/geom/geom_disk.c
@@ -895,6 +895,35 @@
return (g_post_event(g_disk_resize, dp, flag, NULL));
}
+/*
+ * This method finds disk by driver softc. For instance, it can be used
+ * in geom_flashmap callback to calculate end of memory-mapped region.
+ */
+struct disk
+*disk_fetch_by_driver(void* sc)
+{
+ struct g_geom *gp;
+ struct g_disk_softc *g_sc;
+ struct disk *disk;
+
+ /*
+ * Iterate over disks and compare d_drv with input parameter @sc
+ */
+ LIST_FOREACH(gp, &g_disk_class.geom, geom) {
+ g_sc = (struct g_disk_softc*)gp->softc;
+ if (g_sc == NULL)
+ continue;
+ disk = g_sc->dp;
+ if (disk == NULL)
+ continue;
+ if(disk->d_drv1 == sc) {
+ return (disk);
+ }
+ }
+
+ return (NULL);
+}
+
static void
g_kern_disks(void *p, int flag __unused)
{
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Apr 28, 1:29 AM (14 h, 50 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28444842
Default Alt Text
D6400.1777339790.diff (1 KB)
Attached To
Mode
D6400: [GEOM/disk] Add function to find disk by device softc
Attached
Detach File
Event Timeline
Log In to Comment