connection: let kdbus_conn_queue_insert() hand back the used offset
authorDaniel Mack <zonque@gmail.com>
Fri, 17 Jan 2014 20:31:11 +0000 (21:31 +0100)
committerDaniel Mack <zonque@gmail.com>
Fri, 17 Jan 2014 20:31:11 +0000 (21:31 +0100)
... so we can store the answer offset in case of synchronous operations.

connection.c

index f136eacf41b6d202cc6ad5506dc3448936af031c..62c84504ad853a3a777e14c2ae0f65a401b490a3 100644 (file)
@@ -414,7 +414,8 @@ static void kdbus_conn_queue_cleanup(struct kdbus_conn_queue *queue)
 
 /* enqueue a message into the receiver's pool */
 static int kdbus_conn_queue_insert(struct kdbus_conn *conn,
-                                  struct kdbus_kmsg *kmsg)
+                                  struct kdbus_kmsg *kmsg,
+                                  u64 *offset)
 {
        struct kdbus_conn_queue *queue;
        u64 msg_size;
@@ -575,6 +576,9 @@ static int kdbus_conn_queue_insert(struct kdbus_conn *conn,
 
        mutex_unlock(&conn->lock);
 
+       if (offset)
+               *offset = off;
+
        /* wake up poll() */
        wake_up_interruptible(&conn->ep->wait);
        return 0;
@@ -976,6 +980,7 @@ int kdbus_conn_kmsg_send(struct kdbus_ep *ep,
        const struct kdbus_msg *msg = &kmsg->msg;
        struct kdbus_conn *conn_dst = NULL;
        struct kdbus_conn *c;
+       u64 offset;
        int ret;
 
        /* assign namespace-global message sequence number */
@@ -1020,7 +1025,7 @@ int kdbus_conn_kmsg_send(struct kdbus_ep *ep,
                                                  kmsg->seq,
                                                  conn_dst->attach_flags);
 
-                       kdbus_conn_queue_insert(conn_dst, kmsg);
+                       kdbus_conn_queue_insert(conn_dst, kmsg, NULL);
                }
                mutex_unlock(&ep->bus->lock);
 
@@ -1112,10 +1117,10 @@ int kdbus_conn_kmsg_send(struct kdbus_ep *ep,
         */
        mutex_lock(&ep->bus->lock);
        list_for_each_entry(c, &ep->bus->monitors_list, monitor_entry)
-               kdbus_conn_queue_insert(c, kmsg);
+               kdbus_conn_queue_insert(c, kmsg, NULL);
        mutex_unlock(&ep->bus->lock);
 
-       ret = kdbus_conn_queue_insert(conn_dst, kmsg);
+       ret = kdbus_conn_queue_insert(conn_dst, kmsg, &offset);
        if (ret < 0)
                goto exit_unref;