[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <4F843553.3090004@parallels.com>
Date: Tue, 10 Apr 2012 17:27:47 +0400
From: Stanislav Kinsbursky <skinsbursky@...allels.com>
To: "akpm@...ux-foundation.org" <akpm@...ux-foundation.org>
CC: Pavel Emelyanov <xemul@...allels.com>,
"serge.hallyn@...onical.com" <serge.hallyn@...onical.com>,
"criu@...nvz.org" <criu@...nvz.org>,
"arnd@...db.de" <arnd@...db.de>,
"lucas.demarchi@...fusion.mobi" <lucas.demarchi@...fusion.mobi>,
"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
"dhowells@...hat.com" <dhowells@...hat.com>,
"mtk.manpages@...il.com" <mtk.manpages@...il.com>
Subject: [CRIU] [PATCH v2 2/4] ipc: move all checkpoint-restore code under
appropriate define
v2: added dummy compat_do_msg_peek_all() and do_msg_peek_all() functions used in
case of CONFIG_CHECKPOINT_RESTORE is not defined.
All new checkpoint/restore code parts are now covered with
CONFIG_CHECKPOINT_RESTORE macro. So it would be easy to remove them, in case
the whole project fails.
---
ipc/compat.c | 8 +++++++-
ipc/msg.c | 15 +++++++++++++++
2 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/ipc/compat.c b/ipc/compat.c
index 96cb9db..87317ff 100644
--- a/ipc/compat.c
+++ b/ipc/compat.c
@@ -334,7 +334,7 @@ long compat_sys_msgsnd(int first, int second, int third,
void __user *uptr)
return do_msgsnd(first, type, up->mtext, second, third);
}
-
+#ifdef CONFIG_CHECKPOINT_RESTORE
static long compat_do_msg_peek_all(void __user *dest, struct msg_msg *msg,
size_t bufsz)
{
struct compat_msgbuf_a __user *msgp = dest;
@@ -354,6 +354,12 @@ static long compat_do_msg_peek_all(void __user *dest,
struct msg_msg *msg, size_
return -EFAULT;
return msgsz;
}
+#else
+static long compat_do_msg_peek_all(void __user *dest, struct msg_msg *msg,
size_t bufsz)
+{
+ return -EINVAL;
+}
+#endif
long compat_do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
{
diff --git a/ipc/msg.c b/ipc/msg.c
index 017bf0b..af08fe6 100644
--- a/ipc/msg.c
+++ b/ipc/msg.c
@@ -762,6 +762,7 @@ static inline int convert_mode(long *msgtyp, int msgflg)
return SEARCH_EQUAL;
}
+#ifdef CONFIG_CHECKPOINT_RESTORE
static long do_msg_peek_all(void __user *dest, struct msg_msg *msg, size_t bufsz)
{
struct msgbuf_a __user *msgp = dest;
@@ -788,6 +789,12 @@ static long do_msg_peek_all(void __user *dest, struct
msg_msg *msg, size_t bufsz
return -EFAULT;
return msgsz;
}
+#else
+static long do_msg_peek_all(void __user *dest, struct msg_msg *msg, size_t bufsz)
+{
+ return -EINVAL;
+}
+#endif
static long do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz)
{
@@ -811,7 +818,9 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz,
long msgtyp,
struct msg_msg *msg;
int mode;
struct ipc_namespace *ns;
+#ifdef CONFIG_CHECKPOINT_RESTORE
size_t arrsz = bufsz;
+#endif
if (msqid < 0 || (long) bufsz < 0)
return -EINVAL;
@@ -845,6 +854,7 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz,
long msgtyp,
walk_msg->m_type != 1) {
msg = walk_msg;
msgtyp = walk_msg->m_type - 1;
+#ifdef CONFIG_CHECKPOINT_RESTORE
} else if (msgflg & MSG_PEEK_ALL) {
long ret;
@@ -855,6 +865,7 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz,
long msgtyp,
}
buf += ret;
arrsz -= ret;
+#endif
} else {
msg = walk_msg;
break;
@@ -863,8 +874,10 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz,
long msgtyp,
tmp = tmp->next;
}
if (!IS_ERR(msg)) {
+#ifdef CONFIG_CHECKPOINT_RESTORE
if (msgflg & MSG_PEEK_ALL)
goto out_unlock;
+#endif
/*
* Found a suitable message.
* Unlink it from the queue.
@@ -959,8 +972,10 @@ out_unlock:
if (IS_ERR(msg))
return PTR_ERR(msg);
+#ifdef CONFIG_CHECKPOINT_RESTORE
if (msgflg & MSG_PEEK_ALL)
return bufsz - arrsz;
+#endif
bufsz = msg_fill(buf, msg, bufsz);
free_msg(msg);
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists