[Cluster-devel] [PATCH] Make rgmanager flip rg states when storing.
Fabio M. Di Nitto
fabbione at ubuntu.com
Wed Jan 2 19:39:28 UTC 2008
ACK.. works fine here... but you know that.
Fabio
On Wed, 2 Jan 2008, Lon Hohberger wrote:
> On Wed, 2008-01-02 at 14:14 -0500, Lon Hohberger wrote:
>> Patch is against head. This might break upgrade compatibility. A more
>> robust patch including endian detection will be required for -RHEL5
>
> This one was memcpy()ing the wrong size. Here's a new one.
>
> -- Lon
>
>
> Index: rg_state.c
> ===================================================================
> RCS file: /cvs/cluster/cluster/rgmanager/src/daemons/rg_state.c,v
> retrieving revision 1.44
> diff -u -p -r1.44 rg_state.c
> --- rg_state.c 30 Dec 2007 08:27:21 -0000 1.44
> +++ rg_state.c 2 Jan 2008 19:30:49 -0000
> @@ -270,6 +270,7 @@ int
> set_rg_state(char *name, rg_state_t *svcblk)
> {
> char res[256];
> + rg_state_t svcblk_store;
> #ifndef OPENAIS
> cluster_member_list_t *membership;
> int ret, tries = 0;
> @@ -279,8 +280,12 @@ set_rg_state(char *name, rg_state_t *svc
> strncpy(svcblk->rs_name, name, sizeof(svcblk->rs_name));
>
> snprintf(res, sizeof(res), "rg=\"%s\"", name);
> +
> + memcpy(&svcblk_store, svcblk, sizeof(svcblk_store));
> + swab_rg_state_t(&svcblk_store);
> +
> #ifdef OPENAIS
> - if (ds_write(res, svcblk, sizeof(*svcblk)) < 0)
> + if (ds_write(res, &svcblk_store, sizeof(svcblk_store)) < 0)
> return -1;
> return 0;
> #else
> @@ -288,8 +293,9 @@ set_rg_state(char *name, rg_state_t *svc
> /* Retry up to 3 times just in case members transition
> while we're trying to commit something */
> membership = member_list();
> - ret = vf_write(membership, VFF_IGN_CONN_ERRORS, res, svcblk,
> - sizeof(*svcblk));
> + ret = vf_write(membership, VFF_IGN_CONN_ERRORS, res,
> + &svcblk_store,
> + sizeof(svcblk_store));
> free_member_list(membership);
> } while (ret == VFR_TIMEOUT && ++tries < 3);
>
> @@ -360,6 +366,7 @@ get_rg_state(char *name, rg_state_t *svc
> }
>
> memcpy(svcblk, data, sizeof(*svcblk));
> + swab_rg_state_t(svcblk);
>
> return 0;
> #else
> @@ -399,6 +406,7 @@ get_rg_state(char *name, rg_state_t *svc
>
> /* Copy out the data. */
> memcpy(svcblk, data, sizeof(*svcblk));
> + swab_rg_state_t(svcblk);
> free(data);
> free_member_list(membership);
>
> @@ -452,6 +460,7 @@ get_rg_state_local(char *name, rg_state_
>
> /* Copy out the data. */
> memcpy(svcblk, data, sizeof(*svcblk));
> + swab_rg_state_t(svcblk);
> #ifndef OPENAIS
> free(data);
> #endif
>
>
--
I'm going to make him an offer he can't refuse.
More information about the Cluster-devel
mailing list