Date: Tue, 22 Mar 2011 13:19:29 +0000 (UTC) From: Alexander Motin <mav@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r219867 - projects/graid/head/sys/geom/raid Message-ID: <201103221319.p2MDJTVd060665@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201103221319.p2MDJTVd060665>