kern/129245: [geom] gcache is more suitable for suffix based
provider name
Yoshihiro Ota
ota at j.email.ne.jp
Thu Jan 22 00:30:11 PST 2009
The following reply was made to PR kern/129245; it has been noted by GNATS.
From: Yoshihiro Ota <ota at j.email.ne.jp>
To: bug-followup at FreeBSD.org
Cc:
Subject: Re: kern/129245: [geom] gcache is more suitable for suffix based
provider name
Date: Thu, 22 Jan 2009 03:24:55 -0500
This is a multi-part message in MIME format.
--Multipart=_Thu__22_Jan_2009_03_24_55_-0500_aV.gtuCgOo9pWE9w
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
This will create suffixes, i.e. md2.uzip.cache.
Thanks,
Hiro
--Multipart=_Thu__22_Jan_2009_03_24_55_-0500_aV.gtuCgOo9pWE9w
Content-Type: text/x-diff;
name="gcache-naming-20090122.diff"
Content-Disposition: attachment;
filename="gcache-naming-20090122.diff"
Content-Transfer-Encoding: 7bit
Index: sys/geom/cache/g_cache.c
===================================================================
RCS file: /home/ncvs/src/sys/geom/cache/g_cache.c,v
retrieving revision 1.2.6.1
diff -u -r1.2.6.1 g_cache.c
--- sys/geom/cache/g_cache.c 25 Nov 2008 02:59:29 -0000 1.2.6.1
+++ sys/geom/cache/g_cache.c 22 Jan 2009 08:17:38 -0000
@@ -475,11 +475,11 @@
newpp = NULL;
cp = NULL;
- G_CACHE_DEBUG(1, "Creating device %s.", md->md_name);
+ G_CACHE_DEBUG(1, "Creating device %s%s.", pp->name, G_CACHE_SUFFIX);
/* Cache size is minimum 100. */
if (md->md_size < 100) {
- G_CACHE_DEBUG(0, "Invalid size for device %s.", md->md_name);
+ G_CACHE_DEBUG(0, "Invalid size for device %s%s.", pp->name, G_CACHE_SUFFIX);
return (NULL);
}
@@ -492,15 +492,9 @@
return (NULL);
}
- /* Check for duplicate unit. */
- if (g_cache_find_device(mp, (const char *)&md->md_name) != NULL) {
- G_CACHE_DEBUG(0, "Provider %s already exists.", md->md_name);
- return (NULL);
- }
-
- gp = g_new_geomf(mp, md->md_name);
+ gp = g_new_geomf(mp, "%s%s", pp->name, G_CACHE_SUFFIX);
if (gp == NULL) {
- G_CACHE_DEBUG(0, "Cannot create geom %s.", md->md_name);
+ G_CACHE_DEBUG(0, "Cannot create geom %s%s.", pp->name, G_CACHE_SUFFIX);
return (NULL);
}
gp->softc = NULL; /* for a moment */
@@ -524,9 +518,9 @@
gp->access = g_cache_access;
gp->dumpconf = g_cache_dumpconf;
- newpp = g_new_providerf(gp, "cache/%s", gp->name);
+ newpp = g_new_providerf(gp, "%s", gp->name);
if (newpp == NULL) {
- G_CACHE_DEBUG(0, "Cannot create provider cache/%s.", gp->name);
+ G_CACHE_DEBUG(0, "Cannot create provider %s.", gp->name);
goto fail;
}
newpp->sectorsize = pp->sectorsize;
@@ -709,7 +703,7 @@
gp = g_cache_create(mp, pp, &md, G_CACHE_TYPE_AUTOMATIC);
if (gp == NULL) {
- G_CACHE_DEBUG(0, "Can't create %s.", md.md_name);
+ G_CACHE_DEBUG(0, "Can't create %s%s.", pp->name, G_CACHE_SUFFIX);
return (NULL);
}
return (gp);
@@ -732,19 +726,13 @@
gctl_error(req, "No '%s' argument", "nargs");
return;
}
- if (*nargs != 2) {
+ if (*nargs != 1) {
gctl_error(req, "Invalid number of arguments.");
return;
}
strlcpy(md.md_magic, G_CACHE_MAGIC, sizeof(md.md_magic));
md.md_version = G_CACHE_VERSION;
- name = gctl_get_asciiparam(req, "arg0");
- if (name == NULL) {
- gctl_error(req, "No 'arg0' argument");
- return;
- }
- strlcpy(md.md_name, name, sizeof(md.md_name));
size = gctl_get_paraml(req, "size", sizeof(*size));
if (size == NULL) {
@@ -771,9 +759,9 @@
/* This field is not important here. */
md.md_provsize = 0;
- name = gctl_get_asciiparam(req, "arg1");
+ name = gctl_get_asciiparam(req, "arg0");
if (name == NULL) {
- gctl_error(req, "No 'arg1' argument");
+ gctl_error(req, "No 'arg0' argument");
return;
}
if (strncmp(name, "/dev/", strlen("/dev/")) == 0)
@@ -786,7 +774,7 @@
}
gp = g_cache_create(mp, pp, &md, G_CACHE_TYPE_MANUAL);
if (gp == NULL) {
- gctl_error(req, "Can't create %s.", md.md_name);
+ gctl_error(req, "Can't create %s%s.", pp->name, G_CACHE_SUFFIX);
return;
}
}
@@ -818,13 +806,14 @@
gctl_error(req, "No 'arg0' argument");
return;
}
+#if 0
sc = g_cache_find_device(mp, name);
if (sc == NULL) {
G_CACHE_DEBUG(1, "Device %s is invalid.", name);
gctl_error(req, "Device %s is invalid.", name);
return;
}
-
+#endif
size = gctl_get_paraml(req, "size", sizeof(*size));
if (size == NULL) {
gctl_error(req, "No '%s' argument", "size");
@@ -850,7 +839,6 @@
if (sc->sc_type != G_CACHE_TYPE_AUTOMATIC)
return;
- strlcpy(md.md_name, name, sizeof(md.md_name));
strlcpy(md.md_magic, G_CACHE_MAGIC, sizeof(md.md_magic));
md.md_version = G_CACHE_VERSION;
if ((u_int)*size != 0)
Index: sys/geom/cache/g_cache.h
===================================================================
RCS file: /home/ncvs/src/sys/geom/cache/g_cache.h,v
retrieving revision 1.1.6.1
diff -u -r1.1.6.1 g_cache.h
--- sys/geom/cache/g_cache.h 25 Nov 2008 02:59:29 -0000 1.1.6.1
+++ sys/geom/cache/g_cache.h 22 Jan 2009 08:17:38 -0000
@@ -34,6 +34,7 @@
#define G_CACHE_CLASS_NAME "CACHE"
#define G_CACHE_MAGIC "GEOM::CACHE"
#define G_CACHE_VERSION 1
+#define G_CACHE_SUFFIX ".cache"
#ifdef _KERNEL
#define G_CACHE_TYPE_MANUAL 0
@@ -113,7 +114,6 @@
struct g_cache_metadata {
char md_magic[16]; /* Magic value. */
uint32_t md_version; /* Version number. */
- char md_name[16]; /* Cache value. */
uint32_t md_bsize; /* Cache block size. */
uint32_t md_size; /* Cache size. */
uint64_t md_provsize; /* Provider's size. */
@@ -125,10 +125,9 @@
bcopy(md->md_magic, data, sizeof(md->md_magic));
le32enc(data + 16, md->md_version);
- bcopy(md->md_name, data + 20, sizeof(md->md_name));
- le32enc(data + 36, md->md_bsize);
- le32enc(data + 40, md->md_size);
- le64enc(data + 44, md->md_provsize);
+ le32enc(data + 20, md->md_bsize);
+ le32enc(data + 24, md->md_size);
+ le64enc(data + 28, md->md_provsize);
}
static __inline void
@@ -137,10 +136,9 @@
bcopy(data, md->md_magic, sizeof(md->md_magic));
md->md_version = le32dec(data + 16);
- bcopy(data + 20, md->md_name, sizeof(md->md_name));
- md->md_bsize = le32dec(data + 36);
- md->md_size = le16dec(data + 40);
- md->md_provsize = le64dec(data + 44);
+ md->md_bsize = le32dec(data + 20);
+ md->md_size = le16dec(data + 24);
+ md->md_provsize = le64dec(data + 24);
}
#endif /* _G_CACHE_H_ */
Index: sbin/geom/class/cache/geom_cache.c
===================================================================
RCS file: /home/ncvs/src/sbin/geom/class/cache/geom_cache.c,v
retrieving revision 1.3.6.1
diff -u -r1.3.6.1 geom_cache.c
--- sbin/geom/class/cache/geom_cache.c 25 Nov 2008 02:59:29 -0000 1.3.6.1
+++ sbin/geom/class/cache/geom_cache.c 22 Jan 2009 08:17:38 -0000
@@ -62,7 +62,7 @@
{ 's', "size", &size_configure, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- NULL, "[-v] [-b blocksize] [-s size] name"
+ NULL, "[-v] [-b blocksize] [-s size] prov"
},
{ "create", G_FLAG_VERBOSE | G_FLAG_LOADKLD, NULL,
{
@@ -70,14 +70,14 @@
{ 's', "size", &size_label, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- NULL, "[-v] [-b blocksize] [-s size] name prov"
+ NULL, "[-v] [-b blocksize] [-s size] prov"
},
{ "destroy", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- NULL, "[-fv] name ..."
+ NULL, "[-fv] prov ..."
},
{ "dump", 0, cache_main, G_NULL_OPTS, NULL,
"prov ..."
@@ -88,17 +88,17 @@
{ 's', "size", &size_label, G_TYPE_NUMBER },
G_OPT_SENTINEL
},
- NULL, "[-v] [-b blocksize] [-s size] name prov"
+ NULL, "[-v] [-b blocksize] [-s size] prov"
},
{ "reset", G_FLAG_VERBOSE, NULL, G_NULL_OPTS, NULL,
- "[-v] name ..."
+ "[-v] prov ..."
},
{ "stop", G_FLAG_VERBOSE, NULL,
{
{ 'f', "force", NULL, G_TYPE_BOOL },
G_OPT_SENTINEL
},
- NULL, "[-fv] name ..."
+ NULL, "[-fv] prov ..."
},
G_CMD_SENTINEL
};
@@ -138,21 +138,19 @@
intmax_t val;
nargs = gctl_get_int(req, "nargs");
- if (nargs != 2) {
+ if (nargs != 1) {
gctl_error(req, "Invalid number of arguments.");
return;
}
strlcpy(md.md_magic, G_CACHE_MAGIC, sizeof(md.md_magic));
md.md_version = G_CACHE_VERSION;
- name = gctl_get_ascii(req, "arg0");
- strlcpy(md.md_name, name, sizeof(md.md_name));
val = gctl_get_intmax(req, "blocksize");
md.md_bsize = val;
val = gctl_get_intmax(req, "size");
md.md_size = val;
- name = gctl_get_ascii(req, "arg1");
+ name = gctl_get_ascii(req, "arg0");
md.md_provsize = g_get_mediasize(name);
if (md.md_provsize == 0) {
fprintf(stderr, "Can't get mediasize of %s: %s.\n",
@@ -204,7 +202,6 @@
printf(" Magic string: %s\n", md->md_magic);
printf(" Metadata version: %u\n", (u_int)md->md_version);
- printf(" Device name: %s\n", md->md_name);
printf(" Block size: %u\n", (u_int)md->md_bsize);
printf(" Cache size: %u\n", (u_int)md->md_size);
printf(" Provider size: %ju\n", (uintmax_t)md->md_provsize);
--Multipart=_Thu__22_Jan_2009_03_24_55_-0500_aV.gtuCgOo9pWE9w--
More information about the freebsd-geom
mailing list