[CRIU] [PATCH 0/2] Make the test static/file_fown pass on ARM
Alexander Kartashov
alekskartashov at parallels.com
Mon Jan 28 04:30:06 EST 2013
On 01/28/2013 12:22 PM, Alexander Kartashov wrote:
> Dear colleagues,
>
> This patchset makes the static/file_fown pass on ARM
> by introducing the correct value of the macro O_LARGEFILE
> for the x86 and ARM architecures.
>
> --
> Sincerely yours,
> Alexander Kartashov
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
The problem with the test static/file_fown is the following
as the comment reads:
/*
* The kernel's O_LARGEFILE set automatically
* on open() in x86-64, so unmask it explicitly
* we restore pipes via open call while the former
* pipes are created with pipe() and have no O_LARGEFILE
* set.
*/
When a pipe is restored it's writing end is re-opened
using glibc open() that adds the flag O_LARGEFILE:
static int recv_pipe_fd(struct pipe_info *pi)
{
struct fdinfo_list_entry *fle;
char path[32];
int tmp, fd;
fle = file_master(&pi->d);
fd = fle->fe->fd;
pr_info("\tWaiting fd for %d\n", fd);
tmp = recv_fd(fd);
if (tmp < 0) {
pr_err("Can't get fd %d\n", tmp);
return -1;
}
close(fd);
snprintf(path, sizeof(path), "/proc/self/fd/%d", tmp);
fd = open(path, pi->pe->flags);
close(tmp);
if (fd >= 0) {
if (restore_fown(fd, pi->pe->fown)) {
close(fd);
return -1;
}
}
return fd;
}
Isn't it better to replace glibc open() with a direct syscall here
as proposed by Anrew Vagin?
--
Sincerely yours,
Alexander Kartashov
Intern
Core team
www.parallels.com
Skype: aleksandr.kartashov
Email: alekskartashov at parallels.com
More information about the CRIU
mailing list