[CRIU] [PATCHv2 22/30] page-pipe: grow page pipe on compatible iovec size

Dmitry Safonov dsafonov at virtuozzo.com
Fri Jun 24 08:08:27 PDT 2016


Update pointer to first free iov on page pipe growing
according to compat_iov flag.

Cc: Cyrill Gorcunov <gorcunov at openvz.org>
Signed-off-by: Dmitry Safonov <dsafonov at virtuozzo.com>
---
 criu/page-pipe.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/criu/page-pipe.c b/criu/page-pipe.c
index db597b27f1e2..591935771b4d 100644
--- a/criu/page-pipe.c
+++ b/criu/page-pipe.c
@@ -109,6 +109,7 @@ static inline void iov_init_compat(struct iovec_compat *iov, unsigned long addr)
 static int page_pipe_grow(struct page_pipe *pp, unsigned int flags)
 {
 	struct page_pipe_buf *ppb;
+	struct iovec *free_iov;
 
 	pr_debug("Will grow page pipe (iov off is %u)\n", pp->free_iov);
 
@@ -126,7 +127,11 @@ static int page_pipe_grow(struct page_pipe *pp, unsigned int flags)
 		return -1;
 
 out:
-	ppb_init(ppb, 0, 0, flags, &pp->iovs[pp->free_iov]);
+	if (pp->compat_iov)
+		free_iov = (void*)&((struct iovec_compat*)pp->iovs)[pp->free_iov];
+	else
+		free_iov = &pp->iovs[pp->free_iov];
+	ppb_init(ppb, 0, 0, flags, free_iov);
 
 	return 0;
 }
-- 
2.9.0



More information about the CRIU mailing list