/* Queue a data sent to a callback. If the connector workqueue is already created, we queue the job on it. Otherwise, we queue the job to kevent and queue the connector workqueue creation too.  */
int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work)
/* Queue a data sent to a callback. If the connector workqueue is already created, we queue the job on it. Otherwise, we queue the job to kevent and queue the connector workqueue creation too.  */
int queue_cn_work(struct cn_callback_entry *cbq, struct work_struct *work)
{
	struct cn_queue_dev *pdev = cbq->pdev;
	if (likely(pdev->cn_queue))
		return queue_work(pdev->cn_queue, work);
	if (atomic_inc_return(&pdev->wq_requested) == 1)
		schedule_work(&pdev->wq_creation);
	else
		atomic_dec(&pdev->wq_requested);
	return schedule_work(work);
}