int preferred_subdevice[SND_CTL_SUBDEV_ITEMS];
        wait_queue_head_t change_sleep;
        spinlock_t read_lock;
-       struct fasync_struct *fasync;
+       struct snd_fasync *fasync;
        int subscribed;                 /* read interface is activated */
        struct list_head events;        /* waiting events for read */
 };
 
                        if (control->vd[idx].owner == ctl)
                                control->vd[idx].owner = NULL;
        up_write(&card->controls_rwsem);
+       snd_fasync_free(ctl->fasync);
        snd_ctl_empty_read_queue(ctl);
        put_pid(ctl->pid);
        kfree(ctl);
        _found:
                wake_up(&ctl->change_sleep);
                spin_unlock(&ctl->read_lock);
-               kill_fasync(&ctl->fasync, SIGIO, POLL_IN);
+               snd_kill_fasync(ctl->fasync, SIGIO, POLL_IN);
        }
        read_unlock_irqrestore(&card->ctl_files_rwlock, flags);
 }
        struct snd_ctl_file *ctl;
 
        ctl = file->private_data;
-       return fasync_helper(fd, file, on, &ctl->fasync);
+       return snd_fasync_helper(fd, file, on, &ctl->fasync);
 }
 
 /* return the preferred subdevice number if already assigned;
        read_lock_irqsave(&card->ctl_files_rwlock, flags);
        list_for_each_entry(ctl, &card->ctl_files, list) {
                wake_up(&ctl->change_sleep);
-               kill_fasync(&ctl->fasync, SIGIO, POLL_ERR);
+               snd_kill_fasync(ctl->fasync, SIGIO, POLL_ERR);
        }
        read_unlock_irqrestore(&card->ctl_files_rwlock, flags);