[SCSI] libsas: trim sas_task of slow path infrastructure
The timer and the completion are only used for slow path tasks (smp, and lldd tmfs), yet we incur the allocation space and cpu setup time for every fast path task. Cc: Xiangliang Yu <yuxiangl@marvell.com> Acked-by: Jack Wang <jack_wang@usish.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
This commit is contained in:

committed by
James Bottomley

parent
a494fd5bd9
commit
f0bf750c2d
@@ -48,18 +48,37 @@ struct sas_task *sas_alloc_task(gfp_t flags)
|
||||
INIT_LIST_HEAD(&task->list);
|
||||
spin_lock_init(&task->task_state_lock);
|
||||
task->task_state_flags = SAS_TASK_STATE_PENDING;
|
||||
init_timer(&task->timer);
|
||||
init_completion(&task->completion);
|
||||
}
|
||||
|
||||
return task;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sas_alloc_task);
|
||||
|
||||
struct sas_task *sas_alloc_slow_task(gfp_t flags)
|
||||
{
|
||||
struct sas_task *task = sas_alloc_task(flags);
|
||||
struct sas_task_slow *slow = kmalloc(sizeof(*slow), flags);
|
||||
|
||||
if (!task || !slow) {
|
||||
if (task)
|
||||
kmem_cache_free(sas_task_cache, task);
|
||||
kfree(slow);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
task->slow_task = slow;
|
||||
init_timer(&slow->timer);
|
||||
init_completion(&slow->completion);
|
||||
|
||||
return task;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sas_alloc_slow_task);
|
||||
|
||||
void sas_free_task(struct sas_task *task)
|
||||
{
|
||||
if (task) {
|
||||
BUG_ON(!list_empty(&task->list));
|
||||
kfree(task->slow_task);
|
||||
kmem_cache_free(sas_task_cache, task);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user