Page MenuHomeFreeBSD

D6400.1777339790.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D6400.1777339790.diff

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

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)

Event Timeline