diff options
Diffstat (limited to 'ipc/msg.c')
-rw-r--r-- | ipc/msg.c | 25 |
1 files changed, 9 insertions, 16 deletions
@@ -770,16 +770,6 @@ static long do_msg_fill(void __user *dest, struct msg_msg *msg, size_t bufsz) | |||
770 | } | 770 | } |
771 | 771 | ||
772 | #ifdef CONFIG_CHECKPOINT_RESTORE | 772 | #ifdef CONFIG_CHECKPOINT_RESTORE |
773 | static inline struct msg_msg *fill_copy(unsigned long copy_nr, | ||
774 | unsigned long msg_nr, | ||
775 | struct msg_msg *msg, | ||
776 | struct msg_msg *copy) | ||
777 | { | ||
778 | if (copy_nr == msg_nr) | ||
779 | return copy_msg(msg, copy); | ||
780 | return NULL; | ||
781 | } | ||
782 | |||
783 | static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz, | 773 | static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz, |
784 | int msgflg, long *msgtyp, | 774 | int msgflg, long *msgtyp, |
785 | unsigned long *copy_number) | 775 | unsigned long *copy_number) |
@@ -803,8 +793,6 @@ static inline void free_copy(struct msg_msg *copy) | |||
803 | free_msg(copy); | 793 | free_msg(copy); |
804 | } | 794 | } |
805 | #else | 795 | #else |
806 | #define fill_copy(copy_nr, msg_nr, msg, copy) NULL | ||
807 | |||
808 | static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz, | 796 | static inline struct msg_msg *prepare_copy(void __user *buf, size_t bufsz, |
809 | int msgflg, long *msgtyp, | 797 | int msgflg, long *msgtyp, |
810 | unsigned long *copy_number) | 798 | unsigned long *copy_number) |
@@ -868,11 +856,16 @@ long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, | |||
868 | walk_msg->m_type != 1) { | 856 | walk_msg->m_type != 1) { |
869 | msgtyp = walk_msg->m_type - 1; | 857 | msgtyp = walk_msg->m_type - 1; |
870 | } else if (msgflg & MSG_COPY) { | 858 | } else if (msgflg & MSG_COPY) { |
871 | msg = fill_copy(copy_number, | 859 | if (copy_number == msg_counter) { |
872 | msg_counter, | 860 | /* |
873 | walk_msg, copy); | 861 | * Found requested message. |
874 | if (msg) | 862 | * Copy it. |
863 | */ | ||
864 | msg = copy_msg(msg, copy); | ||
865 | if (IS_ERR(msg)) | ||
866 | goto out_unlock; | ||
875 | break; | 867 | break; |
868 | } | ||
876 | } else | 869 | } else |
877 | break; | 870 | break; |
878 | msg_counter++; | 871 | msg_counter++; |