svn commit: r219867 - projects/graid/head/sys/geom/raid
Alexander Motin
mav at FreeBSD.org
Tue Mar 22 13:19:30 UTC 2011
Author: mav
Date: Tue Mar 22 13:19:29 2011
New Revision: 219867
URL: http://svn.freebsd.org/changeset/base/219867
Log:
Remove root mounting delay from Promise module. As soon as volumes created
immediately on first disk probe, that delay completely covered by the delay
at the volume level.
Modified:
projects/graid/head/sys/geom/raid/md_promise.c
Modified: projects/graid/head/sys/geom/raid/md_promise.c
==============================================================================
--- projects/graid/head/sys/geom/raid/md_promise.c Tue Mar 22 13:02:00 2011 (r219866)
+++ projects/graid/head/sys/geom/raid/md_promise.c Tue Mar 22 13:19:29 2011 (r219867)
@@ -49,14 +49,14 @@ static MALLOC_DEFINE(M_MD_PROMISE, "md_p
struct promise_raid_disk {
uint8_t flags; /* Subdisk status. */
-#define PROMISE_F_VALID 0x00000001
-#define PROMISE_F_ONLINE 0x00000002
-#define PROMISE_F_ASSIGNED 0x00000004
-#define PROMISE_F_SPARE 0x00000008
-#define PROMISE_F_DUPLICATE 0x00000010
-#define PROMISE_F_REDIR 0x00000020
-#define PROMISE_F_DOWN 0x00000040
-#define PROMISE_F_READY 0x00000080
+#define PROMISE_F_VALID 0x01
+#define PROMISE_F_ONLINE 0x02
+#define PROMISE_F_ASSIGNED 0x04
+#define PROMISE_F_SPARE 0x08
+#define PROMISE_F_DUPLICATE 0x10
+#define PROMISE_F_REDIR 0x20
+#define PROMISE_F_DOWN 0x40
+#define PROMISE_F_READY 0x80
uint8_t number; /* Position in a volume. */
uint8_t channel; /* ATA channel number. */
@@ -66,19 +66,19 @@ struct promise_raid_disk {
struct promise_raid_conf {
char promise_id[24];
-#define PROMISE_MAGIC "Promise Technology, Inc."
-#define FREEBSD_MAGIC "FreeBSD ATA driver RAID "
+#define PROMISE_MAGIC "Promise Technology, Inc."
+#define FREEBSD_MAGIC "FreeBSD ATA driver RAID "
uint32_t dummy_0;
uint64_t magic_0;
-#define PROMISE_MAGIC0(x) (((uint64_t)(x.channel) << 48) | \
+#define PROMISE_MAGIC0(x) (((uint64_t)(x.channel) << 48) | \
((uint64_t)(x.device != 0) << 56))
uint16_t magic_1;
uint32_t magic_2;
uint8_t filler1[470];
uint32_t integrity;
-#define PROMISE_I_VALID 0x00000080
+#define PROMISE_I_VALID 0x00000080
struct promise_raid_disk disk; /* This subdisk info. */
uint32_t disk_offset; /* Subdisk offset. */
@@ -86,22 +86,22 @@ struct promise_raid_conf {
uint32_t rebuild_lba; /* Rebuild position. */
uint16_t generation; /* Generation number. */
uint8_t status; /* Volume status. */
-#define PROMISE_S_VALID 0x01
-#define PROMISE_S_ONLINE 0x02
-#define PROMISE_S_INITED 0x04
-#define PROMISE_S_READY 0x08
-#define PROMISE_S_DEGRADED 0x10
-#define PROMISE_S_MARKED 0x20
-#define PROMISE_S_MIGRATING 0x40
-#define PROMISE_S_FUNCTIONAL 0x80
+#define PROMISE_S_VALID 0x01
+#define PROMISE_S_ONLINE 0x02
+#define PROMISE_S_INITED 0x04
+#define PROMISE_S_READY 0x08
+#define PROMISE_S_DEGRADED 0x10
+#define PROMISE_S_MARKED 0x20
+#define PROMISE_S_MIGRATING 0x40
+#define PROMISE_S_FUNCTIONAL 0x80
uint8_t type; /* Voluem type. */
-#define PROMISE_T_RAID0 0x00
-#define PROMISE_T_RAID1 0x01
-#define PROMISE_T_RAID3 0x02
-#define PROMISE_T_RAID5 0x04
-#define PROMISE_T_SPAN 0x08
-#define PROMISE_T_JBOD 0x10
+#define PROMISE_T_RAID0 0x00
+#define PROMISE_T_RAID1 0x01
+#define PROMISE_T_RAID3 0x02
+#define PROMISE_T_RAID5 0x04
+#define PROMISE_T_SPAN 0x08
+#define PROMISE_T_JBOD 0x10
uint8_t total_disks; /* Disks in this volume. */
uint8_t stripe_shift; /* Strip size. */
@@ -138,7 +138,6 @@ struct g_raid_md_promise_pervolume {
int pv_disks_present;
int pv_started;
struct callout pv_start_co; /* STARTING state timer. */
- struct root_hold_token *pv_rootmount; /* Root mount delay token. */
};
static g_raid_md_create_t g_raid_md_create_promise;
@@ -887,6 +886,7 @@ g_raid_md_promise_start(struct g_raid_vo
}
pv->pv_started = 1;
+ callout_stop(&pv->pv_start_co);
G_RAID_DEBUG1(0, sc, "Volume started.");
g_raid_md_write_promise(md, vol, NULL, NULL);
@@ -894,11 +894,6 @@ g_raid_md_promise_start(struct g_raid_vo
g_raid_md_promise_refill(sc);
g_raid_event_send(vol, G_RAID_VOLUME_E_START, G_RAID_EVENT_VOLUME);
-
- callout_stop(&pv->pv_start_co);
- G_RAID_DEBUG1(1, sc, "root_mount_rel %p", pv->pv_rootmount);
- root_mount_rel(pv->pv_rootmount);
- pv->pv_rootmount = NULL;
}
static void
@@ -955,8 +950,6 @@ g_raid_md_promise_new_disk(struct g_raid
callout_reset(&pv->pv_start_co,
g_raid_start_timeout * hz,
g_raid_promise_go, vol);
- pv->pv_rootmount = root_mount_hold("GRAID-Promise");
- G_RAID_DEBUG1(1, sc, "root_mount_hold %p", pv->pv_rootmount);
} else
pv = vol->v_md_data;
@@ -1936,10 +1929,6 @@ g_raid_md_free_volume_promise(struct g_r
if (pv && !pv->pv_started) {
pv->pv_started = 1;
callout_stop(&pv->pv_start_co);
- G_RAID_DEBUG1(1, md->mdo_softc,
- "root_mount_rel %p", pv->pv_rootmount);
- root_mount_rel(pv->pv_rootmount);
- pv->pv_rootmount = NULL;
}
return (0);
}
More information about the svn-src-projects
mailing list