From nobody@FreeBSD.org  Fri Nov 28 03:21:03 2008
Return-Path: <nobody@FreeBSD.org>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 9B76E1065675
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 28 Nov 2008 03:21:03 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21])
	by mx1.freebsd.org (Postfix) with ESMTP id 88FEE8FC0A
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 28 Nov 2008 03:21:03 +0000 (UTC)
	(envelope-from nobody@FreeBSD.org)
Received: from www.freebsd.org (localhost [127.0.0.1])
	by www.freebsd.org (8.14.3/8.14.3) with ESMTP id mAS3L3Te060904
	for <freebsd-gnats-submit@FreeBSD.org>; Fri, 28 Nov 2008 03:21:03 GMT
	(envelope-from nobody@www.freebsd.org)
Received: (from nobody@localhost)
	by www.freebsd.org (8.14.3/8.14.3/Submit) id mAS3L3tn060903;
	Fri, 28 Nov 2008 03:21:03 GMT
	(envelope-from nobody)
Message-Id: <200811280321.mAS3L3tn060903@www.freebsd.org>
Date: Fri, 28 Nov 2008 03:21:03 GMT
From: Yoshihiro Ota <ota@j.email.ne.jp>
To: freebsd-gnats-submit@FreeBSD.org
Subject: gcache is more suitable for suffix based provider name
X-Send-Pr-Version: www-3.1
X-GNATS-Notify:

>Number:         129245
>Category:       kern
>Synopsis:       [geom] gcache is more suitable for suffix based provider name
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-geom
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Fri Nov 28 03:30:01 UTC 2008
>Closed-Date:    
>Last-Modified:  Thu Jan 22 08:30:08 UTC 2009
>Originator:     Yoshihiro Ota
>Release:        Since FreeBSD 7.0
>Organization:
>Environment:
FreeBSD xxx 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #6: Thu Nov 27 16:59:42 EST 2008     root@xxx:/usr/obj/amd64/usr/src/sys/GENERIC  amd64
>Description:
Geom Cache requires provider name as its creation argument.  Gcache
creates /dev/cache/<prov> like /dev/concat/<prov> for gconcat.  Suffix
based provider name like gjournaml or geli is more suitable for this class.
>How-To-Repeat:
%gcache 
usage: gcache clear [-v] prov ...
       gcache configure [-v] [-b blocksize] [-s size] name
       gcache create [-v] [-b blocksize] [-s size] name prov
..
>Fix:


>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-geom 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Fri Nov 28 04:53:03 UTC 2008 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=129245 

From: Yoshihiro Ota <ota@j.email.ne.jp>
To: bug-followup@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--
>Unformatted:
