Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Jan 2009 08:30:10 GMT
From:      Yoshihiro Ota <ota@j.email.ne.jp>
To:        freebsd-geom@FreeBSD.org
Subject:   Re: kern/129245: [geom] gcache is more suitable for suffix based provider name
Message-ID:  <200901220830.n0M8UApX049636@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/129245; it has been noted by GNATS.

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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200901220830.n0M8UApX049636>