The intention was to make sure, that only one packet is sent at a time. And thus read has to return exactly the size of one packet. But it doesnt' work as expected, because size of autofs_v5_packet_union differs on 32 bit and 64 bit architectures. This is a bug, but it's hidden so deeply, that no one really cares by the following 2 aspects: 1) Autofs pipe has O_DIRECT flag, which means excess bytes will be discarded upon read. 2) No one tries to read more than one packet at a time.
So let's fix the test instead and do not try to read more bytes, than expected. https://jira.sw.ru/browse/PSBM-71078 Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com> --- test/zdtm/static/autofs.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/test/zdtm/static/autofs.c b/test/zdtm/static/autofs.c index 747ab69..ae78538 100644 --- a/test/zdtm/static/autofs.c +++ b/test/zdtm/static/autofs.c @@ -460,7 +460,7 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param { union autofs_v5_packet_union *packet; ssize_t bytes; - size_t psize = sizeof(*packet) + 1; + size_t psize = sizeof(*packet); int err = 0; packet = malloc(psize); @@ -473,7 +473,7 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param siginterrupt(SIGUSR2, 1); while (!stop && !err) { - memset(packet, 0, sizeof(*packet)); + memset(packet, 0, psize); bytes = read(pipe, packet, psize); if (bytes < 0) { @@ -483,12 +483,9 @@ static int automountd_loop(int pipe, const char *mountpoint, struct autofs_param } continue; } - if (bytes == psize) { - pr_err("read more that expected\n"); - return -EINVAL; - } - if (bytes != sizeof(*packet)) { - pr_err("read less than expected: %zd\n", bytes); + if (bytes != psize) { + pr_err("read less than expected: %zd < %zd\n", + bytes, psize); return -EINVAL; } err = automountd_serve(mountpoint, param, packet); _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel