/* Enqueue a work item to be picked up by the vfs xfssyncd thread. Doing this has two advantages: */
STATIC void xfs_syncd_queue_work(struct xfs_mount *mp, void *data, void(*syncer)(struct xfs_mount *, void *), struct completion *completion)
/* Enqueue a work item to be picked up by the vfs xfssyncd thread. Doing this has two advantages: */
STATIC void xfs_syncd_queue_work(struct xfs_mount *mp, void *data, void(*syncer)(struct xfs_mount *, void *), struct completion *completion)
{
	struct xfs_sync_work *work;
	work = kmem_alloc(sizeof(struct xfs_sync_work), KM_SLEEP);
	INIT_LIST_HEAD(&work->w_list);
	work->w_syncer = syncer;
	work->w_data = data;
	work->w_mount = mp;
	work->w_completion = completion;
	spin_lock(&mp->m_sync_lock);
	list_add_tail(&work->w_list, &mp->m_sync_list);
	spin_unlock(&mp->m_sync_lock);
	wake_up_process(mp->m_sync_task);
}