/* If it returns zero, something really bad happened, as it means the works struct was already queued, but we have just allocated it, so it should not happen.  */
int i2400m_schedule_work(struct i2400m *i2400m, void(*fn)(struct work_struct *), gfp_t gfp_flags, const void *pl, size_t pl_size)
/* If it returns zero, something really bad happened, as it means the works struct was already queued, but we have just allocated it, so it should not happen.  */
int i2400m_schedule_work(struct i2400m *i2400m, void(*fn)(struct work_struct *), gfp_t gfp_flags, const void *pl, size_t pl_size)
{
	int result;
	struct i2400m_work *iw;
	result = -ENOMEM;
	iw = __i2400m_work_setup(i2400m, fn, gfp_flags, pl, pl_size);
	if (iw != NULL) {
		result = schedule_work(&iw->ws);
		if (WARN_ON(result == 0))
			result = -ENXIO;
	}
	return result;
}