Mercurial > illumos > illumos-gate
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); }