From mboxrd@z Thu Jan 1 00:00:00 1970 From: teigland@sourceware.org Date: 2 Aug 2006 19:23:43 -0000 Subject: [Cluster-devel] cluster/group/gfs_controld plock.c Message-ID: <20060802192343.30538.qmail@sourceware.org> List-Id: To: cluster-devel.redhat.com MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit CVSROOT: /cvs/cluster Module name: cluster Changes by: teigland at sourceware.org 2006-08-02 19:23:42 Modified files: group/gfs_controld: plock.c Log message: do byte-swapping Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/group/gfs_controld/plock.c.diff?cvsroot=cluster&r1=1.4&r2=1.5 --- cluster/group/gfs_controld/plock.c 2006/08/02 18:27:57 1.4 +++ cluster/group/gfs_controld/plock.c 2006/08/02 19:23:41 1.5 @@ -87,6 +87,36 @@ struct gdlm_plock_info info; }; +static void info_bswap_out(struct gdlm_plock_info *i) +{ + i->version[0] = cpu_to_le32(i->version[0]); + i->version[1] = cpu_to_le32(i->version[1]); + i->version[2] = cpu_to_le32(i->version[2]); + i->pid = cpu_to_le32(i->pid); + i->nodeid = cpu_to_le32(i->nodeid); + i->rv = cpu_to_le32(i->rv); + i->fsid = cpu_to_le32(i->fsid); + i->number = cpu_to_le64(i->number); + i->start = cpu_to_le64(i->start); + i->end = cpu_to_le64(i->end); + i->owner = cpu_to_le64(i->owner); +} + +static void info_bswap_in(struct gdlm_plock_info *i) +{ + i->version[0] = le32_to_cpu(i->version[0]); + i->version[1] = le32_to_cpu(i->version[1]); + i->version[2] = le32_to_cpu(i->version[2]); + i->pid = le32_to_cpu(i->pid); + i->nodeid = le32_to_cpu(i->nodeid); + i->rv = le32_to_cpu(i->rv); + i->fsid = le32_to_cpu(i->fsid); + i->number = le64_to_cpu(i->number); + i->start = le64_to_cpu(i->start); + i->end = le64_to_cpu(i->end); + i->owner = le64_to_cpu(i->owner); +} + static int get_proc_number(const char *file, const char *name, uint32_t *number) { FILE *fl; @@ -267,14 +297,15 @@ info.nodeid = our_nodeid; - /* FIXME: do byte swapping */ - hd = (struct gdlm_header *)buf; hd->type = MSG_PLOCK; hd->nodeid = our_nodeid; hd->to_nodeid = 0; memcpy(buf + sizeof(struct gdlm_header), &info, sizeof(info)); + info_bswap_out((struct gdlm_plock_info *) buf + + sizeof(struct gdlm_header)); + rv = send_group_message(mg, len, buf); free(buf); @@ -755,7 +786,7 @@ memcpy(&info, buf + sizeof(struct gdlm_header), sizeof(info)); - /* FIXME: do byte swapping */ + info_bswap_in(&info); log_group(mg, "receive_plock from %d op %d fs %x num %llx ex %d w %d", from, info.optype, info.fsid, info.number, info.ex, @@ -847,11 +878,11 @@ pp = (struct pack_plock *) §ion_buf; list_for_each_entry(po, &r->locks, list) { - pp->start = po->start; - pp->end = po->end; - pp->owner = po->owner; - pp->pid = po->pid; - pp->nodeid = po->nodeid; + pp->start = cpu_to_le64(po->start); + pp->end = cpu_to_le64(po->end); + pp->owner = cpu_to_le64(po->owner); + pp->pid = cpu_to_le32(po->pid); + pp->nodeid = cpu_to_le32(po->nodeid); pp->ex = po->ex; pp->waiter = 0; pp++; @@ -859,11 +890,11 @@ } list_for_each_entry(w, &r->waiters, list) { - pp->start = w->info.start; - pp->end = w->info.end; - pp->owner = w->info.owner; - pp->pid = w->info.pid; - pp->nodeid = w->info.nodeid; + pp->start = cpu_to_le64(w->info.start); + pp->end = cpu_to_le64(w->info.end); + pp->owner = cpu_to_le64(w->info.owner); + pp->pid = cpu_to_le32(w->info.pid); + pp->nodeid = cpu_to_le32(w->info.nodeid); pp->ex = w->info.ex; pp->waiter = 1; pp++; @@ -899,20 +930,20 @@ for (i = 0; i < count; i++) { if (!pp->waiter) { po = malloc(sizeof(struct posix_lock)); - po->start = pp->start; - po->end = pp->end; - po->owner = pp->owner; - po->pid = pp->pid; - po->nodeid = pp->nodeid; + po->start = le64_to_cpu(pp->start); + po->end = le64_to_cpu(pp->end); + po->owner = le64_to_cpu(pp->owner); + po->pid = le32_to_cpu(pp->pid); + po->nodeid = le32_to_cpu(pp->nodeid); po->ex = pp->ex; list_add_tail(&po->list, &r->locks); } else { w = malloc(sizeof(struct lock_waiter)); - w->info.start = pp->start; - w->info.end = pp->end; - w->info.owner = pp->owner; - w->info.pid = pp->pid; - w->info.nodeid = pp->nodeid; + w->info.start = le64_to_cpu(pp->start); + w->info.end = le64_to_cpu(pp->end); + w->info.owner = le64_to_cpu(pp->owner); + w->info.pid = le32_to_cpu(pp->pid); + w->info.nodeid = le32_to_cpu(pp->nodeid); w->info.ex = pp->ex; list_add_tail(&w->list, &r->waiters); }