/* 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;
mutex_unlock(&conn->lock);
+ if (offset)
+ *offset = off;
+
/* wake up poll() */
wake_up_interruptible(&conn->ep->wait);
return 0;
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 */
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);
*/
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;