From: Atsushi Nemoto snd_pcm_lib_preallocate_free_for_all() is called from snd_pcm_free() just after calling the private_free routine. So there should be no need to call it in driver's private_free routine. Signed-off-by: Atsushi Nemoto Cc: Takashi Iwai Cc: Hans-Christian Egtvedt Cc: Jaroslav Kysela Signed-off-by: Andrew Morton --- sound/spi/at73c213.c | 10 ---------- 1 file changed, 10 deletions(-) diff -puN sound/spi/at73c213.c~at73c213-remove-redundant-private_free-routine sound/spi/at73c213.c --- a/sound/spi/at73c213.c~at73c213-remove-redundant-private_free-routine +++ a/sound/spi/at73c213.c @@ -314,15 +314,6 @@ static struct snd_pcm_ops at73c213_playb .pointer = snd_at73c213_pcm_pointer, }; -static void snd_at73c213_pcm_free(struct snd_pcm *pcm) -{ - struct snd_at73c213 *chip = snd_pcm_chip(pcm); - if (chip->pcm) { - snd_pcm_lib_preallocate_free_for_all(chip->pcm); - chip->pcm = NULL; - } -} - static int __devinit snd_at73c213_pcm_new(struct snd_at73c213 *chip, int device) { struct snd_pcm *pcm; @@ -334,7 +325,6 @@ static int __devinit snd_at73c213_pcm_ne goto out; pcm->private_data = chip; - pcm->private_free = snd_at73c213_pcm_free; pcm->info_flags = SNDRV_PCM_INFO_BLOCK_TRANSFER; strcpy(pcm->name, "at73c213"); chip->pcm = pcm; _