changeset 9933:24d797986369

6852255 sbd_pgr_meta_write()/sbd_pgr_meta_load() infinite recursion
author Nattuvetty Bhavyan <Nattuvetty.Bhavyan@Sun.COM>
date Mon, 22 Jun 2009 12:41:29 -0700
parents a8333f243e6e
children a4bd03644408
files usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd.c usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd_pgr.c
diffstat 2 files changed, 23 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd.c	Mon Jun 22 13:27:48 2009 -0600
+++ b/usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd.c	Mon Jun 22 12:41:29 2009 -0700
@@ -49,7 +49,7 @@
 
 #define	SBD_IS_ZVOL(zvol)	(strncmp("/dev/zvol", zvol, 9))
 
-extern sbd_status_t sbd_pgr_meta_write(sbd_lu_t *sl);
+extern sbd_status_t sbd_pgr_meta_init(sbd_lu_t *sl);
 extern sbd_status_t sbd_pgr_meta_load(sbd_lu_t *sl);
 
 static int sbd_getinfo(dev_info_t *dip, ddi_info_cmd_t cmd, void *arg,
@@ -1599,7 +1599,7 @@
 		goto scm_err_out;
 	}
 
-	if (sbd_pgr_meta_write(sl) != SBD_SUCCESS) {
+	if (sbd_pgr_meta_init(sl) != SBD_SUCCESS) {
 		*err_ret = SBD_RET_META_CREATION_FAILED;
 		ret = EIO;
 		goto scm_err_out;
--- a/usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd_pgr.c	Mon Jun 22 13:27:48 2009 -0600
+++ b/usr/src/uts/common/io/comstar/lu/stmf_sbd/sbd_pgr.c	Mon Jun 22 12:41:29 2009 -0700
@@ -51,6 +51,7 @@
 char *sbd_get_devid_string(sbd_lu_t *);
 void sbd_base16_str_to_binary(char *c, int, uint8_t *);
 
+sbd_status_t sbd_pgr_meta_init(sbd_lu_t *);
 sbd_status_t sbd_pgr_meta_load(sbd_lu_t *);
 sbd_status_t sbd_pgr_meta_write(sbd_lu_t *);
 static void sbd_swap_pgr_info(sbd_pgr_info_t *);
@@ -279,6 +280,25 @@
 }
 
 sbd_status_t
+sbd_pgr_meta_init(sbd_lu_t *slu)
+{
+	sbd_pgr_info_t	*spi = NULL;
+	uint32_t 	sz;
+	sbd_status_t	ret;
+
+	sz = sizeof (sbd_pgr_info_t);
+	spi = (sbd_pgr_info_t *)kmem_zalloc(sz, KM_SLEEP);
+	spi->pgr_data_order = SMS_DATA_ORDER;
+	spi->pgr_sms_header.sms_size = sz;
+	spi->pgr_sms_header.sms_id = SMS_ID_PGR_INFO;
+	spi->pgr_sms_header.sms_data_order = SMS_DATA_ORDER;
+
+	ret = sbd_write_meta_section(slu, (sm_section_hdr_t *)spi);
+	kmem_free(spi, sz);
+	return (ret);
+}
+
+sbd_status_t
 sbd_pgr_meta_load(sbd_lu_t *slu)
 {
 	sbd_pgr_t		*pgr = slu->sl_pgr;
@@ -296,7 +316,7 @@
 		/* No PGR section found, means volume made before PGR support */
 		if (ret == SBD_NOT_FOUND) {
 			/* So just create a default PGR section */
-			ret = sbd_pgr_meta_write(slu);
+			ret = sbd_pgr_meta_init(slu);
 		}
 		return (ret);
 	}