[SCSI] fix scsi_setup_command_freelist failure path race
Looks like that host_cmd_pool_mutex are necessary here. Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
This commit is contained in:
parent
210ba1d172
commit
166a72878f
|
@ -319,17 +319,16 @@ int scsi_setup_command_freelist(struct Scsi_Host *shost)
|
||||||
GFP_KERNEL | shost->cmd_pool->gfp_mask);
|
GFP_KERNEL | shost->cmd_pool->gfp_mask);
|
||||||
if (!cmd)
|
if (!cmd)
|
||||||
goto fail2;
|
goto fail2;
|
||||||
list_add(&cmd->list, &shost->free_list);
|
list_add(&cmd->list, &shost->free_list);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
fail2:
|
fail2:
|
||||||
|
mutex_lock(&host_cmd_pool_mutex);
|
||||||
if (!--pool->users)
|
if (!--pool->users)
|
||||||
kmem_cache_destroy(pool->slab);
|
kmem_cache_destroy(pool->slab);
|
||||||
return -ENOMEM;
|
|
||||||
fail:
|
fail:
|
||||||
mutex_unlock(&host_cmd_pool_mutex);
|
mutex_unlock(&host_cmd_pool_mutex);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue