[RFC] Alignment- / padding-requirements
Swen Schillig
swen at vnet.ibm.com
Mon Mar 5 08:42:15 UTC 2018
For the last few days I've been looking at
the memory handing within CTDB and I stumbled over code snippets like
size = (length+(CTDB_DS_ALIGNMENT-1)) & ~(CTDB_DS_ALIGNMENT-1);
I might be wrong, but what is done here is padding and not alignment
and I might be wrong again, but padding memory to a multiple of the
wanted alignment does not guarantee the alignment.
So, I'm a bit puzzled what is really wanted here.
>From the comments around the define
/* we must align packets to ensure ctdb works on all architectures (eg.
sparc) */
#define CTDB_DS_ALIGNMENT 8
.. I take it that really alignment is required to make sure 64bit
access is
guaranteed on architectures which need it (here SPARC !?)
But the structure(s) which are wanted to be aligned
struct ctdb_req_call_old
struct ctdb_req_header
do not contain any 64bit values.
So here comes my question, do we really need to do those ugly padding
tricks and
as a second question, if we really do need/want 64bit alignment why not
do it like
struct abc {
...
} __attribute__((aligned (8)));
I know this is gcc style but isn't this standard nowadays ?
Thanks for your support in advance !
Cheers Swen
More information about the samba-technical
mailing list