Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP2:GA
lvm2.631
cmirrord-fix-s390-endian-issue.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File cmirrord-fix-s390-endian-issue.patch of Package lvm2.631
From 829e5a40373a2ef1721dc9210350c86c4b9d70f7 Mon Sep 17 00:00:00 2001 From: Liuhua Wang <lwang@suse.com> Date: Sat, 13 Sep 2014 02:08:28 -0500 Subject: cmirror: fix endian issues on s390 Git-repo: https://git.fedorahosted.org/git/lvm2.git Git-commit: 829e5a40373a2ef1721dc9210350c86c4b9d70f7 References: bnc#890452 bnc#893684 Cmirrord has endian bugs, which cause failure to lvcreate a mirrored lv on s390. - data_size is uint32, should not use xlate64 to convert, which will cause data_size 0 after xlate. - request_type and data_size still used by local(v5_data_switch), should convert later. If request_type xlate too early, it will cause request_type judge error; if data_size xlate too early, it will cause coredump in case DM_ULOG_CLEAR_REGION. - when receiving package in clog_request_from_network. vp[0] will always be little endian. We could use xlate64(vp[0]) == vp[0] to decide if the local node is little endian or not. Signed-off-by: Lidong Zhong<lzhong@suse.com> & Liuhua Wang <lwang@suse.com> Signed-off-by: Jonathan Brassow <jbrassow@redhat.com> --- daemons/cmirrord/compat.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/daemons/cmirrord/compat.c b/daemons/cmirrord/compat.c index 3f7a9b5..4955f50 100644 --- a/daemons/cmirrord/compat.c +++ b/daemons/cmirrord/compat.c @@ -126,13 +126,13 @@ static int v5_endian_to_network(struct c u_rq->error = xlate32(u_rq->error); u_rq->seq = xlate32(u_rq->seq); - u_rq->request_type = xlate32(u_rq->request_type); - u_rq->data_size = xlate64(u_rq->data_size); - rq->originator = xlate32(rq->originator); v5_data_endian_switch(rq, 1); + u_rq->request_type = xlate32(u_rq->request_type); + u_rq->data_size = xlate32(u_rq->data_size); + return size; } @@ -167,7 +167,7 @@ static int v5_endian_from_network(struct u_rq->error = xlate32(u_rq->error); u_rq->seq = xlate32(u_rq->seq); u_rq->request_type = xlate32(u_rq->request_type); - u_rq->data_size = xlate64(u_rq->data_size); + u_rq->data_size = xlate32(u_rq->data_size); rq->originator = xlate32(rq->originator); @@ -187,7 +187,7 @@ int clog_request_from_network(void *data switch (version) { case 5: /* Upstream */ - if (version == unconverted_version) + if (version == vp[0]) return 0; break; case 4: /* RHEL 5.[45] */
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor