svn commit: r218251 - projects/graid/head/sys/geom/raid
Warner Losh
imp at FreeBSD.org
Fri Feb 4 04:00:25 UTC 2011
Author: imp
Date: Fri Feb 4 04:00:24 2011
New Revision: 218251
URL: http://svn.freebsd.org/changeset/base/218251
Log:
Finish converting #defines to sysctl/tunables.
Modified:
projects/graid/head/sys/geom/raid/tr_raid1.c
Modified: projects/graid/head/sys/geom/raid/tr_raid1.c
==============================================================================
--- projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 03:30:28 2011 (r218250)
+++ projects/graid/head/sys/geom/raid/tr_raid1.c Fri Feb 4 04:00:24 2011 (r218251)
@@ -35,21 +35,54 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/malloc.h>
#include <sys/mutex.h>
+#include <sys/sysctl.h>
#include <sys/systm.h>
#include <geom/geom.h>
#include "geom/raid/g_raid.h"
#include "g_raid_tr_if.h"
-#define SD_READ_THRESHOLD 10 /* errors to cause a rebuild */
-static int sd_read_threshold = SD_READ_THRESHOLD;
-#define SD_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */
-static int sd_rebuild_slab = SD_REBUILD_SLAB;
-#define SD_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */
-static int sd_rebuild_fair_io = SD_REBUILD_FAIR_IO;
-#define SD_REBUILD_CLUSTER_IDLE 10
-static int sd_rebuild_cluster_idle = SD_REBUILD_CLUSTER_IDLE;
-#define SD_REBUILD_META_UPDATE 500 /* update meta data every 5 GB or so */
-static int sd_rebuild_meta_update = SD_REBUILD_META_UPDATE;
+SYSCTL_DECL(_kern_geom_raid);
+SYSCTL_NODE(_kern_geom_raid, OID_AUTO, raid1, CTLFLAG_RW, 0,
+ "RAID1 parameters");
+
+#define RAID1_READ_ERR_THRESH 10 /* errors to cause a rebuild */
+static int g_raid1_read_err_thresh = RAID1_READ_ERR_THRESH;
+TUNABLE_INT("kern.geom.raid.raid1.read_err_thresh", &g_raid1_read_err_thresh);
+SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, read_err_thresh, CTLFLAG_RW,
+ &g_raid1_read_err_thresh, RAID1_READ_ERR_THRESH,
+ "Number of read errors on a subdisk that trigger a rebuild");
+
+#define RAID1_REBUILD_SLAB (1 << 20) /* One transation in a rebuild */
+static int g_raid1_rebuild_slab = RAID1_REBUILD_SLAB;
+TUNABLE_INT("kern.geom.raid.raid1.rebuild_slab_size",
+ &g_raid1_rebuild_slab);
+SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_slab_size, CTLFLAG_RW,
+ &g_raid1_rebuild_slab, RAID1_REBUILD_SLAB,
+ "Amount of the disk to rebuild each read/write cycle of the rebuild.");
+
+#define RAID1_REBUILD_FAIR_IO 20 /* use 1/x of the available I/O */
+static int g_raid1_rebuild_fair_io = RAID1_REBUILD_FAIR_IO;
+TUNABLE_INT("kern.geom.raid.raid1.rebuild_fair_io",
+ &g_raid1_rebuild_slab);
+SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_fair_io, CTLFLAG_RW,
+ &g_raid1_rebuild_fair_io, RAID1_REBUILD_FAIR_IO,
+ "Fraction of the I/O bandwidth to use when disk busy for rebuild.");
+
+#define RAID1_REBUILD_CLUSTER_IDLE 10
+static int g_raid1_rebuild_cluster_idle = RAID1_REBUILD_CLUSTER_IDLE;
+TUNABLE_INT("kern.geom.raid.raid1.rebuild_cluster_idle",
+ &g_raid1_rebuild_slab);
+SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_cluster_idle, CTLFLAG_RW,
+ &g_raid1_rebuild_cluster_idle, RAID1_REBUILD_CLUSTER_IDLE,
+ "Number of slabs to do each time we trigger a rebuild cycle");
+
+#define RAID1_REBUILD_META_UPDATE 500 /* update meta data every 5 GB or so */
+static int g_raid1_rebuild_meta_update = RAID1_REBUILD_META_UPDATE;
+TUNABLE_INT("kern.geom.raid.raid1.rebuild_meta_update",
+ &g_raid1_rebuild_slab);
+SYSCTL_UINT(_kern_geom_raid_raid1, OID_AUTO, rebuild_meta_update, CTLFLAG_RW,
+ &g_raid1_rebuild_meta_update, RAID1_REBUILD_META_UPDATE,
+ "When to update the meta data.");
static MALLOC_DEFINE(M_TR_raid1, "tr_raid1_data", "GEOM_RAID raid1 data");
@@ -178,7 +211,7 @@ g_raid_tr_raid1_rebuild_some(struct g_ra
bp = &trs->trso_bio;
memset(bp, 0, sizeof(*bp));
bp->bio_offset = sd->sd_rebuild_pos;
- bp->bio_length = MIN(sd_rebuild_slab,
+ bp->bio_length = MIN(g_raid1_rebuild_slab,
sd->sd_volume->v_mediasize - sd->sd_rebuild_pos);
bp->bio_data = trs->trso_buffer;
bp->bio_cmd = BIO_READ;
@@ -187,8 +220,8 @@ g_raid_tr_raid1_rebuild_some(struct g_ra
return;
bp2->bio_cflags = G_RAID_BIO_FLAG_SYNC;
bp2->bio_caller1 = good_sd;
- trs->trso_recover_slabs = sd_rebuild_cluster_idle;
- trs->trso_fair_io = sd_rebuild_fair_io;
+ trs->trso_recover_slabs = g_raid1_rebuild_cluster_idle;
+ trs->trso_fair_io = g_raid1_rebuild_fair_io;
trs->trso_flags |= TR_RAID1_F_DOING_SOME;
g_raid_lock_range(sd->sd_volume, /* Lock callback starts I/O */
bp2->bio_offset, bp2->bio_length, bp2);
@@ -226,7 +259,7 @@ g_raid_tr_raid1_rebuild_abort(struct g_r
trs = (struct g_raid_tr_raid1_object *)tr;
sd = trs->trso_failed_sd;
// sd->sd_rebuild_pos = 0; /* We may need this here... */
- len = MIN(sd_rebuild_slab, vol->v_mediasize - sd->sd_rebuild_pos);
+ len = MIN(g_raid1_rebuild_slab, vol->v_mediasize - sd->sd_rebuild_pos);
g_raid_unlock_range(tr->tro_volume, sd->sd_rebuild_pos, len);
g_raid_write_metadata(vol->v_softc, vol, sd, sd->sd_disk);
free(trs->trso_buffer, M_TR_raid1);
@@ -282,8 +315,8 @@ g_raid_tr_raid1_rebuild_start(struct g_r
G_RAID_DEBUG(2, "Kicking off a rebuild at %jd...",
trs->trso_failed_sd->sd_rebuild_pos);
trs->trso_type = TR_RAID1_REBUILD;
- trs->trso_buffer = malloc(sd_rebuild_slab, M_TR_raid1, M_WAITOK);
- trs->trso_meta_update = sd_rebuild_meta_update;
+ trs->trso_buffer = malloc(g_raid1_rebuild_slab, M_TR_raid1, M_WAITOK);
+ trs->trso_meta_update = g_raid1_rebuild_meta_update;
g_raid_tr_raid1_rebuild_some(tr, trs->trso_failed_sd);
}
@@ -620,7 +653,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
g_raid_write_metadata(vol->v_softc,
vol, nsd, nsd->sd_disk);
trs->trso_meta_update =
- sd_rebuild_meta_update;
+ g_raid1_rebuild_meta_update;
}
trs->trso_flags &= ~TR_RAID1_F_DOING_SOME;
return;
@@ -646,7 +679,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
cbp->bio_cmd = BIO_READ;
cbp->bio_cflags = G_RAID_BIO_FLAG_SYNC;
cbp->bio_offset = nsd->sd_rebuild_pos;
- cbp->bio_length = MIN(sd_rebuild_slab,
+ cbp->bio_length = MIN(g_raid1_rebuild_slab,
vol->v_mediasize - nsd->sd_rebuild_pos);
cbp->bio_caller1 = good_sd;
G_RAID_LOGREQ(4, bp,
@@ -684,7 +717,7 @@ g_raid_tr_iodone_raid1(struct g_raid_tr_
* everything to get it back in sync), or just degrade the
* drive, which kicks off a resync?
*/
- if (sd->sd_read_errs > sd_read_threshold)
+ if (sd->sd_read_errs > g_raid1_read_err_thresh)
g_raid_fail_disk(sd->sd_softc, sd, sd->sd_disk);
/*
More information about the svn-src-projects
mailing list